diff --git a/glance/files/queens/glance-cache.conf.Debian b/glance/files/queens/glance-cache.conf.Debian
new file mode 100644
index 0000000..34eba0d
--- /dev/null
+++ b/glance/files/queens/glance-cache.conf.Debian
@@ -0,0 +1,2627 @@
+{%- from "glance/map.jinja" import server with context %}
+[DEFAULT]
+
+#
+# From glance.cache
+#
+
+#
+# Allow users to add additional/custom properties to images.
+#
+# Glance defines a standard set of properties (in its schema) that
+# appear on every image. These properties are also known as
+# ``base properties``. In addition to these properties, Glance
+# allows users to add custom properties to images. These are known
+# as ``additional properties``.
+#
+# By default, this configuration option is set to ``True`` and users
+# are allowed to add additional properties. The number of additional
+# properties that can be added to an image can be controlled via
+# ``image_property_quota`` configuration option.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * image_property_quota
+#
+#  (boolean value)
+#allow_additional_image_properties = true
+
+#
+# Maximum number of image members per image.
+#
+# This limits the maximum of users an image can be shared with. Any
+# negative
+# value is interpreted as unlimited.
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+#image_member_quota = 128
+
+#
+# Maximum number of properties allowed on an image.
+#
+# This enforces an upper limit on the number of additional properties
+# an image
+# can have. Any negative value is interpreted as unlimited.
+#
+# NOTE: This won't have any impact if additional properties are
+# disabled. Please
+# refer to ``allow_additional_image_properties``.
+#
+# Related options:
+#     * ``allow_additional_image_properties``
+#
+#  (integer value)
+#image_property_quota = 128
+
+#
+# Maximum number of tags allowed on an image.
+#
+# Any negative value is interpreted as unlimited.
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+#image_tag_quota = 128
+
+#
+# Maximum number of locations allowed on an image.
+#
+# Any negative value is interpreted as unlimited.
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+#image_location_quota = 10
+
+# DEPRECATED:
+# Python module path of data access API.
+#
+# Specifies the path to the API to use for accessing the data model.
+# This option determines how the image catalog data will be accessed.
+#
+# Possible values:
+#     * glance.db.sqlalchemy.api
+#     * glance.db.registry.api
+#     * glance.db.simple.api
+#
+# If this option is set to ``glance.db.sqlalchemy.api`` then the image
+# catalog data is stored in and read from the database via the
+# SQLAlchemy Core and ORM APIs.
+#
+# Setting this option to ``glance.db.registry.api`` will force all
+# database access requests to be routed through the Registry service.
+# This avoids data access from the Glance API nodes for an added layer
+# of security, scalability and manageability.
+#
+# NOTE: In v2 OpenStack Images API, the registry service is optional.
+# In order to use the Registry API in v2, the option
+# ``enable_v2_registry`` must be set to ``True``.
+#
+# Finally, when this configuration option is set to
+# ``glance.db.simple.api``, image catalog data is stored in and read
+# from an in-memory data structure. This is primarily used for
+# testing.
+#
+# Related options:
+#     * enable_v2_api
+#     * enable_v2_registry
+#
+#  (string value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#data_api = glance.db.sqlalchemy.api
+
+#
+# The default number of results to return for a request.
+#
+# Responses to certain API requests, like list images, may return
+# multiple items. The number of results returned can be explicitly
+# controlled by specifying the ``limit`` parameter in the API request.
+# However, if a ``limit`` parameter is not specified, this
+# configuration value will be used as the default number of results to
+# be returned for any API request.
+#
+# NOTES:
+#     * The value of this configuration option may not be greater than
+#       the value specified by ``api_limit_max``.
+#     * Setting this to a very large value may slow down database
+#       queries and increase response times. Setting this to a
+#       very low value may result in poor user experience.
+#
+# Possible values:
+#     * Any positive integer
+#
+# Related options:
+#     * api_limit_max
+#
+#  (integer value)
+# Minimum value: 1
+#limit_param_default = 25
+
+#
+# Maximum number of results that could be returned by a request.
+#
+# As described in the help text of ``limit_param_default``, some
+# requests may return multiple results. The number of results to be
+# returned are governed either by the ``limit`` parameter in the
+# request or the ``limit_param_default`` configuration option.
+# The value in either case, can't be greater than the absolute maximum
+# defined by this configuration option. Anything greater than this
+# value is trimmed down to the maximum value defined here.
+#
+# NOTE: Setting this to a very large value may slow down database
+#       queries and increase response times. Setting this to a
+#       very low value may result in poor user experience.
+#
+# Possible values:
+#     * Any positive integer
+#
+# Related options:
+#     * limit_param_default
+#
+#  (integer value)
+# Minimum value: 1
+#api_limit_max = 1000
+
+#
+# Show direct image location when returning an image.
+#
+# This configuration option indicates whether to show the direct image
+# location when returning image details to the user. The direct image
+# location is where the image data is stored in backend storage. This
+# image location is shown under the image property ``direct_url``.
+#
+# When multiple image locations exist for an image, the best location
+# is displayed based on the location strategy indicated by the
+# configuration option ``location_strategy``.
+#
+# NOTES:
+#     * Revealing image locations can present a GRAVE SECURITY RISK as
+#       image locations can sometimes include credentials. Hence, this
+#       is set to ``False`` by default. Set this to ``True`` with
+#       EXTREME CAUTION and ONLY IF you know what you are doing!
+#     * If an operator wishes to avoid showing any image location(s)
+#       to the user, then both this option and
+#       ``show_multiple_locations`` MUST be set to ``False``.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * show_multiple_locations
+#     * location_strategy
+#
+#  (boolean value)
+#show_image_direct_url = false
+
+# DEPRECATED:
+# Show all image locations when returning an image.
+#
+# This configuration option indicates whether to show all the image
+# locations when returning image details to the user. When multiple
+# image locations exist for an image, the locations are ordered based
+# on the location strategy indicated by the configuration opt
+# ``location_strategy``. The image locations are shown under the
+# image property ``locations``.
+#
+# NOTES:
+#     * Revealing image locations can present a GRAVE SECURITY RISK as
+#       image locations can sometimes include credentials. Hence, this
+#       is set to ``False`` by default. Set this to ``True`` with
+#       EXTREME CAUTION and ONLY IF you know what you are doing!
+#     * If an operator wishes to avoid showing any image location(s)
+#       to the user, then both this option and
+#       ``show_image_direct_url`` MUST be set to ``False``.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * show_image_direct_url
+#     * location_strategy
+#
+#  (boolean value)
+# This option is deprecated for removal since Newton.
+# Its value may be silently ignored in the future.
+# Reason: This option will be removed in the Pike release or later
+# because the same functionality can be achieved with greater
+# granularity by using policies. Please see the Newton release notes
+# for more information.
+#show_multiple_locations = false
+
+#
+# Maximum size of image a user can upload in bytes.
+#
+# An image upload greater than the size mentioned here would result
+# in an image creation failure. This configuration option defaults to
+# 1099511627776 bytes (1 TiB).
+#
+# NOTES:
+#     * This value should only be increased after careful
+#       consideration and must be set less than or equal to
+#       8 EiB (9223372036854775808).
+#     * This value must be set with careful consideration of the
+#       backend storage capacity. Setting this to a very low value
+#       may result in a large number of image failures. And, setting
+#       this to a very large value may result in faster consumption
+#       of storage. Hence, this must be set according to the nature of
+#       images created and storage capacity available.
+#
+# Possible values:
+#     * Any positive number less than or equal to 9223372036854775808
+#
+#  (integer value)
+# Minimum value: 1
+# Maximum value: 9223372036854775808
+#image_size_cap = 1099511627776
+
+#
+# Maximum amount of image storage per tenant.
+#
+# This enforces an upper limit on the cumulative storage consumed by
+# all images
+# of a tenant across all stores. This is a per-tenant limit.
+#
+# The default unit for this configuration option is Bytes. However,
+# storage
+# units can be specified using case-sensitive literals ``B``, ``KB``,
+# ``MB``,
+# ``GB`` and ``TB`` representing Bytes, KiloBytes, MegaBytes,
+# GigaBytes and
+# TeraBytes respectively. Note that there should not be any space
+# between the
+# value and unit. Value ``0`` signifies no quota enforcement. Negative
+# values
+# are invalid and result in errors.
+#
+# Possible values:
+#     * A string that is a valid concatenation of a non-negative
+# integer
+#       representing the storage value and an optional string literal
+#       representing storage units as mentioned above.
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#user_storage_quota = 0
+
+#
+# Deploy the v1 OpenStack Images API.
+#
+# When this option is set to ``True``, Glance service will respond to
+# requests on registered endpoints conforming to the v1 OpenStack
+# Images API.
+#
+# NOTES:
+#     * If this option is enabled, then ``enable_v1_registry`` must
+#       also be set to ``True`` to enable mandatory usage of Registry
+#       service with v1 API.
+#
+#     * If this option is disabled, then the ``enable_v1_registry``
+#       option, which is enabled by default, is also recommended
+#       to be disabled.
+#
+#     * This option is separate from ``enable_v2_api``, both v1 and v2
+#       OpenStack Images API can be deployed independent of each
+#       other.
+#
+#     * If deploying only the v2 Images API, this option, which is
+#       enabled by default, should be disabled.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * enable_v1_registry
+#     * enable_v2_api
+#
+#  (boolean value)
+#enable_v1_api = true
+
+#
+# Deploy the v2 OpenStack Images API.
+#
+# When this option is set to ``True``, Glance service will respond
+# to requests on registered endpoints conforming to the v2 OpenStack
+# Images API.
+#
+# NOTES:
+#     * If this option is disabled, then the ``enable_v2_registry``
+#       option, which is enabled by default, is also recommended
+#       to be disabled.
+#
+#     * This option is separate from ``enable_v1_api``, both v1 and v2
+#       OpenStack Images API can be deployed independent of each
+#       other.
+#
+#     * If deploying only the v1 Images API, this option, which is
+#       enabled by default, should be disabled.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * enable_v2_registry
+#     * enable_v1_api
+#
+#  (boolean value)
+#enable_v2_api = true
+
+#
+# Deploy the v1 API Registry service.
+#
+# When this option is set to ``True``, the Registry service
+# will be enabled in Glance for v1 API requests.
+#
+# NOTES:
+#     * Use of Registry is mandatory in v1 API, so this option must
+#       be set to ``True`` if the ``enable_v1_api`` option is enabled.
+#
+#     * If deploying only the v2 OpenStack Images API, this option,
+#       which is enabled by default, should be disabled.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * enable_v1_api
+#
+#  (boolean value)
+#enable_v1_registry = true
+
+# DEPRECATED:
+# Deploy the v2 API Registry service.
+#
+# When this option is set to ``True``, the Registry service
+# will be enabled in Glance for v2 API requests.
+#
+# NOTES:
+#     * Use of Registry is optional in v2 API, so this option
+#       must only be enabled if both ``enable_v2_api`` is set to
+#       ``True`` and the ``data_api`` option is set to
+#       ``glance.db.registry.api``.
+#
+#     * If deploying only the v1 OpenStack Images API, this option,
+#       which is enabled by default, should be disabled.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * enable_v2_api
+#     * data_api
+#
+#  (boolean value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#enable_v2_registry = true
+
+#
+# Host address of the pydev server.
+#
+# Provide a string value representing the hostname or IP of the
+# pydev server to use for debugging. The pydev server listens for
+# debug connections on this address, facilitating remote debugging
+# in Glance.
+#
+# Possible values:
+#     * Valid hostname
+#     * Valid IP address
+#
+# Related options:
+#     * None
+#
+#  (unknown value)
+#pydev_worker_debug_host = localhost
+
+#
+# Port number that the pydev server will listen on.
+#
+# Provide a port number to bind the pydev server to. The pydev
+# process accepts debug connections on this port and facilitates
+# remote debugging in Glance.
+#
+# Possible values:
+#     * A valid port number
+#
+# Related options:
+#     * None
+#
+#  (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#pydev_worker_debug_port = 5678
+
+#
+# AES key for encrypting store location metadata.
+#
+# Provide a string value representing the AES cipher to use for
+# encrypting Glance store metadata.
+#
+# NOTE: The AES key to use must be set to a random string of length
+# 16, 24 or 32 bytes.
+#
+# Possible values:
+#     * String value representing a valid AES key
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#metadata_encryption_key = <None>
+
+#
+# Digest algorithm to use for digital signature.
+#
+# Provide a string value representing the digest algorithm to
+# use for generating digital signatures. By default, ``sha256``
+# is used.
+#
+# To get a list of the available algorithms supported by the version
+# of OpenSSL on your platform, run the command:
+# ``openssl list-message-digest-algorithms``.
+# Examples are 'sha1', 'sha256', and 'sha512'.
+#
+# NOTE: ``digest_algorithm`` is not related to Glance's image signing
+# and verification. It is only used to sign the universally unique
+# identifier (UUID) as a part of the certificate file and key file
+# validation.
+#
+# Possible values:
+#     * An OpenSSL message digest algorithm identifier
+#
+# Relation options:
+#     * None
+#
+#  (string value)
+#digest_algorithm = sha256
+
+#
+# The URL provides location where the temporary data will be stored
+#
+# This option is for Glance internal use only. Glance will save the
+# image data uploaded by the user to 'staging' endpoint during the
+# image import process.
+#
+# This option does not change the 'staging' API endpoint by any means.
+#
+# NOTE: It is discouraged to use same path as [task]/work_dir
+#
+# NOTE: 'file://<absolute-directory-path>' is the only option
+# api_image_import flow will support for now.
+#
+# NOTE: The staging path must be on shared filesystem available to all
+# Glance API nodes.
+#
+# Possible values:
+#     * String starting with 'file://' followed by absolute FS path
+#
+# Related options:
+#     * [task]/work_dir
+#     * [DEFAULT]/enable_image_import (*deprecated*)
+#
+#  (string value)
+#node_staging_uri = file:///tmp/staging/
+
+# DEPRECATED:
+# Enables the Image Import workflow introduced in Pike
+#
+# As '[DEFAULT]/node_staging_uri' is required for the Image
+# Import, it's disabled per default in Pike, enabled per
+# default in Queens and removed in Rocky. This allows Glance to
+# operate with previous version configs upon upgrade.
+#
+# Setting this option to False will disable the endpoints related
+# to Image Import Refactoring work.
+#
+# Related options:
+#     * [DEFAULT]/node_staging_uri (boolean value)
+# This option is deprecated for removal since Pike.
+# Its value may be silently ignored in the future.
+# Reason:
+# This option is deprecated for removal in Rocky.
+#
+# It was introduced to make sure that the API is not enabled
+# before the '[DEFAULT]/node_staging_uri' is defined and is
+# long term redundant.
+#enable_image_import = true
+
+#
+# List of enabled Image Import Methods
+#
+# Both 'glance-direct' and 'web-download' are enabled by default.
+#
+# Related options:
+#     * [DEFAULT]/node_staging_uri
+#     * [DEFAULT]/enable_image_import (list value)
+#enabled_import_methods = glance-direct,web-download
+
+#
+# The relative path to sqlite file database that will be used for
+# image cache
+# management.
+#
+# This is a relative path to the sqlite file database that tracks the
+# age and
+# usage statistics of image cache. The path is relative to image cache
+# base
+# directory, specified by the configuration option
+# ``image_cache_dir``.
+#
+# This is a lightweight database with just one table.
+#
+# Possible values:
+#     * A valid relative path to sqlite file database
+#
+# Related options:
+#     * ``image_cache_dir``
+#
+#  (string value)
+#image_cache_sqlite_db = cache.db
+
+#
+# The driver to use for image cache management.
+#
+# This configuration option provides the flexibility to choose between
+# the
+# different image-cache drivers available. An image-cache driver is
+# responsible
+# for providing the essential functions of image-cache like write
+# images to/read
+# images from cache, track age and usage of cached images, provide a
+# list of
+# cached images, fetch size of the cache, queue images for caching and
+# clean up
+# the cache, etc.
+#
+# The essential functions of a driver are defined in the base class
+# ``glance.image_cache.drivers.base.Driver``. All image-cache drivers
+# (existing
+# and prospective) must implement this interface. Currently available
+# drivers
+# are ``sqlite`` and ``xattr``. These drivers primarily differ in the
+# way they
+# store the information about cached images:
+#     * The ``sqlite`` driver uses a sqlite database (which sits on
+# every glance
+#     node locally) to track the usage of cached images.
+#     * The ``xattr`` driver uses the extended attributes of files to
+# store this
+#     information. It also requires a filesystem that sets ``atime``
+# on the files
+#     when accessed.
+#
+# Possible values:
+#     * sqlite
+#     * xattr
+#
+# Related options:
+#     * None
+#
+#  (string value)
+# Possible values:
+# sqlite - <No description provided>
+# xattr - <No description provided>
+#image_cache_driver = sqlite
+
+#
+# The upper limit on cache size, in bytes, after which the cache-
+# pruner cleans
+# up the image cache.
+#
+# NOTE: This is just a threshold for cache-pruner to act upon. It is
+# NOT a
+# hard limit beyond which the image cache would never grow. In fact,
+# depending
+# on how often the cache-pruner runs and how quickly the cache fills,
+# the image
+# cache can far exceed the size specified here very easily. Hence,
+# care must be
+# taken to appropriately schedule the cache-pruner and in setting this
+# limit.
+#
+# Glance caches an image when it is downloaded. Consequently, the size
+# of the
+# image cache grows over time as the number of downloads increases. To
+# keep the
+# cache size from becoming unmanageable, it is recommended to run the
+# cache-pruner as a periodic task. When the cache pruner is kicked
+# off, it
+# compares the current size of image cache and triggers a cleanup if
+# the image
+# cache grew beyond the size specified here. After the cleanup, the
+# size of
+# cache is less than or equal to size specified here.
+#
+# Possible values:
+#     * Any non-negative integer
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#image_cache_max_size = 10737418240
+{% if server.get('image_cache', {}).get('enabled', False) %}
+
+image_cache_max_size = {{ server.image_cache.get('max_size', '10737418240') }}
+image_cache_stall_time = {{ server.image_cache.get('stall_time', '86400') }}
+image_cache_dir = {{ server.image_cache.get('directory', '/var/lib/glance/image-cache/') }}
+{% endif %}
+
+{% if server.identity.region is defined %}
+os_region_name = {{ server.identity.region }}
+{% endif %}
+
+#
+# The amount of time, in seconds, an incomplete image remains in the
+# cache.
+#
+# Incomplete images are images for which download is in progress.
+# Please see the
+# description of configuration option ``image_cache_dir`` for more
+# detail.
+# Sometimes, due to various reasons, it is possible the download may
+# hang and
+# the incompletely downloaded image remains in the ``incomplete``
+# directory.
+# This configuration option sets a time limit on how long the
+# incomplete images
+# should remain in the ``incomplete`` directory before they are
+# cleaned up.
+# Once an incomplete image spends more time than is specified here,
+# it'll be
+# removed by cache-cleaner on its next run.
+#
+# It is recommended to run cache-cleaner as a periodic task on the
+# Glance API
+# nodes to keep the incomplete images from occupying disk space.
+#
+# Possible values:
+#     * Any non-negative integer
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#image_cache_stall_time = 86400
+
+#
+# Base directory for image cache.
+#
+# This is the location where image data is cached and served out of.
+# All cached
+# images are stored directly under this directory. This directory also
+# contains
+# three subdirectories, namely, ``incomplete``, ``invalid`` and
+# ``queue``.
+#
+# The ``incomplete`` subdirectory is the staging area for downloading
+# images. An
+# image is first downloaded to this directory. When the image download
+# is
+# successful it is moved to the base directory. However, if the
+# download fails,
+# the partially downloaded image file is moved to the ``invalid``
+# subdirectory.
+#
+# The ``queue``subdirectory is used for queuing images for download.
+# This is
+# used primarily by the cache-prefetcher, which can be scheduled as a
+# periodic
+# task like cache-pruner and cache-cleaner, to cache images ahead of
+# their usage.
+# Upon receiving the request to cache an image, Glance touches a file
+# in the
+# ``queue`` directory with the image id as the file name. The cache-
+# prefetcher,
+# when running, polls for the files in ``queue`` directory and starts
+# downloading them in the order they were created. When the download
+# is
+# successful, the zero-sized file is deleted from the ``queue``
+# directory.
+# If the download fails, the zero-sized file remains and it'll be
+# retried the
+# next time cache-prefetcher runs.
+#
+# Possible values:
+#     * A valid path
+#
+# Related options:
+#     * ``image_cache_sqlite_db``
+#
+#  (string value)
+#image_cache_dir = <None>
+
+# DEPRECATED:
+# Address the registry server is hosted on.
+#
+# Possible values:
+#     * A valid IP or hostname
+#
+# Related options:
+#     * None
+#
+#  (unknown value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_host = {{ server.registry.host }}
+
+# DEPRECATED:
+# Port the registry server is listening on.
+#
+# Possible values:
+#     * A valid port number
+#
+# Related options:
+#     * None
+#
+#  (port value)
+# Minimum value: 0
+# Maximum value: 65535
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_port = {{ server.registry.port }}
+
+# DEPRECATED:
+# Protocol to use for communication with the registry server.
+#
+# Provide a string value representing the protocol to use for
+# communication with the registry server. By default, this option is
+# set to ``http`` and the connection is not secure.
+#
+# This option can be set to ``https`` to establish a secure connection
+# to the registry server. In this case, provide a key to use for the
+# SSL connection using the ``registry_client_key_file`` option. Also
+# include the CA file and cert file using the options
+# ``registry_client_ca_file`` and ``registry_client_cert_file``
+# respectively.
+#
+# Possible values:
+#     * http
+#     * https
+#
+# Related options:
+#     * registry_client_key_file
+#     * registry_client_cert_file
+#     * registry_client_ca_file
+#
+#  (string value)
+# Possible values:
+# http - <No description provided>
+# https - <No description provided>
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_client_protocol = http
+
+# DEPRECATED:
+# Absolute path to the private key file.
+#
+# Provide a string value representing a valid absolute path to the
+# private key file to use for establishing a secure connection to
+# the registry server.
+#
+# NOTE: This option must be set if ``registry_client_protocol`` is
+# set to ``https``. Alternatively, the GLANCE_CLIENT_KEY_FILE
+# environment variable may be set to a filepath of the key file.
+#
+# Possible values:
+#     * String value representing a valid absolute path to the key
+#       file.
+#
+# Related options:
+#     * registry_client_protocol
+#
+#  (string value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_client_key_file = /etc/ssl/key/key-file.pem
+
+# DEPRECATED:
+# Absolute path to the certificate file.
+#
+# Provide a string value representing a valid absolute path to the
+# certificate file to use for establishing a secure connection to
+# the registry server.
+#
+# NOTE: This option must be set if ``registry_client_protocol`` is
+# set to ``https``. Alternatively, the GLANCE_CLIENT_CERT_FILE
+# environment variable may be set to a filepath of the certificate
+# file.
+#
+# Possible values:
+#     * String value representing a valid absolute path to the
+#       certificate file.
+#
+# Related options:
+#     * registry_client_protocol
+#
+#  (string value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_client_cert_file = /etc/ssl/certs/file.crt
+
+# DEPRECATED:
+# Absolute path to the Certificate Authority file.
+#
+# Provide a string value representing a valid absolute path to the
+# certificate authority file to use for establishing a secure
+# connection to the registry server.
+#
+# NOTE: This option must be set if ``registry_client_protocol`` is
+# set to ``https``. Alternatively, the GLANCE_CLIENT_CA_FILE
+# environment variable may be set to a filepath of the CA file.
+# This option is ignored if the ``registry_client_insecure`` option
+# is set to ``True``.
+#
+# Possible values:
+#     * String value representing a valid absolute path to the CA
+#       file.
+#
+# Related options:
+#     * registry_client_protocol
+#     * registry_client_insecure
+#
+#  (string value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_client_ca_file = /etc/ssl/cafile/file.ca
+
+# DEPRECATED:
+# Set verification of the registry server certificate.
+#
+# Provide a boolean value to determine whether or not to validate
+# SSL connections to the registry server. By default, this option
+# is set to ``False`` and the SSL connections are validated.
+#
+# If set to ``True``, the connection to the registry server is not
+# validated via a certifying authority and the
+# ``registry_client_ca_file`` option is ignored. This is the
+# registry's equivalent of specifying --insecure on the command line
+# using glanceclient for the API.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * registry_client_protocol
+#     * registry_client_ca_file
+#
+#  (boolean value)
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_client_insecure = false
+
+# DEPRECATED:
+# Timeout value for registry requests.
+#
+# Provide an integer value representing the period of time in seconds
+# that the API server will wait for a registry request to complete.
+# The default value is 600 seconds.
+#
+# A value of 0 implies that a request will never timeout.
+#
+# Possible values:
+#     * Zero
+#     * Positive integer
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+# This option is deprecated for removal since Queens.
+# Its value may be silently ignored in the future.
+# Reason:
+# Glance registry service is deprecated for removal.
+#
+# More information can be found from the spec:
+# http://specs.openstack.org/openstack/glance-
+# specs/specs/queens/approved/glance/deprecate-registry.html
+#registry_client_timeout = 600
+
+# DEPRECATED: Whether to pass through the user token when making
+# requests to the registry. To prevent failures with token expiration
+# during big files upload, it is recommended to set this parameter to
+# False.If "use_user_token" is not in effect, then admin credentials
+# can be specified. (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#use_user_token = true
+
+# DEPRECATED: The administrators user name. If "use_user_token" is not
+# in effect, then admin credentials can be specified. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#admin_user = <None>
+
+# DEPRECATED: The administrators password. If "use_user_token" is not
+# in effect, then admin credentials can be specified. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#admin_password = <None>
+
+# DEPRECATED: The tenant name of the administrative user. If
+# "use_user_token" is not in effect, then admin tenant name can be
+# specified. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#admin_tenant_name = <None>
+
+# DEPRECATED: The URL to the keystone service. If "use_user_token" is
+# not in effect and using keystone auth, then URL of keystone can be
+# specified. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#auth_url = <None>
+
+# DEPRECATED: The strategy to use for authentication. If
+# "use_user_token" is not in effect, then auth strategy can be
+# specified. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#auth_strategy = noauth
+
+# DEPRECATED: The region for the authentication service. If
+# "use_user_token" is not in effect and using keystone auth, then
+# region name can be specified. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This option was considered harmful and has been deprecated
+# in M release. It will be removed in O release. For more information
+# read OSSN-0060. Related functionality with uploading big images has
+# been implemented with Keystone trusts support.
+#auth_region = <None>
+
+{%- if server.logging is defined %}
+{%- set _data = server.logging %}
+{%- do _data.update({'log_file': '/var/log/glance/image-cache.log'}) %}
+{%- include "oslo_templates/files/queens/oslo/_log.conf" %}
+{%- endif %}
+
+[glance_store]
+
+#
+# From glance.store
+#
+
+#
+# List of enabled Glance stores.
+#
+# Register the storage backends to use for storing disk images
+# as a comma separated list. The default stores enabled for
+# storing disk images with Glance are ``file`` and ``http``.
+#
+# Possible values:
+#     * A comma separated list that could include:
+#         * file
+#         * http
+#         * swift
+#         * rbd
+#         * sheepdog
+#         * cinder
+#         * vmware
+#
+# Related Options:
+#     * default_store
+#
+#  (list value)
+#stores = file,http
+
+#
+# The default scheme to use for storing images.
+#
+# Provide a string value representing the default scheme to use for
+# storing images. If not set, Glance uses ``file`` as the default
+# scheme to store images with the ``file`` store.
+#
+# NOTE: The value given for this configuration option must be a valid
+# scheme for a store registered with the ``stores`` configuration
+# option.
+#
+# Possible values:
+#     * file
+#     * filesystem
+#     * http
+#     * https
+#     * swift
+#     * swift+http
+#     * swift+https
+#     * swift+config
+#     * rbd
+#     * sheepdog
+#     * cinder
+#     * vsphere
+#
+# Related Options:
+#     * stores
+#
+#  (string value)
+# Possible values:
+# file - <No description provided>
+# filesystem - <No description provided>
+# http - <No description provided>
+# https - <No description provided>
+# swift - <No description provided>
+# swift+http - <No description provided>
+# swift+https - <No description provided>
+# swift+config - <No description provided>
+# rbd - <No description provided>
+# sheepdog - <No description provided>
+# cinder - <No description provided>
+# vsphere - <No description provided>
+#default_store = file
+
+#
+# Minimum interval in seconds to execute updating dynamic storage
+# capabilities based on current backend status.
+#
+# Provide an integer value representing time in seconds to set the
+# minimum interval before an update of dynamic storage capabilities
+# for a storage backend can be attempted. Setting
+# ``store_capabilities_update_min_interval`` does not mean updates
+# occur periodically based on the set interval. Rather, the update
+# is performed at the elapse of this interval set, if an operation
+# of the store is triggered.
+#
+# By default, this option is set to zero and is disabled. Provide an
+# integer value greater than zero to enable this option.
+#
+# NOTE: For more information on store capabilities and their updates,
+# please visit: https://specs.openstack.org/openstack/glance-
+# specs/specs/kilo/store-capabilities.html
+#
+# For more information on setting up a particular store in your
+# deployment and help with the usage of this feature, please contact
+# the storage driver maintainers listed here:
+# http://docs.openstack.org/developer/glance_store/drivers/index.html
+#
+# Possible values:
+#     * Zero
+#     * Positive integer
+#
+# Related Options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#store_capabilities_update_min_interval = 0
+
+#
+# Information to match when looking for cinder in the service catalog.
+#
+# When the ``cinder_endpoint_template`` is not set and any of
+# ``cinder_store_auth_address``, ``cinder_store_user_name``,
+# ``cinder_store_project_name``, ``cinder_store_password`` is not set,
+# cinder store uses this information to lookup cinder endpoint from
+# the service
+# catalog in the current context. ``cinder_os_region_name``, if set,
+# is taken
+# into consideration to fetch the appropriate endpoint.
+#
+# The service catalog can be listed by the ``openstack catalog list``
+# command.
+#
+# Possible values:
+#     * A string of of the following form:
+#       ``<service_type>:<service_name>:<interface>``
+#       At least ``service_type`` and ``interface`` should be
+# specified.
+#       ``service_name`` can be omitted.
+#
+# Related options:
+#     * cinder_os_region_name
+#     * cinder_endpoint_template
+#     * cinder_store_auth_address
+#     * cinder_store_user_name
+#     * cinder_store_project_name
+#     * cinder_store_password
+#
+#  (string value)
+#cinder_catalog_info = volumev2::publicURL
+
+#
+# Override service catalog lookup with template for cinder endpoint.
+#
+# When this option is set, this value is used to generate cinder
+# endpoint,
+# instead of looking up from the service catalog.
+# This value is ignored if ``cinder_store_auth_address``,
+# ``cinder_store_user_name``, ``cinder_store_project_name``, and
+# ``cinder_store_password`` are specified.
+#
+# If this configuration option is set, ``cinder_catalog_info`` will be
+# ignored.
+#
+# Possible values:
+#     * URL template string for cinder endpoint, where ``%%(tenant)s``
+# is
+#       replaced with the current tenant (project) name.
+#       For example:
+# ``http://cinder.openstack.example.org/v2/%%(tenant)s``
+#
+# Related options:
+#     * cinder_store_auth_address
+#     * cinder_store_user_name
+#     * cinder_store_project_name
+#     * cinder_store_password
+#     * cinder_catalog_info
+#
+#  (string value)
+#cinder_endpoint_template = <None>
+
+#
+# Region name to lookup cinder service from the service catalog.
+#
+# This is used only when ``cinder_catalog_info`` is used for
+# determining the
+# endpoint. If set, the lookup for cinder endpoint by this node is
+# filtered to
+# the specified region. It is useful when multiple regions are listed
+# in the
+# catalog. If this is not set, the endpoint is looked up from every
+# region.
+#
+# Possible values:
+#     * A string that is a valid region name.
+#
+# Related options:
+#     * cinder_catalog_info
+#
+#  (string value)
+# Deprecated group/name - [glance_store]/os_region_name
+#cinder_os_region_name = <None>
+
+#
+# Location of a CA certificates file used for cinder client requests.
+#
+# The specified CA certificates file, if set, is used to verify cinder
+# connections via HTTPS endpoint. If the endpoint is HTTP, this value
+# is ignored.
+# ``cinder_api_insecure`` must be set to ``True`` to enable the
+# verification.
+#
+# Possible values:
+#     * Path to a ca certificates file
+#
+# Related options:
+#     * cinder_api_insecure
+#
+#  (string value)
+#cinder_ca_certificates_file = <None>
+
+#
+# Number of cinderclient retries on failed http calls.
+#
+# When a call failed by any errors, cinderclient will retry the call
+# up to the
+# specified times after sleeping a few seconds.
+#
+# Possible values:
+#     * A positive integer
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#cinder_http_retries = 3
+
+#
+# Time period, in seconds, to wait for a cinder volume transition to
+# complete.
+#
+# When the cinder volume is created, deleted, or attached to the
+# glance node to
+# read/write the volume data, the volume's state is changed. For
+# example, the
+# newly created volume status changes from ``creating`` to
+# ``available`` after
+# the creation process is completed. This specifies the maximum time
+# to wait for
+# the status change. If a timeout occurs while waiting, or the status
+# is changed
+# to an unexpected value (e.g. `error``), the image creation fails.
+#
+# Possible values:
+#     * A positive integer
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#cinder_state_transition_timeout = 300
+
+#
+# Allow to perform insecure SSL requests to cinder.
+#
+# If this option is set to True, HTTPS endpoint connection is verified
+# using the
+# CA certificates file specified by ``cinder_ca_certificates_file``
+# option.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * cinder_ca_certificates_file
+#
+#  (boolean value)
+#cinder_api_insecure = false
+
+#
+# The address where the cinder authentication service is listening.
+#
+# When all of ``cinder_store_auth_address``,
+# ``cinder_store_user_name``,
+# ``cinder_store_project_name``, and ``cinder_store_password`` options
+# are
+# specified, the specified values are always used for the
+# authentication.
+# This is useful to hide the image volumes from users by storing them
+# in a
+# project/tenant specific to the image service. It also enables users
+# to share
+# the image volume among other projects under the control of glance's
+# ACL.
+#
+# If either of these options are not set, the cinder endpoint is
+# looked up
+# from the service catalog, and current context's user and project are
+# used.
+#
+# Possible values:
+#     * A valid authentication service address, for example:
+#       ``http://openstack.example.org/identity/v2.0``
+#
+# Related options:
+#     * cinder_store_user_name
+#     * cinder_store_password
+#     * cinder_store_project_name
+#
+#  (string value)
+#cinder_store_auth_address = <None>
+
+#
+# User name to authenticate against cinder.
+#
+# This must be used with all the following related options. If any of
+# these are
+# not specified, the user of the current context is used.
+#
+# Possible values:
+#     * A valid user name
+#
+# Related options:
+#     * cinder_store_auth_address
+#     * cinder_store_password
+#     * cinder_store_project_name
+#
+#  (string value)
+#cinder_store_user_name = <None>
+
+#
+# Password for the user authenticating against cinder.
+#
+# This must be used with all the following related options. If any of
+# these are
+# not specified, the user of the current context is used.
+#
+# Possible values:
+#     * A valid password for the user specified by
+# ``cinder_store_user_name``
+#
+# Related options:
+#     * cinder_store_auth_address
+#     * cinder_store_user_name
+#     * cinder_store_project_name
+#
+#  (string value)
+#cinder_store_password = <None>
+
+#
+# Project name where the image volume is stored in cinder.
+#
+# If this configuration option is not set, the project in current
+# context is
+# used.
+#
+# This must be used with all the following related options. If any of
+# these are
+# not specified, the project of the current context is used.
+#
+# Possible values:
+#     * A valid project name
+#
+# Related options:
+#     * ``cinder_store_auth_address``
+#     * ``cinder_store_user_name``
+#     * ``cinder_store_password``
+#
+#  (string value)
+#cinder_store_project_name = <None>
+
+#
+# Path to the rootwrap configuration file to use for running commands
+# as root.
+#
+# The cinder store requires root privileges to operate the image
+# volumes (for
+# connecting to iSCSI/FC volumes and reading/writing the volume data,
+# etc.).
+# The configuration file should allow the required commands by cinder
+# store and
+# os-brick library.
+#
+# Possible values:
+#     * Path to the rootwrap config file
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#rootwrap_config = /etc/glance/rootwrap.conf
+
+#
+# Volume type that will be used for volume creation in cinder.
+#
+# Some cinder backends can have several volume types to optimize
+# storage usage.
+# Adding this option allows an operator to choose a specific volume
+# type
+# in cinder that can be optimized for images.
+#
+# If this is not set, then the default volume type specified in the
+# cinder
+# configuration will be used for volume creation.
+#
+# Possible values:
+#     * A valid volume type from cinder
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#cinder_volume_type = <None>
+
+#
+# Directory to which the filesystem backend store writes images.
+#
+# Upon start up, Glance creates the directory if it doesn't already
+# exist and verifies write access to the user under which
+# ``glance-api`` runs. If the write access isn't available, a
+# ``BadStoreConfiguration`` exception is raised and the filesystem
+# store may not be available for adding new images.
+#
+# NOTE: This directory is used only when filesystem store is used as a
+# storage backend. Either ``filesystem_store_datadir`` or
+# ``filesystem_store_datadirs`` option must be specified in
+# ``glance-api.conf``. If both options are specified, a
+# ``BadStoreConfiguration`` will be raised and the filesystem store
+# may not be available for adding new images.
+#
+# Possible values:
+#     * A valid path to a directory
+#
+# Related options:
+#     * ``filesystem_store_datadirs``
+#     * ``filesystem_store_file_perm``
+#
+#  (string value)
+#filesystem_store_datadir = /var/lib/glance/images
+
+#
+# List of directories and their priorities to which the filesystem
+# backend store writes images.
+#
+# The filesystem store can be configured to store images in multiple
+# directories as opposed to using a single directory specified by the
+# ``filesystem_store_datadir`` configuration option. When using
+# multiple directories, each directory can be given an optional
+# priority to specify the preference order in which they should
+# be used. Priority is an integer that is concatenated to the
+# directory path with a colon where a higher value indicates higher
+# priority. When two directories have the same priority, the directory
+# with most free space is used. When no priority is specified, it
+# defaults to zero.
+#
+# More information on configuring filesystem store with multiple store
+# directories can be found at
+# http://docs.openstack.org/developer/glance/configuring.html
+#
+# NOTE: This directory is used only when filesystem store is used as a
+# storage backend. Either ``filesystem_store_datadir`` or
+# ``filesystem_store_datadirs`` option must be specified in
+# ``glance-api.conf``. If both options are specified, a
+# ``BadStoreConfiguration`` will be raised and the filesystem store
+# may not be available for adding new images.
+#
+# Possible values:
+#     * List of strings of the following form:
+#         * ``<a valid directory path>:<optional integer priority>``
+#
+# Related options:
+#     * ``filesystem_store_datadir``
+#     * ``filesystem_store_file_perm``
+#
+#  (multi valued)
+#filesystem_store_datadirs =
+
+#
+# Filesystem store metadata file.
+#
+# The path to a file which contains the metadata to be returned with
+# any location associated with the filesystem store. The file must
+# contain a valid JSON object. The object should contain the keys
+# ``id`` and ``mountpoint``. The value for both keys should be a
+# string.
+#
+# Possible values:
+#     * A valid path to the store metadata file
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#filesystem_store_metadata_file = <None>
+{%- if server.filesystem_store_metadata_file is defined %}
+filesystem_store_metadata_file = {{ server.get('filesystem_store_metadata_file', '/etc/glance/filesystem_store_metadata.json') }}
+{%- endif %}
+
+#
+# File access permissions for the image files.
+#
+# Set the intended file access permissions for image data. This
+# provides
+# a way to enable other services, e.g. Nova, to consume images
+# directly
+# from the filesystem store. The users running the services that are
+# intended to be given access to could be made a member of the group
+# that owns the files created. Assigning a value less then or equal to
+# zero for this configuration option signifies that no changes be made
+# to the  default permissions. This value will be decoded as an octal
+# digit.
+#
+# For more information, please refer the documentation at
+# http://docs.openstack.org/developer/glance/configuring.html
+#
+# Possible values:
+#     * A valid file access permission
+#     * Zero
+#     * Any negative integer
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+#filesystem_store_file_perm = 0
+
+#
+# Path to the CA bundle file.
+#
+# This configuration option enables the operator to use a custom
+# Certificate Authority file to verify the remote server certificate.
+# If
+# this option is set, the ``https_insecure`` option will be ignored
+# and
+# the CA file specified will be used to authenticate the server
+# certificate and establish a secure connection to the server.
+#
+# Possible values:
+#     * A valid path to a CA file
+#
+# Related options:
+#     * https_insecure
+#
+#  (string value)
+#https_ca_certificates_file = <None>
+
+#
+# Set verification of the remote server certificate.
+#
+# This configuration option takes in a boolean value to determine
+# whether or not to verify the remote server certificate. If set to
+# True, the remote server certificate is not verified. If the option
+# is
+# set to False, then the default CA truststore is used for
+# verification.
+#
+# This option is ignored if ``https_ca_certificates_file`` is set.
+# The remote server certificate will then be verified using the file
+# specified using the ``https_ca_certificates_file`` option.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * https_ca_certificates_file
+#
+#  (boolean value)
+#https_insecure = true
+
+#
+# The http/https proxy information to be used to connect to the remote
+# server.
+#
+# This configuration option specifies the http/https proxy information
+# that should be used to connect to the remote server. The proxy
+# information should be a key value pair of the scheme and proxy, for
+# example, http:10.0.0.1:3128. You can also specify proxies for
+# multiple
+# schemes by separating the key value pairs with a comma, for example,
+# http:10.0.0.1:3128, https:10.0.0.1:1080.
+#
+# Possible values:
+#     * A comma separated list of scheme:proxy pairs as described
+# above
+#
+# Related options:
+#     * None
+#
+#  (dict value)
+#http_proxy_information =
+
+#
+# Size, in megabytes, to chunk RADOS images into.
+#
+# Provide an integer value representing the size in megabytes to chunk
+# Glance images into. The default chunk size is 8 megabytes. For
+# optimal
+# performance, the value should be a power of two.
+#
+# When Ceph's RBD object storage system is used as the storage backend
+# for storing Glance images, the images are chunked into objects of
+# the
+# size set using this option. These chunked objects are then stored
+# across the distributed block data store to use for Glance.
+#
+# Possible Values:
+#     * Any positive integer value
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 1
+#rbd_store_chunk_size = 8
+
+#
+# RADOS pool in which images are stored.
+#
+# When RBD is used as the storage backend for storing Glance images,
+# the
+# images are stored by means of logical grouping of the objects
+# (chunks
+# of images) into a ``pool``. Each pool is defined with the number of
+# placement groups it can contain. The default pool that is used is
+# 'images'.
+#
+# More information on the RBD storage backend can be found here:
+# http://ceph.com/planet/how-data-is-stored-in-ceph-cluster/
+#
+# Possible Values:
+#     * A valid pool name
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#rbd_store_pool = images
+
+#
+# RADOS user to authenticate as.
+#
+# This configuration option takes in the RADOS user to authenticate
+# as.
+# This is only needed when RADOS authentication is enabled and is
+# applicable only if the user is using Cephx authentication. If the
+# value for this option is not set by the user or is set to None, a
+# default value will be chosen, which will be based on the client.
+# section in rbd_store_ceph_conf.
+#
+# Possible Values:
+#     * A valid RADOS user
+#
+# Related options:
+#     * rbd_store_ceph_conf
+#
+#  (string value)
+#rbd_store_user = <None>
+
+#
+# Ceph configuration file path.
+#
+# This configuration option takes in the path to the Ceph
+# configuration
+# file to be used. If the value for this option is not set by the user
+# or is set to None, librados will locate the default configuration
+# file
+# which is located at /etc/ceph/ceph.conf. If using Cephx
+# authentication, this file should include a reference to the right
+# keyring in a client.<USER> section
+#
+# Possible Values:
+#     * A valid path to a configuration file
+#
+# Related options:
+#     * rbd_store_user
+#
+#  (string value)
+#rbd_store_ceph_conf = /etc/ceph/ceph.conf
+
+#
+# Timeout value for connecting to Ceph cluster.
+#
+# This configuration option takes in the timeout value in seconds used
+# when connecting to the Ceph cluster i.e. it sets the time to wait
+# for
+# glance-api before closing the connection. This prevents glance-api
+# hangups during the connection to RBD. If the value for this option
+# is set to less than or equal to 0, no timeout is set and the default
+# librados value is used.
+#
+# Possible Values:
+#     * Any integer value
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+#rados_connect_timeout = 0
+
+#
+# Chunk size for images to be stored in Sheepdog data store.
+#
+# Provide an integer value representing the size in mebibyte
+# (1048576 bytes) to chunk Glance images into. The default
+# chunk size is 64 mebibytes.
+#
+# When using Sheepdog distributed storage system, the images are
+# chunked into objects of this size and then stored across the
+# distributed data store to use for Glance.
+#
+# Chunk sizes, if a power of two, help avoid fragmentation and
+# enable improved performance.
+#
+# Possible values:
+#     * Positive integer value representing size in mebibytes.
+#
+# Related Options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 1
+#sheepdog_store_chunk_size = 64
+
+#
+# Port number on which the sheep daemon will listen.
+#
+# Provide an integer value representing a valid port number on
+# which you want the Sheepdog daemon to listen on. The default
+# port is 7000.
+#
+# The Sheepdog daemon, also called 'sheep', manages the storage
+# in the distributed cluster by writing objects across the storage
+# network. It identifies and acts on the messages it receives on
+# the port number set using ``sheepdog_store_port`` option to store
+# chunks of Glance images.
+#
+# Possible values:
+#     * A valid port number (0 to 65535)
+#
+# Related Options:
+#     * sheepdog_store_address
+#
+#  (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#sheepdog_store_port = 7000
+
+#
+# Address to bind the Sheepdog daemon to.
+#
+# Provide a string value representing the address to bind the
+# Sheepdog daemon to. The default address set for the 'sheep'
+# is 127.0.0.1.
+#
+# The Sheepdog daemon, also called 'sheep', manages the storage
+# in the distributed cluster by writing objects across the storage
+# network. It identifies and acts on the messages directed to the
+# address set using ``sheepdog_store_address`` option to store
+# chunks of Glance images.
+#
+# Possible values:
+#     * A valid IPv4 address
+#     * A valid IPv6 address
+#     * A valid hostname
+#
+# Related Options:
+#     * sheepdog_store_port
+#
+#  (unknown value)
+#sheepdog_store_address = 127.0.0.1
+
+#
+# Set verification of the server certificate.
+#
+# This boolean determines whether or not to verify the server
+# certificate. If this option is set to True, swiftclient won't check
+# for a valid SSL certificate when authenticating. If the option is
+# set
+# to False, then the default CA truststore is used for verification.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * swift_store_cacert
+#
+#  (boolean value)
+#swift_store_auth_insecure = false
+
+#
+# Path to the CA bundle file.
+#
+# This configuration option enables the operator to specify the path
+# to
+# a custom Certificate Authority file for SSL verification when
+# connecting to Swift.
+#
+# Possible values:
+#     * A valid path to a CA file
+#
+# Related options:
+#     * swift_store_auth_insecure
+#
+#  (string value)
+#swift_store_cacert = /etc/ssl/certs/ca-certificates.crt
+
+#
+# The region of Swift endpoint to use by Glance.
+#
+# Provide a string value representing a Swift region where Glance
+# can connect to for image storage. By default, there is no region
+# set.
+#
+# When Glance uses Swift as the storage backend to store images
+# for a specific tenant that has multiple endpoints, setting of a
+# Swift region with ``swift_store_region`` allows Glance to connect
+# to Swift in the specified region as opposed to a single region
+# connectivity.
+#
+# This option can be configured for both single-tenant and
+# multi-tenant storage.
+#
+# NOTE: Setting the region with ``swift_store_region`` is
+# tenant-specific and is necessary ``only if`` the tenant has
+# multiple endpoints across different regions.
+#
+# Possible values:
+#     * A string value representing a valid Swift region.
+#
+# Related Options:
+#     * None
+#
+#  (string value)
+#swift_store_region = RegionTwo
+
+#
+# The URL endpoint to use for Swift backend storage.
+#
+# Provide a string value representing the URL endpoint to use for
+# storing Glance images in Swift store. By default, an endpoint
+# is not set and the storage URL returned by ``auth`` is used.
+# Setting an endpoint with ``swift_store_endpoint`` overrides the
+# storage URL and is used for Glance image storage.
+#
+# NOTE: The URL should include the path up to, but excluding the
+# container. The location of an object is obtained by appending
+# the container and object to the configured URL.
+#
+# Possible values:
+#     * String value representing a valid URL path up to a Swift
+# container
+#
+# Related Options:
+#     * None
+#
+#  (string value)
+#swift_store_endpoint = https://swift.openstack.example.org/v1/path_not_including_container_name
+
+#
+# Endpoint Type of Swift service.
+#
+# This string value indicates the endpoint type to use to fetch the
+# Swift endpoint. The endpoint type determines the actions the user
+# will
+# be allowed to perform, for instance, reading and writing to the
+# Store.
+# This setting is only used if swift_store_auth_version is greater
+# than
+# 1.
+#
+# Possible values:
+#     * publicURL
+#     * adminURL
+#     * internalURL
+#
+# Related options:
+#     * swift_store_endpoint
+#
+#  (string value)
+# Possible values:
+# publicURL - <No description provided>
+# adminURL - <No description provided>
+# internalURL - <No description provided>
+#swift_store_endpoint_type = publicURL
+
+#
+# Type of Swift service to use.
+#
+# Provide a string value representing the service type to use for
+# storing images while using Swift backend storage. The default
+# service type is set to ``object-store``.
+#
+# NOTE: If ``swift_store_auth_version`` is set to 2, the value for
+# this configuration option needs to be ``object-store``. If using
+# a higher version of Keystone or a different auth scheme, this
+# option may be modified.
+#
+# Possible values:
+#     * A string representing a valid service type for Swift storage.
+#
+# Related Options:
+#     * None
+#
+#  (string value)
+#swift_store_service_type = object-store
+
+#
+# Name of single container to store images/name prefix for multiple
+# containers
+#
+# When a single container is being used to store images, this
+# configuration
+# option indicates the container within the Glance account to be used
+# for
+# storing all images. When multiple containers are used to store
+# images, this
+# will be the name prefix for all containers. Usage of single/multiple
+# containers can be controlled using the configuration option
+# ``swift_store_multiple_containers_seed``.
+#
+# When using multiple containers, the containers will be named after
+# the value
+# set for this configuration option with the first N chars of the
+# image UUID
+# as the suffix delimited by an underscore (where N is specified by
+# ``swift_store_multiple_containers_seed``).
+#
+# Example: if the seed is set to 3 and swift_store_container =
+# ``glance``, then
+# an image with UUID ``fdae39a1-bac5-4238-aba4-69bcc726e848`` would be
+# placed in
+# the container ``glance_fda``. All dashes in the UUID are included
+# when
+# creating the container name but do not count toward the character
+# limit, so
+# when N=10 the container name would be ``glance_fdae39a1-ba.``
+#
+# Possible values:
+#     * If using single container, this configuration option can be
+# any string
+#       that is a valid swift container name in Glance's Swift account
+#     * If using multiple containers, this configuration option can be
+# any
+#       string as long as it satisfies the container naming rules
+# enforced by
+#       Swift. The value of ``swift_store_multiple_containers_seed``
+# should be
+#       taken into account as well.
+#
+# Related options:
+#     * ``swift_store_multiple_containers_seed``
+#     * ``swift_store_multi_tenant``
+#     * ``swift_store_create_container_on_put``
+#
+#  (string value)
+#swift_store_container = glance
+
+#
+# The size threshold, in MB, after which Glance will start segmenting
+# image data.
+#
+# Swift has an upper limit on the size of a single uploaded object. By
+# default,
+# this is 5GB. To upload objects bigger than this limit, objects are
+# segmented
+# into multiple smaller objects that are tied together with a manifest
+# file.
+# For more detail, refer to
+# http://docs.openstack.org/developer/swift/overview_large_objects.html
+#
+# This configuration option specifies the size threshold over which
+# the Swift
+# driver will start segmenting image data into multiple smaller files.
+# Currently, the Swift driver only supports creating Dynamic Large
+# Objects.
+#
+# NOTE: This should be set by taking into account the large object
+# limit
+# enforced by the Swift cluster in consideration.
+#
+# Possible values:
+#     * A positive integer that is less than or equal to the large
+# object limit
+#       enforced by the Swift cluster in consideration.
+#
+# Related options:
+#     * ``swift_store_large_object_chunk_size``
+#
+#  (integer value)
+# Minimum value: 1
+#swift_store_large_object_size = 5120
+
+#
+# The maximum size, in MB, of the segments when image data is
+# segmented.
+#
+# When image data is segmented to upload images that are larger than
+# the limit
+# enforced by the Swift cluster, image data is broken into segments
+# that are no
+# bigger than the size specified by this configuration option.
+# Refer to ``swift_store_large_object_size`` for more detail.
+#
+# For example: if ``swift_store_large_object_size`` is 5GB and
+# ``swift_store_large_object_chunk_size`` is 1GB, an image of size
+# 6.2GB will be
+# segmented into 7 segments where the first six segments will be 1GB
+# in size and
+# the seventh segment will be 0.2GB.
+#
+# Possible values:
+#     * A positive integer that is less than or equal to the large
+# object limit
+#       enforced by Swift cluster in consideration.
+#
+# Related options:
+#     * ``swift_store_large_object_size``
+#
+#  (integer value)
+# Minimum value: 1
+#swift_store_large_object_chunk_size = 200
+
+#
+# Create container, if it doesn't already exist, when uploading image.
+#
+# At the time of uploading an image, if the corresponding container
+# doesn't
+# exist, it will be created provided this configuration option is set
+# to True.
+# By default, it won't be created. This behavior is applicable for
+# both single
+# and multiple containers mode.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * None
+#
+#  (boolean value)
+#swift_store_create_container_on_put = false
+
+#
+# Store images in tenant's Swift account.
+#
+# This enables multi-tenant storage mode which causes Glance images to
+# be stored
+# in tenant specific Swift accounts. If this is disabled, Glance
+# stores all
+# images in its own account. More details multi-tenant store can be
+# found at
+# https://wiki.openstack.org/wiki/GlanceSwiftTenantSpecificStorage
+#
+# NOTE: If using multi-tenant swift store, please make sure
+# that you do not set a swift configuration file with the
+# 'swift_store_config_file' option.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * swift_store_config_file
+#
+#  (boolean value)
+#swift_store_multi_tenant = false
+
+#
+# Seed indicating the number of containers to use for storing images.
+#
+# When using a single-tenant store, images can be stored in one or
+# more than one
+# containers. When set to 0, all images will be stored in one single
+# container.
+# When set to an integer value between 1 and 32, multiple containers
+# will be
+# used to store images. This configuration option will determine how
+# many
+# containers are created. The total number of containers that will be
+# used is
+# equal to 16^N, so if this config option is set to 2, then 16^2=256
+# containers
+# will be used to store images.
+#
+# Please refer to ``swift_store_container`` for more detail on the
+# naming
+# convention. More detail about using multiple containers can be found
+# at
+# https://specs.openstack.org/openstack/glance-specs/specs/kilo/swift-
+# store-multiple-containers.html
+#
+# NOTE: This is used only when swift_store_multi_tenant is disabled.
+#
+# Possible values:
+#     * A non-negative integer less than or equal to 32
+#
+# Related options:
+#     * ``swift_store_container``
+#     * ``swift_store_multi_tenant``
+#     * ``swift_store_create_container_on_put``
+#
+#  (integer value)
+# Minimum value: 0
+# Maximum value: 32
+#swift_store_multiple_containers_seed = 0
+
+#
+# List of tenants that will be granted admin access.
+#
+# This is a list of tenants that will be granted read/write access on
+# all Swift containers created by Glance in multi-tenant mode. The
+# default value is an empty list.
+#
+# Possible values:
+#     * A comma separated list of strings representing UUIDs of
+# Keystone
+#       projects/tenants
+#
+# Related options:
+#     * None
+#
+#  (list value)
+#swift_store_admin_tenants =
+
+#
+# SSL layer compression for HTTPS Swift requests.
+#
+# Provide a boolean value to determine whether or not to compress
+# HTTPS Swift requests for images at the SSL layer. By default,
+# compression is enabled.
+#
+# When using Swift as the backend store for Glance image storage,
+# SSL layer compression of HTTPS Swift requests can be set using
+# this option. If set to False, SSL layer compression of HTTPS
+# Swift requests is disabled. Disabling this option may improve
+# performance for images which are already in a compressed format,
+# for example, qcow2.
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related Options:
+#     * None
+#
+#  (boolean value)
+#swift_store_ssl_compression = true
+
+#
+# The number of times a Swift download will be retried before the
+# request fails.
+#
+# Provide an integer value representing the number of times an image
+# download must be retried before erroring out. The default value is
+# zero (no retry on a failed image download). When set to a positive
+# integer value, ``swift_store_retry_get_count`` ensures that the
+# download is attempted this many more times upon a download failure
+# before sending an error message.
+#
+# Possible values:
+#     * Zero
+#     * Positive integer value
+#
+# Related Options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#swift_store_retry_get_count = 0
+
+#
+# Time in seconds defining the size of the window in which a new
+# token may be requested before the current token is due to expire.
+#
+# Typically, the Swift storage driver fetches a new token upon the
+# expiration of the current token to ensure continued access to
+# Swift. However, some Swift transactions (like uploading image
+# segments) may not recover well if the token expires on the fly.
+#
+# Hence, by fetching a new token before the current token expiration,
+# we make sure that the token does not expire or is close to expiry
+# before a transaction is attempted. By default, the Swift storage
+# driver requests for a new token 60 seconds or less before the
+# current token expiration.
+#
+# Possible values:
+#     * Zero
+#     * Positive integer value
+#
+# Related Options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 0
+#swift_store_expire_soon_interval = 60
+
+#
+# Use trusts for multi-tenant Swift store.
+#
+# This option instructs the Swift store to create a trust for each
+# add/get request when the multi-tenant store is in use. Using trusts
+# allows the Swift store to avoid problems that can be caused by an
+# authentication token expiring during the upload or download of data.
+#
+# By default, ``swift_store_use_trusts`` is set to ``True``(use of
+# trusts is enabled). If set to ``False``, a user token is used for
+# the Swift connection instead, eliminating the overhead of trust
+# creation.
+#
+# NOTE: This option is considered only when
+# ``swift_store_multi_tenant`` is set to ``True``
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * swift_store_multi_tenant
+#
+#  (boolean value)
+#swift_store_use_trusts = true
+
+#
+# Buffer image segments before upload to Swift.
+#
+# Provide a boolean value to indicate whether or not Glance should
+# buffer image data to disk while uploading to swift. This enables
+# Glance to resume uploads on error.
+#
+# NOTES:
+# When enabling this option, one should take great care as this
+# increases disk usage on the API node. Be aware that depending
+# upon how the file system is configured, the disk space used
+# for buffering may decrease the actual disk space available for
+# the glance image cache.  Disk utilization will cap according to
+# the following equation:
+# (``swift_store_large_object_chunk_size`` * ``workers`` * 1000)
+#
+# Possible values:
+#     * True
+#     * False
+#
+# Related options:
+#     * swift_upload_buffer_dir
+#
+#  (boolean value)
+#swift_buffer_on_upload = false
+
+#
+# Reference to default Swift account/backing store parameters.
+#
+# Provide a string value representing a reference to the default set
+# of parameters required for using swift account/backing store for
+# image storage. The default reference value for this configuration
+# option is 'ref1'. This configuration option dereferences the
+# parameters and facilitates image storage in Swift storage backend
+# every time a new image is added.
+#
+# Possible values:
+#     * A valid string value
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#default_swift_reference = ref1
+
+# DEPRECATED: Version of the authentication service to use. Valid
+# versions are 2 and 3 for keystone and 1 (deprecated) for swauth and
+# rackspace. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason:
+# The option 'auth_version' in the Swift back-end configuration file
+# is
+# used instead.
+#swift_store_auth_version = 2
+
+# DEPRECATED: The address where the Swift authentication service is
+# listening. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason:
+# The option 'auth_address' in the Swift back-end configuration file
+# is
+# used instead.
+#swift_store_auth_address = <None>
+
+# DEPRECATED: The user to authenticate against the Swift
+# authentication service. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason:
+# The option 'user' in the Swift back-end configuration file is set
+# instead.
+#swift_store_user = <None>
+
+# DEPRECATED: Auth key for the user authenticating against the Swift
+# authentication service. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason:
+# The option 'key' in the Swift back-end configuration file is used
+# to set the authentication key instead.
+#swift_store_key = <None>
+
+#
+# Absolute path to the file containing the swift account(s)
+# configurations.
+#
+# Include a string value representing the path to a configuration
+# file that has references for each of the configured Swift
+# account(s)/backing stores. By default, no file path is specified
+# and customized Swift referencing is disabled. Configuring this
+# option is highly recommended while using Swift storage backend for
+# image storage as it avoids storage of credentials in the database.
+#
+# NOTE: Please do not configure this option if you have set
+# ``swift_store_multi_tenant`` to ``True``.
+#
+# Possible values:
+#     * String value representing an absolute path on the glance-api
+#       node
+#
+# Related options:
+#     * swift_store_multi_tenant
+#
+#  (string value)
+#swift_store_config_file = <None>
+
+#
+# Directory to buffer image segments before upload to Swift.
+#
+# Provide a string value representing the absolute path to the
+# directory on the glance node where image segments will be
+# buffered briefly before they are uploaded to swift.
+#
+# NOTES:
+# * This is required only when the configuration option
+#   ``swift_buffer_on_upload`` is set to True.
+# * This directory should be provisioned keeping in mind the
+#   ``swift_store_large_object_chunk_size`` and the maximum
+#   number of images that could be uploaded simultaneously by
+#   a given glance node.
+#
+# Possible values:
+#     * String value representing an absolute directory path
+#
+# Related options:
+#     * swift_buffer_on_upload
+#     * swift_store_large_object_chunk_size
+#
+#  (string value)
+#swift_upload_buffer_dir = <None>
+
+#
+# Address of the ESX/ESXi or vCenter Server target system.
+#
+# This configuration option sets the address of the ESX/ESXi or
+# vCenter
+# Server target system. This option is required when using the VMware
+# storage backend. The address can contain an IP address (127.0.0.1)
+# or
+# a DNS name (www.my-domain.com).
+#
+# Possible Values:
+#     * A valid IPv4 or IPv6 address
+#     * A valid DNS name
+#
+# Related options:
+#     * vmware_server_username
+#     * vmware_server_password
+#
+#  (unknown value)
+#vmware_server_host = 127.0.0.1
+
+#
+# Server username.
+#
+# This configuration option takes the username for authenticating with
+# the VMware ESX/ESXi or vCenter Server. This option is required when
+# using the VMware storage backend.
+#
+# Possible Values:
+#     * Any string that is the username for a user with appropriate
+#       privileges
+#
+# Related options:
+#     * vmware_server_host
+#     * vmware_server_password
+#
+#  (string value)
+#vmware_server_username = root
+
+#
+# Server password.
+#
+# This configuration option takes the password for authenticating with
+# the VMware ESX/ESXi or vCenter Server. This option is required when
+# using the VMware storage backend.
+#
+# Possible Values:
+#     * Any string that is a password corresponding to the username
+#       specified using the "vmware_server_username" option
+#
+# Related options:
+#     * vmware_server_host
+#     * vmware_server_username
+#
+#  (string value)
+#vmware_server_password = vmware
+
+#
+# The number of VMware API retries.
+#
+# This configuration option specifies the number of times the VMware
+# ESX/VC server API must be retried upon connection related issues or
+# server API call overload. It is not possible to specify 'retry
+# forever'.
+#
+# Possible Values:
+#     * Any positive integer value
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 1
+#vmware_api_retry_count = 10
+
+#
+# Interval in seconds used for polling remote tasks invoked on VMware
+# ESX/VC server.
+#
+# This configuration option takes in the sleep time in seconds for
+# polling an
+# on-going async task as part of the VMWare ESX/VC server API call.
+#
+# Possible Values:
+#     * Any positive integer value
+#
+# Related options:
+#     * None
+#
+#  (integer value)
+# Minimum value: 1
+#vmware_task_poll_interval = 5
+
+#
+# The directory where the glance images will be stored in the
+# datastore.
+#
+# This configuration option specifies the path to the directory where
+# the
+# glance images will be stored in the VMware datastore. If this option
+# is not set,  the default directory where the glance images are
+# stored
+# is openstack_glance.
+#
+# Possible Values:
+#     * Any string that is a valid path to a directory
+#
+# Related options:
+#     * None
+#
+#  (string value)
+#vmware_store_image_dir = /openstack_glance
+
+#
+# Set verification of the ESX/vCenter server certificate.
+#
+# This configuration option takes a boolean value to determine
+# whether or not to verify the ESX/vCenter server certificate. If this
+# option is set to True, the ESX/vCenter server certificate is not
+# verified. If this option is set to False, then the default CA
+# truststore is used for verification.
+#
+# This option is ignored if the "vmware_ca_file" option is set. In
+# that
+# case, the ESX/vCenter server certificate will then be verified using
+# the file specified using the "vmware_ca_file" option .
+#
+# Possible Values:
+#     * True
+#     * False
+#
+# Related options:
+#     * vmware_ca_file
+#
+#  (boolean value)
+# Deprecated group/name - [glance_store]/vmware_api_insecure
+#vmware_insecure = false
+
+#
+# Absolute path to the CA bundle file.
+#
+# This configuration option enables the operator to use a custom
+# Cerificate Authority File to verify the ESX/vCenter certificate.
+#
+# If this option is set, the "vmware_insecure" option will be ignored
+# and the CA file specified will be used to authenticate the
+# ESX/vCenter
+# server certificate and establish a secure connection to the server.
+#
+# Possible Values:
+#     * Any string that is a valid absolute path to a CA file
+#
+# Related options:
+#     * vmware_insecure
+#
+#  (string value)
+#vmware_ca_file = /etc/ssl/certs/ca-certificates.crt
+
+#
+# The datastores where the image can be stored.
+#
+# This configuration option specifies the datastores where the image
+# can
+# be stored in the VMWare store backend. This option may be specified
+# multiple times for specifying multiple datastores. The datastore
+# name
+# should be specified after its datacenter path, separated by ":". An
+# optional weight may be given after the datastore name, separated
+# again
+# by ":" to specify the priority. Thus, the required format becomes
+# <datacenter_path>:<datastore_name>:<optional_weight>.
+#
+# When adding an image, the datastore with highest weight will be
+# selected, unless there is not enough free space available in cases
+# where the image size is already known. If no weight is given, it is
+# assumed to be zero and the directory will be considered for
+# selection
+# last. If multiple datastores have the same weight, then the one with
+# the most free space available is selected.
+#
+# Possible Values:
+#     * Any string of the format:
+#       <datacenter_path>:<datastore_name>:<optional_weight>
+#
+# Related options:
+#    * None
+#
+#  (multi valued)
+#vmware_datastores =
+
+{% if server.identity.region is defined %}
+os_region_name = {{ server.identity.region }}
+{% endif %}
+
+[oslo_policy]
+{%- if server.policy is defined %}
+{%- set _data = server.policy %}
+{%- include "oslo_templates/files/queens/oslo/_policy.conf" %}
+{%- endif %}
+
