# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# The binding interface for the management server
# The management server will listen on all interfaces by default
# bind.interface=::

# The service context path where URL requests should be served
context.path=/client

# The HTTP port to be used by the management server
http.enable=true
http.port=8080

# Max inactivity time in minutes for the session
session.timeout=30

# Max allowed API request payload/content size in bytes
request.content.size=1048576

# Max allowed API request form keys
request.max.form.keys=5000

# Options to configure and enable HTTPS on the management server
#
# For the management server to pick up these configuration settings, the configured
# keystore file should exist and be readable by the management server.
https.enable=false
https.port=8443

# The keystore and manager passwords are assumed to be same.
https.keystore=/etc/cloudstack/management/cloud.jks
# If you want to encrypt the password itself, follow the steps mentioned at:
http://docs.cloudstack.apache.org/en/latest/adminguide/management.html?highlight=jasypt#changing-the-database-password
https.keystore.password=vmops.com
# If an encrypted password is used, specify the encryption type. Valid types: file, web, env (set environment variable CLOUD_SECRET_KEY)
# password.encryption.type=none

# The path to webapp directory
webapp.dir=/usr/share/cloudstack-management/webapp

# The path to access log file
access.log=/var/log/cloudstack/management/access.log

# The deployment mode for the extensions
extensions.deployment.mode=@EXTENSIONSDEPLOYMENTMODE@

# Thread pool configuration
#threads.min=10
#threads.max=500

# The URL prefix for the system VM templates repository. When downloading system VM templates, the server replaces the
# `downloadrepository` key value from the metadata file in template URLs. If not specified, the original template URL
# will be used for download.
# system.vm.templates.download.repository=http://download.cloudstack.org/systemvm/
