{% from "keystone/map.jinja" import cfg,server with context %}
[DEFAULT]

#
# From keystone
#

# Using this feature is *NOT* recommended. Instead, use the `keystone-
# manage bootstrap` command. The value of this option is treated as a
# "shared secret" that can be used to bootstrap Keystone through the
# API. This "token" does not represent a user (it has no identity),
# and carries no explicit authorization (it effectively bypasses most
# authorization checks). If set to `None`, the value is ignored and
# the `admin_token` middleware is effectively disabled. (string value)
#admin_token = <None>

# The base public endpoint URL for Keystone that is advertised to
# clients (NOTE: this does NOT affect how Keystone listens for
# connections). Defaults to the base host URL of the request. For
# example, if keystone receives a request to
# `http://server:5000/v3/users`, then this will option will be
# automatically treated as `http://server:5000`. You should only need
# to set option if either the value of the base URL contains a path
# that keystone does not automatically infer (`/prefix/v3`), or if the
# endpoint should be found on a different host. (uri value)
#public_endpoint = <None>

# The base admin endpoint URL for Keystone that is advertised to
# clients (NOTE: this does NOT affect how Keystone listens for
# connections). Defaults to the base host URL of the request. For
# example, if keystone receives a request to
# `http://server:35357/v3/users`, then this will option will be
# automatically treated as `http://server:35357`. You should only need
# to set option if either the value of the base URL contains a path
# that keystone does not automatically infer (`/prefix/v3`), or if the
# endpoint should be found on a different host. (uri value)
#admin_endpoint = <None>

# Maximum depth of the project hierarchy, excluding the project acting
# as a domain at the top of the hierarchy. WARNING: Setting it to a
# large value may adversely impact performance. (integer value)
#max_project_tree_depth = 5

# Limit the sizes of user & project ID/names. (integer value)
#max_param_size = 64

# Similar to `[DEFAULT] max_param_size`, but provides an exception for
# token values. With Fernet tokens, this can be set as low as 255.
# With UUID tokens, this should be set to 32). (integer value)
#max_token_size = 255

# DEPRECATED: Similar to the `[DEFAULT] member_role_name` option, this
# represents the default role ID used to associate users with their
# default projects in the v2 API. This will be used as the explicit
# role where one is not specified by the v2 API. You do not need to
# set this value unless you want keystone to use an existing role with
# a different ID, other than the arbitrarily defined `_member_` role
# (in which case, you should set `[DEFAULT] member_role_name` as
# well). (string value)
# This option is deprecated for removal since Q.
# Its value may be silently ignored in the future.
# Reason: This option was used to create a default member role for
# keystone v2 role assignments, but with the removal of the v2 API it
# is no longer necessary to create this default role. This option is
# deprecated and will be removed in the S release. If you are
# depending on having a predictable role name and ID for this member
# role you will need to update your tooling.
#member_role_id = 9fe2ff9ee4384b1894a90878d3e92bab

# DEPRECATED: This is the role name used in combination with the
# `[DEFAULT] member_role_id` option; see that option for more detail.
# You do not need to set this option unless you want keystone to use
# an existing role (in which case, you should set `[DEFAULT]
# member_role_id` as well). (string value)
# This option is deprecated for removal since Q.
# Its value may be silently ignored in the future.
# Reason: This option was used to create a default member role for
# keystone v2 role assignments, but with the removal of the v2 API it
# is no longer necessary to create this default role. This option is
# deprecated and will be removed in the S release. If you are
# depending on having a predictable role name and ID for this member
# role you will need to update your tooling.
#member_role_name = _member_

# The value passed as the keyword "rounds" to passlib's encrypt
# method. This option represents a trade off between security and
# performance. Higher values lead to slower performance, but higher
# security. Changing this option will only affect newly created
# passwords as existing password hashes already have a fixed number of
# rounds applied, so it is safe to tune this option in a running
# cluster. For more information, see
# https://pythonhosted.org/passlib/password_hash_api.html#choosing-
# the-right-rounds-value (integer value)
# Minimum value: 1000
# Maximum value: 100000
#crypt_strength = 10000

# The maximum number of entities that will be returned in a
# collection. This global limit may be then overridden for a specific
# driver, by specifying a list_limit in the appropriate section (for
# example, `[assignment]`). No limit is set by default. In larger
# deployments, it is recommended that you set this to a reasonable
# number to prevent operations like listing all users and projects
# from placing an unnecessary load on the system. (integer value)
#list_limit = <None>

# If set to true, strict password length checking is performed for
# password manipulation. If a password exceeds the maximum length, the
# operation will fail with an HTTP 403 Forbidden error. If set to
# false, passwords are automatically truncated to the maximum length.
# (boolean value)
#strict_password_check = false

# DEPRECATED: The HTTP header used to determine the scheme for the
# original request, even if it was removed by an SSL terminating
# proxy. (string value)
# This option is deprecated for removal since N.
# Its value may be silently ignored in the future.
# Reason: This option has been deprecated in the N release and will be
# removed in the P release. Use oslo.middleware.http_proxy_to_wsgi
# configuration instead.
#secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO

# If set to true, then the server will return information in HTTP
# responses that may allow an unauthenticated or authenticated user to
# get more information than normal, such as additional details about
# why authentication failed. This may be useful for debugging but is
# insecure. (boolean value)
#insecure_debug = false

# Default `publisher_id` for outgoing notifications. If left
# undefined, Keystone will default to using the server's host name.
# (string value)
#default_publisher_id = <None>

# Define the notification format for identity service events. A
# `basic` notification only has information about the resource being
# operated on. A `cadf` notification has the same information, as well
# as information about the initiator of the event. The `cadf` option
# is entirely backwards compatible with the `basic` option, but is
# fully CADF-compliant, and is recommended for auditing use cases.
# (string value)
# Possible values:
# basic - <No description provided>
# cadf - <No description provided>
notification_format = {{ server.get("notification_format", "basic") }}

# You can reduce the number of notifications keystone emits by
# explicitly opting out. Keystone will not emit notifications that
# match the patterns expressed in this list. Values are expected to be
# in the form of `identity.<resource_type>.<operation>`. By default,
# all notifications related to authentication are automatically
# suppressed. This field can be set multiple times in order to opt-out
# of multiple notification topics. For example, the following
# suppresses notifications describing user creation or successful
# authentication events: notification_opt_out=identity.user.create
# notification_opt_out=identity.authenticate.success (multi valued)
#notification_opt_out = identity.authenticate.success
#notification_opt_out = identity.authenticate.pending
#notification_opt_out = identity.authenticate.failed

{%- if server.logging is defined %}
{%- set _data = server.logging %}
{%- include "oslo_templates/files/queens/oslo/_log.conf" %}
{%- endif %}

{%- if server.notification %}
{%- set _data = server.message_queue %}
{%- include "oslo_templates/files/queens/oslo/messaging/_default.conf" %}
{%- endif %}

[application_credential]

#
# From keystone
#

# Entry point for the application credential backend driver in the
# `keystone.application_credential` namespace.  Keystone only provides
# a `sql` driver, so there is no reason to change this unless you are
# providing a custom entry point. (string value)
#driver = sql

# Toggle for application credential caching. This has no effect unless
# global caching is enabled. (boolean value)
#caching = true

# Time to cache application credential data in seconds. This has no
# effect unless global caching is enabled. (integer value)
#cache_time = <None>

# Maximum number of application credentials a user is permitted to
# create. A value of -1 means unlimited. If a limit is not set, users
# are permitted to create application credentials at will, which could
# lead to bloat in the keystone database or open keystone to a DoS
# attack. (integer value)
#user_limit = -1


[assignment]

#
# From keystone
#

# Entry point for the assignment backend driver (where role
# assignments are stored) in the `keystone.assignment` namespace. Only
# a SQL driver is supplied by keystone itself. Unless you are writing
# proprietary drivers for keystone, you do not need to set this
# option. (string value)
#driver = sql

# A list of role names which are prohibited from being an implied
# role. (list value)
#prohibited_implied_role = admin
{%- if server.get("assignment", {}).get("backend", "sql") == "ldap" %}
driver = ldap
{%- else %}
driver = sql
{%- endif %}


[auth]

#
# From keystone
#

# Allowed authentication methods. Note: You should disable the
# `external` auth method if you are currently using federation.
# External auth and federation both use the REMOTE_USER variable.
# Since both the mapped and external plugin are being invoked to
# validate attributes in the request environment, it can cause
# conflicts. (list value)
#methods = external,password,token,oauth1,mapped,application_credential
{% if server.auth_methods is defined %}
methods = {{ server.auth_methods |join(',') }}
{%- endif %}

{%- if server.get('federation', {}).oidc is defined %}
{{ server.federation.oidc.protocol }} = keystone.auth.plugins.mapped.Mapped
{%- endif %}
{%- if server.get('federation', {}).saml2 is defined %}
{{ server.federation.saml2.protocol }} = keystone.auth.plugins.mapped.Mapped
{%- endif %}

# Entry point for the password auth plugin module in the
# `keystone.auth.password` namespace. You do not need to set this
# unless you are overriding keystone's own password authentication
# plugin. (string value)
#password = <None>

# Entry point for the token auth plugin module in the
# `keystone.auth.token` namespace. You do not need to set this unless
# you are overriding keystone's own token authentication plugin.
# (string value)
#token = <None>

# Entry point for the external (`REMOTE_USER`) auth plugin module in
# the `keystone.auth.external` namespace. Supplied drivers are
# `DefaultDomain` and `Domain`. The default driver is `DefaultDomain`,
# which assumes that all users identified by the username specified to
# keystone in the `REMOTE_USER` variable exist within the context of
# the default domain. The `Domain` option expects an additional
# environment variable be presented to keystone, `REMOTE_DOMAIN`,
# containing the domain name of the `REMOTE_USER` (if `REMOTE_DOMAIN`
# is not set, then the default domain will be used instead). You do
# not need to set this unless you are taking advantage of "external
# authentication", where the application server (such as Apache) is
# handling authentication instead of keystone. (string value)
#external = <None>

# Entry point for the OAuth 1.0a auth plugin module in the
# `keystone.auth.oauth1` namespace. You do not need to set this unless
# you are overriding keystone's own `oauth1` authentication plugin.
# (string value)
#oauth1 = <None>

# Entry point for the mapped auth plugin module in the
# `keystone.auth.mapped` namespace. You do not need to set this unless
# you are overriding keystone's own `mapped` authentication plugin.
# (string value)
#mapped = <None>

# Entry point for the application_credential auth plugin module in the
# `keystone.auth.application_credential` namespace. You do not need to
# set this unless you are overriding keystone's own
# `application_credential` authentication plugin. (string value)
#application_credential = <None>


[catalog]

#
# From keystone
#

# Absolute path to the file used for the templated catalog backend.
# This option is only used if the `[catalog] driver` is set to
# `templated`. (string value)
template_file = default_catalog.templates

# Entry point for the catalog driver in the `keystone.catalog`
# namespace. Keystone provides a `sql` option (which supports basic
# CRUD operations through SQL), a `templated` option (which loads the
# catalog from a templated catalog file on disk), and a
# `endpoint_filter.sql` option (which supports arbitrary service
# catalogs per project). (string value)
driver = sql

# Toggle for catalog caching. This has no effect unless global caching
# is enabled. In a typical deployment, there is no reason to disable
# this. (boolean value)
#caching = true

# Time to cache catalog data (in seconds). This has no effect unless
# global and catalog caching are both enabled. Catalog data (services,
# endpoints, etc.) typically does not change frequently, and so a
# longer duration than the global default may be desirable. (integer
# value)
#cache_time = <None>

# Maximum number of entities that will be returned in a catalog
# collection. There is typically no reason to set this, as it would be
# unusual for a deployment to have enough services or endpoints to
# exceed a reasonable limit. (integer value)
#list_limit = <None>


[credential]

#
# From keystone
#

# Entry point for the credential backend driver in the
# `keystone.credential` namespace. Keystone only provides a `sql`
# driver, so there's no reason to change this unless you are providing
# a custom entry point. (string value)
#driver = sql

# Entry point for credential encryption and decryption operations in
# the `keystone.credential.provider` namespace. Keystone only provides
# a `fernet` driver, so there's no reason to change this unless you
# are providing a custom entry point to encrypt and decrypt
# credentials. (string value)
#provider = fernet

# Directory containing Fernet keys used to encrypt and decrypt
# credentials stored in the credential backend. Fernet keys used to
# encrypt credentials have no relationship to Fernet keys used to
# encrypt Fernet tokens. Both sets of keys should be managed
# separately and require different rotation policies. Do not share
# this repository with the repository used to manage keys for Fernet
# tokens. (string value)
key_repository = {{ server.credential.location }}


[domain_config]

#
# From keystone
#

# Entry point for the domain-specific configuration driver in the
# `keystone.resource.domain_config` namespace. Only a `sql` option is
# provided by keystone, so there is no reason to set this unless you
# are providing a custom entry point. (string value)
#driver = sql

# Toggle for caching of the domain-specific configuration backend.
# This has no effect unless global caching is enabled. There is
# normally no reason to disable this. (boolean value)
#caching = true

# Time-to-live (TTL, in seconds) to cache domain-specific
# configuration data. This has no effect unless `[domain_config]
# caching` is enabled. (integer value)
#cache_time = 300


[endpoint_filter]

#
# From keystone
#

# Entry point for the endpoint filter driver in the
# `keystone.endpoint_filter` namespace. Only a `sql` option is
# provided by keystone, so there is no reason to set this unless you
# are providing a custom entry point. (string value)
#driver = sql

# This controls keystone's behavior if the configured endpoint filters
# do not result in any endpoints for a user + project pair (and
# therefore a potentially empty service catalog). If set to true,
# keystone will return the entire service catalog. If set to false,
# keystone will return an empty service catalog. (boolean value)
#return_all_endpoints_if_no_filter = true


[endpoint_policy]

#
# From keystone
#

# Entry point for the endpoint policy driver in the
# `keystone.endpoint_policy` namespace. Only a `sql` driver is
# provided by keystone, so there is no reason to set this unless you
# are providing a custom entry point. (string value)
#driver = sql


[eventlet_server]

#
# From keystone
#

# DEPRECATED: The IP address of the network interface for the public
# service to listen on. (unknown value)
# Deprecated group/name - [DEFAULT]/bind_host
# Deprecated group/name - [DEFAULT]/public_bind_host
# This option is deprecated for removal since K.
# Its value may be silently ignored in the future.
# Reason: Support for running keystone under eventlet has been removed
# in the Newton release. These options remain for backwards
# compatibility because they are used for URL substitutions.
#public_bind_host = {% if server.bind.address is defined %}{{ server.bind.address }}{% else %}{{ server.bind.public_address }}{% endif %}

# DEPRECATED: The port number for the public service to listen on.
# (port value)
# Minimum value: 0
# Maximum value: 65535
# Deprecated group/name - [DEFAULT]/public_port
# This option is deprecated for removal since K.
# Its value may be silently ignored in the future.
# Reason: Support for running keystone under eventlet has been removed
# in the Newton release. These options remain for backwards
# compatibility because they are used for URL substitutions.
#public_port = 5000

# DEPRECATED: The IP address of the network interface for the admin
# service to listen on. (unknown value)
# Deprecated group/name - [DEFAULT]/bind_host
# Deprecated group/name - [DEFAULT]/admin_bind_host
# This option is deprecated for removal since K.
# Its value may be silently ignored in the future.
# Reason: Support for running keystone under eventlet has been removed
# in the Newton release. These options remain for backwards
# compatibility because they are used for URL substitutions.
#admin_bind_host = {% if server.bind.address is defined %}{{ server.bind.address }}{% else %}{{ server.bind.public_address }}{% endif %}

# DEPRECATED: The port number for the admin service to listen on.
# (port value)
# Minimum value: 0
# Maximum value: 65535
# Deprecated group/name - [DEFAULT]/admin_port
# This option is deprecated for removal since K.
# Its value may be silently ignored in the future.
# Reason: Support for running keystone under eventlet has been removed
# in the Newton release. These options remain for backwards
# compatibility because they are used for URL substitutions.
#admin_port = 35357


[extra_headers]

#
# From keystone
#

# Specifies the distribution of the keystone server. (string value)
#Distribution = Ubuntu
{%- if server.get('federation', {}).saml2 is defined %}
[{{ server.federation.saml2.protocol }}]
remote_id_attribute = {{ server.federation.saml2.remote_id_attribute }}
{%- endif %}

{%- if server.get('federation', {}).oidc is defined %}
[{{ server.federation.oidc.protocol }}]
remote_id_attribute = {{ server.federation.oidc.remote_id_attribute }}
{%- endif %}

[federation]

#
# From keystone
#

# Entry point for the federation backend driver in the
# `keystone.federation` namespace. Keystone only provides a `sql`
# driver, so there is no reason to set this option unless you are
# providing a custom entry point. (string value)
#driver = sql
{%- if server.get('federation', {}).federation_driver is defined %}
driver = {{ server.federation.federation_driver }}
{%- endif %}

# Prefix to use when filtering environment variable names for
# federated assertions. Matched variables are passed into the
# federated mapping engine. (string value)
#assertion_prefix =

# Value to be used to obtain the entity ID of the Identity Provider
# from the environment. For `mod_shib`, this would be `Shib-Identity-
# Provider`. For `mod_auth_openidc`, this could be `HTTP_OIDC_ISS`.
# For `mod_auth_mellon`, this could be `MELLON_IDP`. (string value)
#remote_id_attribute = <None>

# An arbitrary domain name that is reserved to allow federated
# ephemeral users to have a domain concept. Note that an admin will
# not be able to create a domain with this name or update an existing
# domain to this name. You are not advised to change this value unless
# you really have to. (string value)
#federated_domain_name = Federated
{%- if server.get('federation', {}).federated_domain_name is defined %}
federated_domain_name = {{ server.federation.federated_domain_name }}
{%- endif %}

# A list of trusted dashboard hosts. Before accepting a Single Sign-On
# request to return a token, the origin host must be a member of this
# list. This configuration option may be repeated for multiple values.
# You must set this in order to use web-based SSO flows. For example:
# trusted_dashboard=https://acme.example.com/auth/websso
# trusted_dashboard=https://beta.example.com/auth/websso (multi
# valued)
#trusted_dashboard =
{%- if server.get('federation', {}).trusted_dashboard is defined %}
{%- for dashboard in server.federation.trusted_dashboard %}
trusted_dashboard = {{ dashboard }}
{%- endfor %}
{%- endif %}

# Absolute path to an HTML file used as a Single Sign-On callback
# handler. This page is expected to redirect the user from keystone
# back to a trusted dashboard host, by form encoding a token in a POST
# request. Keystone's default value should be sufficient for most
# deployments. (string value)
#sso_callback_template = /etc/keystone/sso_callback_template.html

# Toggle for federation caching. This has no effect unless global
# caching is enabled. There is typically no reason to disable this.
# (boolean value)
#caching = true


[fernet_tokens]

#
# From keystone
#

# Directory containing Fernet token keys. This directory must exist
# before using `keystone-manage fernet_setup` for the first time, must
# be writable by the user running `keystone-manage fernet_setup` or
# `keystone-manage fernet_rotate`, and of course must be readable by
# keystone's server process. The repository may contain keys in one of
# three states: a single staged key (always index 0) used for token
# validation, a single primary key (always the highest index) used for
# token creation and validation, and any number of secondary keys (all
# other index values) used for token validation. With multiple
# keystone nodes, each node must share the same key repository
# contents, with the exception of the staged key (index 0). It is safe
# to run `keystone-manage fernet_rotate` once on any one node to
# promote a staged key (index 0) to be the new primary (incremented
# from the previous highest index), and produce a new staged key (a
# new key with index 0); the resulting repository can then be
# atomically replicated to other nodes without any risk of race
# conditions (for example, it is safe to run `keystone-manage
# fernet_rotate` on host A, wait any amount of time, create a tarball
# of the directory on host A, unpack it on host B to a temporary
# location, and atomically move (`mv`) the directory into place on
# host B). Running `keystone-manage fernet_rotate` *twice* on a key
# repository without syncing other nodes will result in tokens that
# can not be validated by all nodes. (string value)
key_repository = {{ server.tokens.location }}

# This controls how many keys are held in rotation by `keystone-manage
# fernet_rotate` before they are discarded. The default value of 3
# means that keystone will maintain one staged key (always index 0),
# one primary key (the highest numerical index), and one secondary key
# (every other index). Increasing this value means that additional
# secondary keys will be kept in the rotation. (integer value)
# Minimum value: 1
max_active_keys = {{ server.tokens.get('max_active_keys', '3') }}


[identity]

#
# From keystone
#

# This references the domain to use for all Identity API v2 requests
# (which are not aware of domains). A domain with this ID can
# optionally be created for you by `keystone-manage bootstrap`. The
# domain referenced by this ID cannot be deleted on the v3 API, to
# prevent accidentally breaking the v2 API. There is nothing special
# about this domain, other than the fact that it must exist to order
# to maintain support for your v2 clients. There is typically no
# reason to change this value. (string value)
#default_domain_id = default
{%- if server.get('domain', {}) %}
{%- for name, domain in server.domain.items() %}
{%- if domain.get('default', False) %}
default_domain_id = {{ name }}
{%- endif %}
{%- endfor %}
{%- endif %}

# A subset (or all) of domains can have their own identity driver,
# each with their own partial configuration options, stored in either
# the resource backend or in a file in a domain configuration
# directory (depending on the setting of `[identity]
# domain_configurations_from_database`). Only values specific to the
# domain need to be specified in this manner. This feature is disabled
# by default, but may be enabled by default in a future release; set
# to true to enable. (boolean value)
#domain_specific_drivers_enabled = false
{%- if server.get('domain', {}) %}
domain_specific_drivers_enabled = true
{%- endif %}

# By default, domain-specific configuration data is read from files in
# the directory identified by `[identity] domain_config_dir`. Enabling
# this configuration option allows you to instead manage domain-
# specific configurations through the API, which are then persisted in
# the backend (typically, a SQL database), rather than using
# configuration files on disk. (boolean value)
#domain_configurations_from_database = false

# Absolute path where keystone should locate domain-specific
# `[identity]` configuration files. This option has no effect unless
# `[identity] domain_specific_drivers_enabled` is set to true. There
# is typically no reason to change this value. (string value)
#domain_config_dir = /etc/keystone/domains
{%- if server.get('domain', {}) %}
domain_config_dir = /etc/keystone/domains
{%- endif %}

# Entry point for the identity backend driver in the
# `keystone.identity` namespace. Keystone provides a `sql` and `ldap`
# driver. This option is also used as the default driver selection
# (along with the other configuration variables in this section) in
# the event that `[identity] domain_specific_drivers_enabled` is
# enabled, but no applicable domain-specific configuration is defined
# for the domain in question. Unless your deployment primarily relies
# on `ldap` AND is not using domain-specific configuration, you should
# typically leave this set to `sql`. (string value)
driver = {{ server.get('backend', 'sql') }}

# Toggle for identity caching. This has no effect unless global
# caching is enabled. There is typically no reason to disable this.
# (boolean value)
#caching = true

# Time to cache identity data (in seconds). This has no effect unless
# global and identity caching are enabled. (integer value)
#cache_time = 600

# Maximum allowed length for user passwords. Decrease this value to
# improve performance. Changing this value does not effect existing
# passwords. (integer value)
# Maximum value: 4096
#max_password_length = 4096

# Maximum number of entities that will be returned in an identity
# collection. (integer value)
#list_limit = <None>

# The password hashing algorithm to use for passwords stored within
# keystone. (string value)
# Possible values:
# bcrypt - <No description provided>
# scrypt - <No description provided>
# pbkdf2_sha512 - <No description provided>
#password_hash_algorithm = bcrypt

# This option represents a trade off between security and performance.
# Higher values lead to slower performance, but higher security.
# Changing this option will only affect newly created passwords as
# existing password hashes already have a fixed number of rounds
# applied, so it is safe to tune this option in a running cluster.
# The default for bcrypt is 12, must be between 4 and 31, inclusive.
# The default for scrypt is 16, must be within `range(1,32)`.  The
# default for pbkdf_sha512 is 60000, must be within `range(1,1<<32)`
# WARNING: If using scrypt, increasing this value increases BOTH time
# AND memory requirements to hash a password. (integer value)
#password_hash_rounds = <None>

# Optional block size to pass to scrypt hash function (the `r`
# parameter). Useful for tuning scrypt to optimal performance for your
# CPU architecture. This option is only used when the
# `password_hash_algorithm` option is set to `scrypt`. Defaults to 8.
# (integer value)
#scrypt_block_size = <None>

# Optional parallelism to pass to scrypt hash function (the `p`
# parameter). This option is only used when the
# `password_hash_algorithm` option is set to `scrypt`. Defaults to 1.
# (integer value)
#scrypt_parallelism = <None>

# Number of bytes to use in scrypt and pbkfd2_sha512 hashing salt.
# Default for scrypt is 16 bytes. Default for pbkfd2_sha512 is 16
# bytes.  Limited to a maximum of 96 bytes due to the size of the
# column used to store password hashes. (integer value)
# Minimum value: 0
# Maximum value: 96
#salt_bytesize = <None>
{%- if server.get("backend", "sql") == "k2k" and server.k2k is defined %}
{%- set k2k = server.k2k %}
{% include "keystone/files/_k2k.conf" %}
{%- endif %}


[identity_mapping]

#
# From keystone
#

# Entry point for the identity mapping backend driver in the
# `keystone.identity.id_mapping` namespace. Keystone only provides a
# `sql` driver, so there is no reason to change this unless you are
# providing a custom entry point. (string value)
#driver = sql

# Entry point for the public ID generator for user and group entities
# in the `keystone.identity.id_generator` namespace. The Keystone
# identity mapper only supports generators that produce 64 bytes or
# less. Keystone only provides a `sha256` entry point, so there is no
# reason to change this value unless you're providing a custom entry
# point. (string value)
#generator = sha256

# The format of user and group IDs changed in Juno for backends that
# do not generate UUIDs (for example, LDAP), with keystone providing a
# hash mapping to the underlying attribute in LDAP. By default this
# mapping is disabled, which ensures that existing IDs will not
# change. Even when the mapping is enabled by using domain-specific
# drivers (`[identity] domain_specific_drivers_enabled`), any users
# and groups from the default domain being handled by LDAP will still
# not be mapped to ensure their IDs remain backward compatible.
# Setting this value to false will enable the new mapping for all
# backends, including the default LDAP driver. It is only guaranteed
# to be safe to enable this option if you do not already have
# assignments for users and groups from the default LDAP domain, and
# you consider it to be acceptable for Keystone to provide the
# different IDs to clients than it did previously (existing IDs in the
# API will suddenly change). Typically this means that the only time
# you can set this value to false is when configuring a fresh
# installation, although that is the recommended value. (boolean
# value)
#backward_compatible_ids = true


[ldap]

#
# From keystone
#

# URL(s) for connecting to the LDAP server. Multiple LDAP URLs may be
# specified as a comma separated string. The first URL to successfully
# bind is used for the connection. (string value)
#url = ldap://localhost

# The user name of the administrator bind DN to use when querying the
# LDAP server, if your LDAP server requires it. (string value)
#user = <None>

# The password of the administrator bind DN to use when querying the
# LDAP server, if your LDAP server requires it. (string value)
#password = <None>

# The default LDAP server suffix to use, if a DN is not defined via
# either `[ldap] user_tree_dn` or `[ldap] group_tree_dn`. (string
# value)
#suffix = cn=example,cn=com

# The search scope which defines how deep to search within the search
# base. A value of `one` (representing `oneLevel` or `singleLevel`)
# indicates a search of objects immediately below to the base object,
# but does not include the base object itself. A value of `sub`
# (representing `subtree` or `wholeSubtree`) indicates a search of
# both the base object itself and the entire subtree below it. (string
# value)
# Possible values:
# one - <No description provided>
# sub - <No description provided>
#query_scope = one

# Defines the maximum number of results per page that keystone should
# request from the LDAP server when listing objects. A value of zero
# (`0`) disables paging. (integer value)
# Minimum value: 0
#page_size = 0

# The LDAP dereferencing option to use for queries involving aliases.
# A value of `default` falls back to using default dereferencing
# behavior configured by your `ldap.conf`. A value of `never` prevents
# aliases from being dereferenced at all. A value of `searching`
# dereferences aliases only after name resolution. A value of
# `finding` dereferences aliases only during name resolution. A value
# of `always` dereferences aliases in all cases. (string value)
# Possible values:
# never - <No description provided>
# searching - <No description provided>
# always - <No description provided>
# finding - <No description provided>
# default - <No description provided>
#alias_dereferencing = default

# Sets the LDAP debugging level for LDAP calls. A value of 0 means
# that debugging is not enabled. This value is a bitmask, consult your
# LDAP documentation for possible values. (integer value)
# Minimum value: -1
#debug_level = <None>

# Sets keystone's referral chasing behavior across directory
# partitions. If left unset, the system's default behavior will be
# used. (boolean value)
#chase_referrals = <None>

# The search base to use for users. Defaults to the `[ldap] suffix`
# value. (string value)
#user_tree_dn = <None>

# The LDAP search filter to use for users. (string value)
#user_filter = <None>

# The LDAP object class to use for users. (string value)
#user_objectclass = inetOrgPerson

# The LDAP attribute mapped to user IDs in keystone. This must NOT be
# a multivalued attribute. User IDs are expected to be globally unique
# across keystone domains and URL-safe. (string value)
#user_id_attribute = cn

# The LDAP attribute mapped to user names in keystone. User names are
# expected to be unique only within a keystone domain and are not
# expected to be URL-safe. (string value)
#user_name_attribute = sn

# The LDAP attribute mapped to user descriptions in keystone. (string
# value)
#user_description_attribute = description

# The LDAP attribute mapped to user emails in keystone. (string value)
#user_mail_attribute = mail

# The LDAP attribute mapped to user passwords in keystone. (string
# value)
#user_pass_attribute = userPassword

# The LDAP attribute mapped to the user enabled attribute in keystone.
# If setting this option to `userAccountControl`, then you may be
# interested in setting `[ldap] user_enabled_mask` and `[ldap]
# user_enabled_default` as well. (string value)
#user_enabled_attribute = enabled

# Logically negate the boolean value of the enabled attribute obtained
# from the LDAP server. Some LDAP servers use a boolean lock attribute
# where "true" means an account is disabled. Setting `[ldap]
# user_enabled_invert = true` will allow these lock attributes to be
# used. This option will have no effect if either the `[ldap]
# user_enabled_mask` or `[ldap] user_enabled_emulation` options are in
# use. (boolean value)
#user_enabled_invert = false

# Bitmask integer to select which bit indicates the enabled value if
# the LDAP server represents "enabled" as a bit on an integer rather
# than as a discrete boolean. A value of `0` indicates that the mask
# is not used. If this is not set to `0` the typical value is `2`.
# This is typically used when `[ldap] user_enabled_attribute =
# userAccountControl`. Setting this option causes keystone to ignore
# the value of `[ldap] user_enabled_invert`. (integer value)
# Minimum value: 0
#user_enabled_mask = 0

# The default value to enable users. This should match an appropriate
# integer value if the LDAP server uses non-boolean (bitmask) values
# to indicate if a user is enabled or disabled. If this is not set to
# `True`, then the typical value is `512`. This is typically used when
# `[ldap] user_enabled_attribute = userAccountControl`. (string value)
#user_enabled_default = True

# List of user attributes to ignore on create and update, or whether a
# specific user attribute should be filtered for list or show user.
# (list value)
#user_attribute_ignore = default_project_id

# The LDAP attribute mapped to a user's default_project_id in
# keystone. This is most commonly used when keystone has write access
# to LDAP. (string value)
#user_default_project_id_attribute = <None>

# If enabled, keystone uses an alternative method to determine if a
# user is enabled or not by checking if they are a member of the group
# defined by the `[ldap] user_enabled_emulation_dn` option. Enabling
# this option causes keystone to ignore the value of `[ldap]
# user_enabled_invert`. (boolean value)
#user_enabled_emulation = false

# DN of the group entry to hold enabled users when using enabled
# emulation. Setting this option has no effect unless `[ldap]
# user_enabled_emulation` is also enabled. (string value)
#user_enabled_emulation_dn = <None>

# Use the `[ldap] group_member_attribute` and `[ldap]
# group_objectclass` settings to determine membership in the emulated
# enabled group. Enabling this option has no effect unless `[ldap]
# user_enabled_emulation` is also enabled. (boolean value)
#user_enabled_emulation_use_group_config = false

# A list of LDAP attribute to keystone user attribute pairs used for
# mapping additional attributes to users in keystone. The expected
# format is `<ldap_attr>:<user_attr>`, where `ldap_attr` is the
# attribute in the LDAP object and `user_attr` is the attribute which
# should appear in the identity API. (list value)
#user_additional_attribute_mapping =

# The search base to use for groups. Defaults to the `[ldap] suffix`
# value. (string value)
#group_tree_dn = <None>

# The LDAP search filter to use for groups. (string value)
#group_filter = <None>

# The LDAP object class to use for groups. If setting this option to
# `posixGroup`, you may also be interested in enabling the `[ldap]
# group_members_are_ids` option. (string value)
#group_objectclass = groupOfNames

# The LDAP attribute mapped to group IDs in keystone. This must NOT be
# a multivalued attribute. Group IDs are expected to be globally
# unique across keystone domains and URL-safe. (string value)
#group_id_attribute = cn

# The LDAP attribute mapped to group names in keystone. Group names
# are expected to be unique only within a keystone domain and are not
# expected to be URL-safe. (string value)
#group_name_attribute = ou

# The LDAP attribute used to indicate that a user is a member of the
# group. (string value)
#group_member_attribute = member

# Enable this option if the members of the group object class are
# keystone user IDs rather than LDAP DNs. This is the case when using
# `posixGroup` as the group object class in Open Directory. (boolean
# value)
#group_members_are_ids = false

# The LDAP attribute mapped to group descriptions in keystone. (string
# value)
#group_desc_attribute = description

# List of group attributes to ignore on create and update. or whether
# a specific group attribute should be filtered for list or show
# group. (list value)
#group_attribute_ignore =

# A list of LDAP attribute to keystone group attribute pairs used for
# mapping additional attributes to groups in keystone. The expected
# format is `<ldap_attr>:<group_attr>`, where `ldap_attr` is the
# attribute in the LDAP object and `group_attr` is the attribute which
# should appear in the identity API. (list value)
#group_additional_attribute_mapping =

# If enabled, group queries will use Active Directory specific filters
# for nested groups. (boolean value)
#group_ad_nesting = false

# An absolute path to a CA certificate file to use when communicating
# with LDAP servers. This option will take precedence over `[ldap]
# tls_cacertdir`, so there is no reason to set both. (string value)
#tls_cacertfile = <None>

# An absolute path to a CA certificate directory to use when
# communicating with LDAP servers. There is no reason to set this
# option if you've also set `[ldap] tls_cacertfile`. (string value)
#tls_cacertdir = <None>

# Enable TLS when communicating with LDAP servers. You should also set
# the `[ldap] tls_cacertfile` and `[ldap] tls_cacertdir` options when
# using this option. Do not set this option if you are using LDAP over
# SSL (LDAPS) instead of TLS. (boolean value)
#use_tls = false

# Specifies which checks to perform against client certificates on
# incoming TLS sessions. If set to `demand`, then a certificate will
# always be requested and required from the LDAP server. If set to
# `allow`, then a certificate will always be requested but not
# required from the LDAP server. If set to `never`, then a certificate
# will never be requested. (string value)
# Possible values:
# demand - <No description provided>
# never - <No description provided>
# allow - <No description provided>
#tls_req_cert = demand

# The connection timeout to use with the LDAP server. A value of `-1`
# means that connections will never timeout. (integer value)
# Minimum value: -1
#connection_timeout = -1

# Enable LDAP connection pooling for queries to the LDAP server. There
# is typically no reason to disable this. (boolean value)
#use_pool = true

# The size of the LDAP connection pool. This option has no effect
# unless `[ldap] use_pool` is also enabled. (integer value)
# Minimum value: 1
#pool_size = 10

# The maximum number of times to attempt reconnecting to the LDAP
# server before aborting. A value of zero prevents retries. This
# option has no effect unless `[ldap] use_pool` is also enabled.
# (integer value)
# Minimum value: 0
#pool_retry_max = 3

# The number of seconds to wait before attempting to reconnect to the
# LDAP server. This option has no effect unless `[ldap] use_pool` is
# also enabled. (floating point value)
#pool_retry_delay = 0.1

# The connection timeout to use when pooling LDAP connections. A value
# of `-1` means that connections will never timeout. This option has
# no effect unless `[ldap] use_pool` is also enabled. (integer value)
# Minimum value: -1
#pool_connection_timeout = -1

# The maximum connection lifetime to the LDAP server in seconds. When
# this lifetime is exceeded, the connection will be unbound and
# removed from the connection pool. This option has no effect unless
# `[ldap] use_pool` is also enabled. (integer value)
# Minimum value: 1
#pool_connection_lifetime = 600

# Enable LDAP connection pooling for end user authentication. There is
# typically no reason to disable this. (boolean value)
#use_auth_pool = true

# The size of the connection pool to use for end user authentication.
# This option has no effect unless `[ldap] use_auth_pool` is also
# enabled. (integer value)
# Minimum value: 1
#auth_pool_size = 100

# The maximum end user authentication connection lifetime to the LDAP
# server in seconds. When this lifetime is exceeded, the connection
# will be unbound and removed from the connection pool. This option
# has no effect unless `[ldap] use_auth_pool` is also enabled.
# (integer value)
# Minimum value: 1
#auth_pool_connection_lifetime = 60


[memcache]

#
# From keystone
#

# Number of seconds memcached server is considered dead before it is
# tried again. This is used by the key value store system. (integer
# value)
#dead_retry = 300

# Timeout in seconds for every call to a server. This is used by the
# key value store system. (integer value)
#socket_timeout = 3

# Max total number of open connections to every memcached server. This
# is used by the key value store system. (integer value)
#pool_maxsize = 10

# Number of seconds a connection to memcached is held unused in the
# pool before it is closed. This is used by the key value store
# system. (integer value)
#pool_unused_timeout = 60

# Number of seconds that an operation will wait to get a memcache
# client connection. This is used by the key value store system.
# (integer value)
#pool_connection_get_timeout = 10


[oauth1]

#
# From keystone
#

# Entry point for the OAuth backend driver in the `keystone.oauth1`
# namespace. Typically, there is no reason to set this option unless
# you are providing a custom entry point. (string value)
#driver = sql

# Number of seconds for the OAuth Request Token to remain valid after
# being created. This is the amount of time the user has to authorize
# the token. Setting this option to zero means that request tokens
# will last forever. (integer value)
# Minimum value: 0
#request_token_duration = 28800

# Number of seconds for the OAuth Access Token to remain valid after
# being created. This is the amount of time the consumer has to
# interact with the service provider (which is typically keystone).
# Setting this option to zero means that access tokens will last
# forever. (integer value)
# Minimum value: 0
#access_token_duration = 86400


[paste_deploy]

#
# From keystone
#

# Name of (or absolute path to) the Paste Deploy configuration file
# that composes middleware and the keystone application itself into
# actual WSGI entry points. See http://pythonpaste.org/deploy/ for
# additional documentation on the file's format. (string value)
#config_file = keystone-paste.ini


[policy]

#
# From keystone
#

# Entry point for the policy backend driver in the `keystone.policy`
# namespace. Supplied drivers are `rules` (which does not support any
# CRUD operations for the v3 policy API) and `sql`. Typically, there
# is no reason to set this option unless you are providing a custom
# entry point. (string value)
driver = sql

# Maximum number of entities that will be returned in a policy
# collection. (integer value)
#list_limit = <None>


[resource]

#
# From keystone
#

# DEPRECATED: Entry point for the resource driver in the
# `keystone.resource` namespace. Only a `sql` driver is supplied by
# keystone. Unless you are writing proprietary drivers for keystone,
# you do not need to set this option. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: Non-SQL resource cannot be used with SQL Identity and has
# been unable to be used since Ocata. SQL Resource backend is a
# requirement as of Pike. Setting this option no longer has an effect
# on how Keystone operates.
#driver = sql

# Toggle for resource caching. This has no effect unless global
# caching is enabled. (boolean value)
# Deprecated group/name - [assignment]/caching
#caching = true

# Time to cache resource data in seconds. This has no effect unless
# global caching is enabled. (integer value)
# Deprecated group/name - [assignment]/cache_time
#cache_time = <None>

# Maximum number of entities that will be returned in a resource
# collection. (integer value)
# Deprecated group/name - [assignment]/list_limit
#list_limit = <None>

# Name of the domain that owns the `admin_project_name`. If left
# unset, then there is no admin project. `[resource]
# admin_project_name` must also be set to use this option. (string
# value)
#admin_project_domain_name = <None>
{%- if server.admin_project is defined %}
admin_project_domain_name = {{ server.admin_project.domain }}
{%- endif %}

# This is a special project which represents cloud-level administrator
# privileges across services. Tokens scoped to this project will
# contain a true `is_admin_project` attribute to indicate to policy
# systems that the role assignments on that specific project should
# apply equally across every project. If left unset, then there is no
# admin project, and thus no explicit means of cross-project role
# assignments. `[resource] admin_project_domain_name` must also be set
# to use this option. (string value)
#admin_project_name = <None>
{%- if server.admin_project is defined %}
admin_project_name = {{ server.admin_project.name }}
{%- endif %}

# This controls whether the names of projects are restricted from
# containing URL-reserved characters. If set to `new`, attempts to
# create or update a project with a URL-unsafe name will fail. If set
# to `strict`, attempts to scope a token with a URL-unsafe project
# name will fail, thereby forcing all project names to be updated to
# be URL-safe. (string value)
# Possible values:
# off - <No description provided>
# new - <No description provided>
# strict - <No description provided>
#project_name_url_safe = off

# This controls whether the names of domains are restricted from
# containing URL-reserved characters. If set to `new`, attempts to
# create or update a domain with a URL-unsafe name will fail. If set
# to `strict`, attempts to scope a token with a URL-unsafe domain name
# will fail, thereby forcing all domain names to be updated to be URL-
# safe. (string value)
# Possible values:
# off - <No description provided>
# new - <No description provided>
# strict - <No description provided>
#domain_name_url_safe = off


[revoke]

#
# From keystone
#

# Entry point for the token revocation backend driver in the
# `keystone.revoke` namespace. Keystone only provides a `sql` driver,
# so there is no reason to set this option unless you are providing a
# custom entry point. (string value)
#driver = sql

# The number of seconds after a token has expired before a
# corresponding revocation event may be purged from the backend.
# (integer value)
# Minimum value: 0
#expiration_buffer = 1800

# Toggle for revocation event caching. This has no effect unless
# global caching is enabled. (boolean value)
#caching = true

# Time to cache the revocation list and the revocation events (in
# seconds). This has no effect unless global and `[revoke] caching`
# are both enabled. (integer value)
# Deprecated group/name - [token]/revocation_cache_time
#cache_time = 3600


[role]

#
# From keystone
#

# Entry point for the role backend driver in the `keystone.role`
# namespace. Keystone only provides a `sql` driver, so there's no
# reason to change this unless you are providing a custom entry point.
# (string value)
#driver = <None>

# Toggle for role caching. This has no effect unless global caching is
# enabled. In a typical deployment, there is no reason to disable
# this. (boolean value)
#caching = true

# Time to cache role data, in seconds. This has no effect unless both
# global caching and `[role] caching` are enabled. (integer value)
#cache_time = <None>

# Maximum number of entities that will be returned in a role
# collection. This may be useful to tune if you have a large number of
# discrete roles in your deployment. (integer value)
#list_limit = <None>


[saml]

#
# From keystone
#

# Determines the lifetime for any SAML assertions generated by
# keystone, using `NotOnOrAfter` attributes. (integer value)
#assertion_expiration_time = 3600

# Name of, or absolute path to, the binary to be used for XML signing.
# Although only the XML Security Library (`xmlsec1`) is supported, it
# may have a non-standard name or path on your system. If keystone
# cannot find the binary itself, you may need to install the
# appropriate package, use this option to specify an absolute path, or
# adjust keystone's PATH environment variable. (string value)
#xmlsec1_binary = xmlsec1

# Absolute path to the public certificate file to use for SAML
# signing. The value cannot contain a comma (`,`). (string value)
#certfile = /etc/keystone/ssl/certs/signing_cert.pem

# Absolute path to the private key file to use for SAML signing. The
# value cannot contain a comma (`,`). (string value)
#keyfile = /etc/keystone/ssl/private/signing_key.pem

# This is the unique entity identifier of the identity provider
# (keystone) to use when generating SAML assertions. This value is
# required to generate identity provider metadata and must be a URI (a
# URL is recommended). For example: `https://keystone.example.com/v3
# /OS-FEDERATION/saml2/idp`. (uri value)
#idp_entity_id = <None>

# This is the single sign-on (SSO) service location of the identity
# provider which accepts HTTP POST requests. A value is required to
# generate identity provider metadata. For example:
# `https://keystone.example.com/v3/OS-FEDERATION/saml2/sso`. (uri
# value)
#idp_sso_endpoint = <None>

# This is the language used by the identity provider's organization.
# (string value)
#idp_lang = en

# This is the name of the identity provider's organization. (string
# value)
#idp_organization_name = SAML Identity Provider

# This is the name of the identity provider's organization to be
# displayed. (string value)
#idp_organization_display_name = OpenStack SAML Identity Provider

# This is the URL of the identity provider's organization. The URL
# referenced here should be useful to humans. (uri value)
#idp_organization_url = https://example.com/

# This is the company name of the identity provider's contact person.
# (string value)
#idp_contact_company = Example, Inc.

# This is the given name of the identity provider's contact person.
# (string value)
#idp_contact_name = SAML Identity Provider Support

# This is the surname of the identity provider's contact person.
# (string value)
#idp_contact_surname = Support

# This is the email address of the identity provider's contact person.
# (string value)
#idp_contact_email = support@example.com

# This is the telephone number of the identity provider's contact
# person. (string value)
#idp_contact_telephone = +1 800 555 0100

# This is the type of contact that best describes the identity
# provider's contact person. (string value)
# Possible values:
# technical - <No description provided>
# support - <No description provided>
# administrative - <No description provided>
# billing - <No description provided>
# other - <No description provided>
#idp_contact_type = other

# Absolute path to the identity provider metadata file. This file
# should be generated with the `keystone-manage saml_idp_metadata`
# command. There is typically no reason to change this value. (string
# value)
#idp_metadata_path = /etc/keystone/saml2_idp_metadata.xml

# The prefix of the RelayState SAML attribute to use when generating
# enhanced client and proxy (ECP) assertions. In a typical deployment,
# there is no reason to change this value. (string value)
#relay_state_prefix = ss:mem:


[security_compliance]

#
# From keystone
#

# The maximum number of days a user can go without authenticating
# before being considered "inactive" and automatically disabled
# (locked). This feature is disabled by default; set any value to
# enable it. This feature depends on the `sql` backend for the
# `[identity] driver`. When a user exceeds this threshold and is
# considered "inactive", the user's `enabled` attribute in the HTTP
# API may not match the value of the user's `enabled` column in the
# user table. (integer value)
# Minimum value: 1
#disable_user_account_days_inactive = <None>
{%- if server.security_compliance.disable_user_account_days_inactive is defined and server.get('backend', 'sql') == 'sql' %}
disable_user_account_days_inactive = {{ server.security_compliance.disable_user_account_days_inactive }}
{%- endif %}

# The maximum number of times that a user can fail to authenticate
# before the user account is locked for the number of seconds
# specified by `[security_compliance] lockout_duration`. This feature
# is disabled by default. If this feature is enabled and
# `[security_compliance] lockout_duration` is not set, then users may
# be locked out indefinitely until the user is explicitly enabled via
# the API. This feature depends on the `sql` backend for the
# `[identity] driver`. (integer value)
# Minimum value: 1
#lockout_failure_attempts = <None>
{%- if server.security_compliance.lockout_failure_attempts is defined and server.get('backend', 'sql') == 'sql' %}
lockout_failure_attempts = {{ server.security_compliance.lockout_failure_attempts }}
{%- endif %}

# The number of seconds a user account will be locked when the maximum
# number of failed authentication attempts (as specified by
# `[security_compliance] lockout_failure_attempts`) is exceeded.
# Setting this option will have no effect unless you also set
# `[security_compliance] lockout_failure_attempts` to a non-zero
# value. This feature depends on the `sql` backend for the `[identity]
# driver`. (integer value)
# Minimum value: 1
#lockout_duration = 1800
{%- if server.security_compliance.lockout_duration is defined and server.get('backend', 'sql') == 'sql' %}
lockout_duration = {{ server.security_compliance.lockout_duration }}
{%- endif %}

# The number of days for which a password will be considered valid
# before requiring it to be changed. This feature is disabled by
# default. If enabled, new password changes will have an expiration
# date, however existing passwords would not be impacted. This feature
# depends on the `sql` backend for the `[identity] driver`. (integer
# value)
# Minimum value: 1
#password_expires_days = <None>
{%- if server.security_compliance.password_expires_days is defined and server.get('backend', 'sql') == 'sql' %}
password_expires_days = {{ server.security_compliance.password_expires_days }}
{%- endif %}

# This controls the number of previous user password iterations to
# keep in history, in order to enforce that newly created passwords
# are unique. The total number which includes the new password should
# not be greater or equal to this value. Setting the value to one (the
# default) disables this feature. Thus, to enable this feature, values
# must be greater than 1. This feature depends on the `sql` backend
# for the `[identity] driver`. (integer value)
# Minimum value: 1
#unique_last_password_count = 1
{%- if server.security_compliance.unique_last_password_count is defined and server.get('backend', 'sql') == 'sql' %}
unique_last_password_count = {{ server.security_compliance.unique_last_password_count }}
{%- endif %}

# The number of days that a password must be used before the user can
# change it. This prevents users from changing their passwords
# immediately in order to wipe out their password history and reuse an
# old password. This feature does not prevent administrators from
# manually resetting passwords. It is disabled by default and allows
# for immediate password changes. This feature depends on the `sql`
# backend for the `[identity] driver`. Note: If `[security_compliance]
# password_expires_days` is set, then the value for this option should
# be less than the `password_expires_days`. (integer value)
# Minimum value: 0
#minimum_password_age = 0
{%- if server.security_compliance.minimum_password_age is defined and server.get('backend', 'sql') == 'sql' %}
minimum_password_age = {{ server.security_compliance.minimum_password_age }}
{%- endif %}

# The regular expression used to validate password strength
# requirements. By default, the regular expression will match any
# password. The following is an example of a pattern which requires at
# least 1 letter, 1 digit, and have a minimum length of 7 characters:
# ^(?=.*\d)(?=.*[a-zA-Z]).{7,}$ This feature depends on the `sql`
# backend for the `[identity] driver`. (string value)
#password_regex = <None>
{%- if server.security_compliance.password_regex is defined and server.get('backend', 'sql') == 'sql' %}
password_regex = {{ server.security_compliance.password_regex }}
{%- endif %}

# Describe your password regular expression here in language for
# humans. If a password fails to match the regular expression, the
# contents of this configuration variable will be returned to users to
# explain why their requested password was insufficient. (string
# value)
#password_regex_description = <None>
{%- if server.security_compliance.password_regex_description is defined %}
password_regex_description = {{ server.security_compliance.password_regex_description }}
{%- endif %}

# Enabling this option requires users to change their password when
# the user is created, or upon administrative reset. Before accessing
# any services, affected users will have to change their password. To
# ignore this requirement for specific users, such as service users,
# set the `options` attribute `ignore_change_password_upon_first_use`
# to `True` for the desired user via the update user API. This feature
# is disabled by default. This feature is only applicable with the
# `sql` backend for the `[identity] driver`. (boolean value)
#change_password_upon_first_use = false
{%- if server.security_compliance.change_password_upon_first_use is defined and server.get('backend', 'sql') == 'sql' %}
change_password_upon_first_use = {{ server.security_compliance.change_password_upon_first_use }}
{%- endif %}

[shadow_users]

#
# From keystone
#

# Entry point for the shadow users backend driver in the
# `keystone.identity.shadow_users` namespace. This driver is used for
# persisting local user references to externally-managed identities
# (via federation, LDAP, etc). Keystone only provides a `sql` driver,
# so there is no reason to change this option unless you are providing
# a custom entry point. (string value)
#driver = sql


[signing]

#
# From keystone
#

# DEPRECATED: Absolute path to the public certificate file to use for
# signing responses to revocation lists requests. Set this together
# with `[signing] keyfile`. For non-production environments, you may
# be interested in using `keystone-manage pki_setup` to generate self-
# signed certificates. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#certfile = /etc/keystone/ssl/certs/signing_cert.pem

# DEPRECATED: Absolute path to the private key file to use for signing
# responses to revocation lists requests. Set this together with
# `[signing] certfile`. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#keyfile = /etc/keystone/ssl/private/signing_key.pem

# DEPRECATED: Absolute path to the public certificate authority (CA)
# file to use when creating self-signed certificates with `keystone-
# manage pki_setup`. Set this together with `[signing] ca_key`. There
# is no reason to set this option unless you are requesting revocation
# lists in a non-production environment. Use a `[signing] certfile`
# issued from a trusted certificate authority instead. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#ca_certs = /etc/keystone/ssl/certs/ca.pem

# DEPRECATED: Absolute path to the private certificate authority (CA)
# key file to use when creating self-signed certificates with
# `keystone-manage pki_setup`. Set this together with `[signing]
# ca_certs`. There is no reason to set this option unless you are
# requesting revocation lists in a non-production environment. Use a
# `[signing] certfile` issued from a trusted certificate authority
# instead. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#ca_key = /etc/keystone/ssl/private/cakey.pem

# DEPRECATED: Key size (in bits) to use when generating a self-signed
# token signing certificate. There is no reason to set this option
# unless you are requesting revocation lists in a non-production
# environment. Use a `[signing] certfile` issued from a trusted
# certificate authority instead. (integer value)
# Minimum value: 1024
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#key_size = 2048

# DEPRECATED: The validity period (in days) to use when generating a
# self-signed token signing certificate. There is no reason to set
# this option unless you are requesting revocation lists in a non-
# production environment. Use a `[signing] certfile` issued from a
# trusted certificate authority instead. (integer value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#valid_days = 3650

# DEPRECATED: The certificate subject to use when generating a self-
# signed token signing certificate. There is no reason to set this
# option unless you are requesting revocation lists in a non-
# production environment. Use a `[signing] certfile` issued from a
# trusted certificate authority instead. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
# Reason: `keystone-manage pki_setup` was deprecated in Mitaka and
# removed in Pike. These options remain for backwards compatibility.
#cert_subject = /C=US/ST=Unset/L=Unset/O=Unset/CN=www.example.com


[token]

#
# From keystone
#

# This is a list of external authentication mechanisms which should
# add token binding metadata to tokens, such as `kerberos` or `x509`.
# Binding metadata is enforced according to the `[token]
# enforce_token_bind` option. (list value)
#bind =

# DEPRECATED: This controls the token binding enforcement policy on
# tokens presented to keystone with token binding metadata (as
# specified by the `[token] bind` option). `disabled` completely
# bypasses token binding validation. `permissive` and `strict` do not
# require tokens to have binding metadata (but will validate it if
# present), whereas `required` will always demand tokens to having
# binding metadata. `permissive` will allow unsupported binding
# metadata to pass through without validation (usually to be validated
# at another time by another component), whereas `strict` and
# `required` will demand that the included binding metadata be
# supported by keystone. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
#enforce_token_bind = permissive

# The amount of time that a token should remain valid (in seconds).
# Drastically reducing this value may break "long-running" operations
# that involve multiple services to coordinate together, and will
# force users to authenticate with keystone more frequently.
# Drastically increasing this value will increase load on the `[token]
# driver`, as more tokens will be simultaneously valid. Keystone
# tokens are also bearer tokens, so a shorter duration will also
# reduce the potential security impact of a compromised token.
# (integer value)
# Minimum value: 0
# Maximum value: 9223372036854775807
expiration = {{ server.tokens.expiration }}

# Entry point for the token provider in the `keystone.token.provider`
# namespace. The token provider controls the token construction,
# validation, and revocation operations. Keystone includes `fernet`
# and `uuid` token providers. `uuid` tokens must be persisted (using
# the backend specified in the `[token] driver` option), but do not
# require any extra configuration or setup. `fernet` tokens do not
# need to be persisted at all, but require that you run `keystone-
# manage fernet_setup` (also see the `keystone-manage fernet_rotate`
# command). (string value)
#provider = fernet
{% if server.tokens.engine == 'fernet' %}
provider = fernet
{% endif %}

# DEPRECATED: Entry point for the token persistence backend driver in
# the `keystone.token.persistence` namespace. Keystone provides the
# `sql` driver.  The `sql` option (default) depends on the options in
# your `[database]` section. If you're using the `fernet` `[token]
# provider`, this backend will not be utilized to persist tokens at
# all. (string value)
# This option is deprecated for removal since P.
# Its value may be silently ignored in the future.
#driver = sql

# Toggle for caching token creation and validation data. This has no
# effect unless global caching is enabled. (boolean value)
#caching = true
caching = false

# The number of seconds to cache token creation and validation data.
# This has no effect unless both global and `[token] caching` are
# enabled. (integer value)
# Minimum value: 0
# Maximum value: 9223372036854775807
#cache_time = <None>

# This toggles support for revoking individual tokens by the token
# identifier and thus various token enumeration operations (such as
# listing all tokens issued to a specific user). These operations are
# used to determine the list of tokens to consider revoked. Do not
# disable this option if you're using the `kvs` `[revoke] driver`.
# (boolean value)
#revoke_by_id = true

# This toggles whether scoped tokens may be re-scoped to a new project
# or domain, thereby preventing users from exchanging a scoped token
# (including those with a default project scope) for any other token.
# This forces users to either authenticate for unscoped tokens (and
# later exchange that unscoped token for tokens with a more specific
# scope) or to provide their credentials in every request for a scoped
# token to avoid re-scoping altogether. (boolean value)
#allow_rescope_scoped_token = true

# This controls whether roles should be included with tokens that are
# not directly assigned to the token's scope, but are instead linked
# implicitly to other role assignments. (boolean value)
#infer_roles = true

# Enable storing issued token data to token validation cache so that
# first token validation doesn't actually cause full validation cycle.
# This option has no effect unless global caching and token caching
# are enabled. (boolean value)
#cache_on_issue = true

# This controls the number of seconds that a token can be retrieved
# for beyond the built-in expiry time. This allows long running
# operations to succeed. Defaults to two days. (integer value)
#allow_expired_window = 172800

hash_algorithm = {{ server.hash_algorithm }}


[tokenless_auth]

#
# From keystone
#

# The list of distinguished names which identify trusted issuers of
# client certificates allowed to use X.509 tokenless authorization. If
# the option is absent then no certificates will be allowed. The
# format for the values of a distinguished name (DN) must be separated
# by a comma and contain no spaces. Furthermore, because an individual
# DN may contain commas, this configuration option may be repeated
# multiple times to represent multiple values. For example,
# keystone.conf would include two consecutive lines in order to trust
# two different DNs, such as `trusted_issuer =
# CN=john,OU=keystone,O=openstack` and `trusted_issuer =
# CN=mary,OU=eng,O=abc`. (multi valued)
#trusted_issuer =

# The federated protocol ID used to represent X.509 tokenless
# authorization. This is used in combination with the value of
# `[tokenless_auth] issuer_attribute` to find a corresponding
# federated mapping. In a typical deployment, there is no reason to
# change this value. (string value)
#protocol = x509

# The name of the WSGI environment variable used to pass the issuer of
# the client certificate to keystone. This attribute is used as an
# identity provider ID for the X.509 tokenless authorization along
# with the protocol to look up its corresponding mapping. In a typical
# deployment, there is no reason to change this value. (string value)
#issuer_attribute = SSL_CLIENT_I_DN


[trust]

#
# From keystone
#

# DEPRECATED: Delegation and impersonation features using trusts can
# be optionally disabled. (boolean value)
# This option is deprecated for removal since Q.
# Its value may be silently ignored in the future.
# Reason: Disabling the trusts API is deprecated. This option will be
# removed in the next release and trusts will always be enabled.
#enabled = true

# Allows authorization to be redelegated from one user to another,
# effectively chaining trusts together. When disabled, the
# `remaining_uses` attribute of a trust is constrained to be zero.
# (boolean value)
#allow_redelegation = false

# Maximum number of times that authorization can be redelegated from
# one user to another in a chain of trusts. This number may be reduced
# further for a specific trust. (integer value)
#max_redelegation_count = 3

# Entry point for the trust backend driver in the `keystone.trust`
# namespace. Keystone only provides a `sql` driver, so there is no
# reason to change this unless you are providing a custom entry point.
# (string value)
#driver = sql


[unified_limit]

#
# From keystone
#

# Entry point for the unified limit backend driver in the
# `keystone.unified_limit` namespace. Keystone only provides a `sql`
# driver, so there's no reason to change this unless you are providing
# a custom entry point. (string value)
#driver = sql

# Toggle for unified limit caching. This has no effect unless global
# caching is enabled. In a typical deployment, there is no reason to
# disable this. (boolean value)
#caching = true

# Time to cache unified limit data, in seconds. This has no effect
# unless both global caching and `[unified_limit] caching` are
# enabled. (integer value)
#cache_time = <None>

# Maximum number of entities that will be returned in a role
# collection. This may be useful to tune if you have a large number of
# unified limits in your deployment. (integer value)
#list_limit = <None>

{% if server.extra_config is defined %}
{%- for section, params in server.extra_config.items() %}
[{{ section }}]
{%- for param, value in params.items() %}
{{ param }} = {{ value }}
{%- endfor %}
{%- endfor %}
{%- endif %}

{%- if server.cache is defined %}
[cache]
{%- set _data = server.cache %}
{%- include "oslo_templates/files/queens/oslo/_cache.conf" %}
{%- endif %}


[oslo_messaging_notifications]
{%- set _data = server.notification %}
{%- include "oslo_templates/files/queens/oslo/messaging/_notifications.conf" %}

{%- if server.message_queue is defined %}
{%- set _data = server.message_queue %}
{%- if _data.engine == 'rabbitmq' %}
    {%- set messaging_engine = 'rabbit' %}
{%- else %}
    {%- set messaging_engine = _data.engine %}
{%- endif %}
[oslo_messaging_{{ messaging_engine }}]
{%- if _data.ssl is defined and 'cacert_file' not in _data.get('ssl', {}).keys() %}{% do _data['ssl'].update({'cacert_file': server.cacert_file}) %}{% endif %}
{%- include "oslo_templates/files/queens/oslo/messaging/_" + messaging_engine + ".conf" %}
{%- endif %}

[oslo_policy]
{%- if server.policy is defined %}
{%- set _data = server.policy %}
{%- include "oslo_templates/files/queens/oslo/_policy.conf" %}
{%- endif %}

[database]
{%- set _data = server.database %}
{%- if _data.ssl is defined and 'cacert_file' not in _data.get('ssl', {}).keys() %}{% do _data['ssl'].update({'cacert_file': server.cacert_file}) %}{% endif %}
{%- include "oslo_templates/files/queens/oslo/_database.conf" %}

[cors]
{%- if server.cors is defined %}
{%- set _data = server.cors %}
{%- include "oslo_templates/files/queens/oslo/_cors.conf" %}
{%- endif %}

[healthcheck]
{%- if server.healthcheck is defined %}
{%- set _data = server.healthcheck %}
{%- include "oslo_templates/files/queens/oslo/_healthcheck.conf" %}
{%- endif %}

[oslo_middleware]
{%- set _data = server %}
{%- include "oslo_templates/files/queens/oslo/_middleware.conf" %}

[profiler]
{%- if server.profiler is defined %}
{%- set _data = server.profiler %}
{%- include "oslo_templates/files/queens/oslo/_osprofiler.conf" %}
{%- endif %}
