cookbook-openstack-block-st.../templates/default/cinder.conf.erb

1230 lines
46 KiB
Plaintext

<%= node["openstack"]["block-storage"]["custom_template_banner"] %>
[DEFAULT]
######## defined in cinder.openstack.common.cfg:CommonConfigOpts ########
debug=<%= node["openstack"]["block-storage"]["debug"] %>
#### (BoolOpt) Print debugging output
verbose=<%= node["openstack"]["block-storage"]["verbose"] %>
#### (BoolOpt) Print more verbose output
# lock_path
lock_path=<%= node["openstack"]["block-storage"]["lock_path"] %>
notification_driver=<%= node["openstack"]["block-storage"]["notification_driver"] %>
# log_config=<None>
#### (StrOpt) If this option is specified, the logging configuration file
#### specified is used and overrides any other logging options
#### specified. Please see the Python logging module
#### documentation for details on logging configuration files.
# log_format=%(asctime)s %(levelname)8s [%(name)s] %(message)s
#### (StrOpt) A logging.Formatter log message format string which may use
#### any of the available logging.LogRecord attributes. Default:
#### %default
# log_date_format=%Y-%m-%d %H:%M:%S
#### (StrOpt) Format string for %(asctime)s in log records. Default:
#### %default
# log_file=<None>
#### (StrOpt) (Optional) Name of log file to output to. If not set,
#### logging will go to stdout.
# log_dir=<None>
#### (StrOpt) (Optional) The directory to keep log files in (will be
#### prepended to --logfile)
# ================= Syslog Options ============================
<% if node["openstack"]["block-storage"]["syslog"]["use"] %>
log_config = /etc/openstack/logging.conf
<% else %>
log_file = /var/log/cinder/cinder.log
<% end %>
######## defined in cinder.flags ########
# connection_type=<None>
#### (StrOpt) Virtualization api connection type : libvirt, xenapi, or
#### fake
sql_connection=<%= @sql_connection %>
# sql_connection=sqlite:///$state_path/$sqlite_db
#### (StrOpt) The SQLAlchemy connection string used to connect to the
#### database
# sql_connection_debug=0
#### (IntOpt) Verbosity of SQL debugging information. 0=None,
#### 100=Everything
# api_paste_config=api-paste.ini
#### (StrOpt) File name for the paste.deploy config for cinder-api
# pybasedir=/usr/lib/python/site-packages
#### (StrOpt) Directory where the cinder python module is installed
# bindir=$pybasedir/bin
#### (StrOpt) Directory where cinder binaries are installed
state_path=<%= node["openstack"]["block-storage"]["volume"]["state_path"] %>
#### (StrOpt) Top-level directory for maintaining cinder's state
my_ip=<%= node["ipaddress"] %>
#### (StrOpt) ip address of this host
glance_host=<%= @glance_host %>
#### (StrOpt) default glance hostname or ip
glance_port=<%= @glance_port %>
#### (IntOpt) default glance port
glance_api_servers=<%= @glance_scheme %>://<%= @glance_host %>:<%= @glance_port %>
#### (ListOpt) A list of the glance api servers available to cinder
#### ([http|https]://[hostname|ip]:port)
glance_api_insecure=<%= node['openstack']['block-storage']['image']['glance_api_insecure'] %>
#### (BoolOpt) Allow to perform insecure SSL (https) requests to 'glance'
glance_ca_certificates_file=<%= node['openstack']['block-storage']['image']['glance_ca_certificates_file'] %>
#### (StrOpt) Location of ca certificates file to use for glance client requests
# glance_num_retries=0
#### (IntOpt) Number retries when downloading an image from glance
glance_api_version=<%= node['openstack']['block-storage']['image']['glance_api_version'] %>
#### (IntOpt) Version of the glance API to use
# scheduler_topic=cinder-scheduler
#### (StrOpt) the topic scheduler nodes listen on
# volume_topic=cinder-volume
#### (StrOpt) the topic volume nodes listen on
api_rate_limit=<%= node["openstack"]["block-storage"]["api"]["ratelimit"] %>
#### (BoolOpt) whether to rate limit the api
# osapi_volume_ext_list=
#### (ListOpt) Specify list of extensions to load when using
#### osapi_volume_extension option with
#### cinder.api.openstack.volume.contrib.select_extensions
# osapi_volume_extension=cinder.api.openstack.volume.contrib.standard_extensions
#### (MultiStrOpt) osapi volume extension to load
# osapi_compute_link_prefix=<None>
#### (StrOpt) Base URL that will be presented to users in links to the
#### OpenStack Compute API
# osapi_max_limit=1000
#### (IntOpt) the maximum number of items returned in a single response
#### from a collection resource
# sqlite_db=cinder.sqlite
#### (StrOpt) the filename to use with sqlite
# sqlite_synchronous=true
#### (BoolOpt) If passed, use synchronous mode for sqlite
# sql_idle_timeout=3600
#### (IntOpt) timeout before idle sql connections are reaped
# sql_max_retries=10
#### (IntOpt) maximum db connection retries during startup. (setting -1
#### implies an infinite retry count)
# sql_retry_interval=10
#### (IntOpt) interval between retries of opening a sql connection
# volume_manager=cinder.volume.manager.VolumeManager
#### (StrOpt) full class name for the Manager for volume
# scheduler_manager=cinder.scheduler.manager.SchedulerManager
#### (StrOpt) full class name for the Manager for scheduler
# host=cinder
#### (StrOpt) Name of this node. This can be an opaque identifier. It is
#### not necessarily a hostname, FQDN, or IP address.
storage_availability_zone=<%= node["openstack"]["block-storage"]["storage_availability_zone"] %>
#### (StrOpt) availability zone of this node
# memcached_servers=<None>
#### (ListOpt) Memcached servers or None for in process cache.
# volume_usage_audit_period=month
#### (StrOpt) time period to generate volume usages for. Time period must
#### be hour, day, month or year
# root_helper=cinder-rootwrap
#### (StrOpt) Deprecated: command to use for running commands as root
rootwrap_config=/etc/cinder/rootwrap.conf
#### (StrOpt) Path to the rootwrap configuration file to use for running
#### commands as root
# monkey_patch=false
#### (BoolOpt) Whether to log monkey patching
# monkey_patch_modules=
#### (ListOpt) List of modules/decorators to monkey patch
# service_down_time=60
#### (IntOpt) maximum time since last check-in for up service
# volume_api_class=cinder.volume.api.API
#### (StrOpt) The full class name of the volume API class to use
auth_strategy=keystone
#### (StrOpt) The strategy to use for auth. Supports noauth, keystone, and
#### deprecated.
######## defined in cinder.policy ########
# policy_file=policy.json
#### (StrOpt) JSON file representing policy
# policy_default_rule=default
#### (StrOpt) Rule checked when requested rule is not found
######## defined in cinder.quota ########
quota_volumes=<%= node["openstack"]["block-storage"]["quota_volumes"] %>
#### (IntOpt) number of volumes allowed per project
quota_gigabytes=<%= node["openstack"]["block-storage"]["quota_gigabytes"] %>
#### (IntOpt) number of volume gigabytes allowed per project
# reservation_expire=86400
#### (IntOpt) number of seconds until a reservation expires
# until_refresh=0
#### (IntOpt) count of reservations until usage is refreshed
# max_age=0
#### (IntOpt) number of seconds between subsequent usage refreshes
quota_driver=<%= node["openstack"]["block-storage"]["quota_driver"] %>
#### (StrOpt) default driver to use for quota checks
# Number of volume snapshots allowed per project (integer
# value)
quota_snapshots=<%= node["openstack"]["block-storage"]["quota_snapshots"] %>
# Whether snapshots count against GigaByte quota (boolean
# value)
no_snapshot_gb_quota=<%= node["openstack"]["block-storage"]["no_snapshot_gb_quota"] %>
# Enables or disables use of default quota class with default
# quota. (boolean value)
use_default_quota_class=<%= node["openstack"]["block-storage"]["use_default_quota_class"] %>
######## defined in cinder.service ########
# report_interval=10
#### (IntOpt) seconds between nodes reporting state to datastore
# periodic_interval=60
#### (IntOpt) seconds between running periodic tasks
# periodic_fuzzy_delay=60
#### (IntOpt) range of seconds to randomly delay when starting the
#### periodic task scheduler to reduce stampeding. (Disable by
#### setting to 0)
osapi_volume_listen=<%= @volume_api_bind_address %>
#### (StrOpt) IP address for OpenStack Volume API to listen
#### (IntOpt) port for os volume api to listen
osapi_volume_listen_port=<%= @volume_api_bind_port %>
# Number of workers for OpenStack Volume API service. The
# default is equal to the number of CPUs available. (integer
# value)
osapi_volume_workers=<%= node["openstack"]["block-storage"]["osapi_volume_workers"] %>
######## defined in cinder.test ########
# sqlite_clean_db=clean.sqlite
#### (StrOpt) File name of clean sqlite db
# fake_tests=true
#### (BoolOpt) should we use everything for testing
######## defined in cinder.api.auth ########
# use_forwarded_for=false
#### (BoolOpt) Treat X-Forwarded-For as the canonical remote address. Only
#### enable this if you have a sanitizing proxy.
######## defined in cinder.api.sizelimit ########
# osapi_max_request_body_size=114688
#### (IntOpt) Max size for body of a request
######## defined in cinder.common.deprecated ########
# fatal_deprecations=false
#### (BoolOpt) make deprecations fatal
######## defined in cinder.db.api ########
db_backend=sqlalchemy
#### (StrOpt) The backend to use for db
# enable_new_services=true
#### (BoolOpt) Services to be added to the available pool on create
volume_name_template=<%= node["openstack"]["block-storage"]["volume_name_template"] %>
#### (StrOpt) Template string to be used to generate volume names
snapshot_name_template=<%= node["openstack"]["block-storage"]["snapshot_name_template"] %>
#### (StrOpt) Template string to be used to generate snapshot names
######## defined in cinder.db.base ########
# db_driver=cinder.db
#### (StrOpt) driver to use for database access
######## defined in cinder.openstack.common.log ########
# logdir=<None>
### (StrOpt) Log output to a per-service log file in named directory
# logfile=<None>
#### (StrOpt) Log output to a named file
# use_stderr=true
#### (BoolOpt) Log output to standard error
# logfile_mode=0644
#### (StrOpt) Default file mode used when creating log files
# logging_context_format_string=%(asctime)s %(levelname)s %(name)s [%(request_id)s %(user_id)s %(project_id)s] %(instance)s%(message)s
#### (StrOpt) format string to use for log messages with context
# logging_default_format_string=%(asctime)s %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
#### (StrOpt) format string to use for log messages without context
# logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
#### (StrOpt) data to append to log format when level is DEBUG
# logging_exception_prefix=%(asctime)s %(process)d TRACE %(name)s %(instance)s
#### (StrOpt) prefix each line of exception output with this format
# default_log_levels=amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN
#### (ListOpt) list of logger=LEVEL pairs
# publish_errors=false
#### (BoolOpt) publish error events
# instance_format="[instance: %(uuid)s] "
#### (StrOpt) If an instance is passed with the log message, format it
#### like this
# instance_uuid_format="[instance: %(uuid)s] "
#### (StrOpt) If an instance UUID is passed with the log message, format
#### it like this
######## defined in cinder.openstack.common.notifier.api ########
#### (MultiStrOpt) Driver or drivers to handle sending notifications
# default_notification_level=INFO
#### (StrOpt) Default notification level for outgoing notifications
# default_publisher_id=$host
#### (StrOpt) Default publisher_id for outgoing notifications
######## defined in cinder.openstack.common.rpc ########
rpc_backend=<%= node["openstack"]["block_storage"]["rpc_backend"] %>
#### (StrOpt) The messaging module to use, defaults to kombu.
control_exchange=<%=node['openstack']['block-storage']['control_exchange']%>
#### (StrOpt) AMQP exchange to connect to if using RabbitMQ or Qpid
rpc_thread_pool_size=<%= node["openstack"]["block-storage"]["rpc_thread_pool_size"] %>
#### (IntOpt) Size of RPC thread pool
rpc_conn_pool_size=<%= node["openstack"]["block-storage"]["rpc_conn_pool_size"] %>
#### (IntOpt) Size of RPC connection pool
rpc_response_timeout=<%= node["openstack"]["block-storage"]["rpc_response_timeout"] %>
#### (IntOpt) Seconds to wait for a response from call or multicall
# rpc_cast_timeout=30
#### (IntOpt) Seconds to wait before a cast expires (TTL). Only supported
#### by impl_zmq.
# allowed_rpc_exception_modules=cinder.openstack.common.exception,nova.exception,cinder.exception
#### (ListOpt) Modules of exceptions that are permitted to be recreatedupon
#### receiving exception data from an rpc call.
# from oslo/messaging/_drivers/amqp.py
amqp_durable_queues=<%= node['openstack']['mq']['block-storage']['durable_queues'] %>
amqp_auto_delete=<%= node['openstack']['mq']['block-storage']['auto_delete'] %>
<% if @mq_service_type == "rabbitmq" %>
# fake_rabbit=false
#### (BoolOpt) If passed, use a fake RabbitMQ provider
######## defined in cinder.openstack.common.rpc.impl_kombu ########
<% if node["openstack"]["mq"]["block-storage"]["rabbit"]["use_ssl"] && node["openstack"]["mq"]["block-storage"]["rabbit"]["kombu_ssl_version"] %>
kombu_ssl_version=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["kombu_ssl_version"] %>
#### (StrOpt) SSL version to use (valid only if SSL enabled)
<% end -%>
# kombu_ssl_keyfile=
#### (StrOpt) SSL key file (valid only if SSL enabled)
# kombu_ssl_certfile=
#### (StrOpt) SSL cert file (valid only if SSL enabled)
# kombu_ssl_ca_certs=
#### (StrOpt) SSL certification authority file (valid only if SSL enabled)
<% if node["openstack"]["mq"]["block-storage"]["rabbit"]["ha"] -%>
rabbit_hosts=<%= @rabbit_hosts %>
#### (ListOpt) RabbitMQ HA cluster host:port pairs
# rabbit_durable_queues=false
#### (BoolOpt) use durable queues in RabbitMQ
rabbit_ha_queues=True
#### (BoolOpt) use H/A queues in RabbitMQ (x-ha-policy: all).You need to
#### wipe RabbitMQ database when changing this option.
<% else -%>
rabbit_host=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["host"] %>
#### (StrOpt) The RabbitMQ broker address where a single node is used
rabbit_port=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["port"] %>
#### (IntOpt) The RabbitMQ broker port where a single node is used
<% end -%>
rabbit_use_ssl=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["use_ssl"] %>
#### (BoolOpt) connect over SSL for RabbitMQ
rabbit_userid=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["userid"] %>
#### (StrOpt) the RabbitMQ userid
rabbit_password=<%= @mq_password %>
#### (StrOpt) the RabbitMQ password
rabbit_virtual_host=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["vhost"] %>
#### (StrOpt) the RabbitMQ virtual host
notification_topics=<%= node["openstack"]["mq"]["block-storage"]["rabbit"]["notification_topic"] %>
#### (ListOpt) AMQP topic used for openstack notifications
# rabbit_retry_interval=1
#### (IntOpt) how frequently to retry connecting with RabbitMQ
# rabbit_retry_backoff=2
#### (IntOpt) how long to backoff for between retries when connecting to
#### RabbitMQ
# rabbit_max_retries=0
#### (IntOpt) maximum retries with trying to connect to RabbitMQ (the
#### default of 0 implies an infinite retry count)
<% end %>
<% if @mq_service_type == "qpid" %>
##### QPID #####
######## defined in cinder.openstack.common.rpc.impl_qpid ########
qpid_hostname=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["host"] %>
#### (StrOpt) Qpid broker hostname
qpid_port=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["port"] %>
#### (StrOpt) Qpid broker port
qpid_username=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["username"] %>
#### (StrOpt) Username for qpid connection
qpid_password=<%= @mq_password %>
#### (StrOpt) Password for qpid connection
qpid_sasl_mechanisms=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["sasl_mechanisms"] %>
#### (StrOpt) Space separated list of SASL mechanisms to use for auth
qpid_reconnect=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["reconnect"] %>
#### (BoolOpt) Automatically reconnect
qpid_reconnect_timeout=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["reconnect_timeout"] %>
#### (IntOpt) Reconnection timeout in seconds
qpid_reconnect_limit=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["reconnect_limit"] %>
#### (IntOpt) Max reconnections before giving up
qpid_reconnect_interval_min=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["reconnect_interval_min"] %>
#### (IntOpt) Minimum seconds between reconnection attempts
qpid_reconnect_interval_max=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["reconnect_interval_max"] %>
#### (IntOpt) Maximum seconds between reconnection attempts
qpid_reconnect_interval=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["reconnect_interval"] %>
#### (IntOpt) Equivalent to setting max and min to the same value
qpid_heartbeat=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["heartbeat"] %>
#### (IntOpt) Seconds between connection keepalive heartbeats
qpid_protocol=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["protocol"] %>
#### (StrOpt) Transport to use, either 'tcp' or 'ssl'
qpid_tcp_nodelay=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["tcp_nodelay"] %>
#### (BoolOpt) Disable Nagle algorithm
qpid_topology_version=<%= node['openstack']['mq']['block-storage']['qpid']['topology_version'] %>
#### (IntOpt) See oslo/messaging/_drivers/impl_qpid.py for details
notification_topics=<%= node["openstack"]["mq"]["block-storage"]["qpid"]["notification_topic"] %>
#### (ListOpt) AMQP topic used for openstack notifications
<% end %>
######## defined in cinder.openstack.common.rpc.impl_zmq ########
# rpc_zmq_bind_address=*
#### (StrOpt) ZeroMQ bind address. Should be a wildcard (*), an ethernet
#### interface, or IP. The "host" option should point or resolve
#### to this address.
# rpc_zmq_matchmaker=cinder.openstack.common.rpc.matchmaker.MatchMakerLocalhost
#### (StrOpt) MatchMaker driver
# rpc_zmq_port=9501
#### (IntOpt) ZeroMQ receiver listening port
# rpc_zmq_port_pub=9502
#### (IntOpt) ZeroMQ fanout publisher port
# rpc_zmq_contexts=1
#### (IntOpt) Number of ZeroMQ contexts, defaults to 1
# rpc_zmq_ipc_dir=/var/run/openstack
#### (StrOpt) Directory for holding IPC sockets
# rpc_zmq_host=cinder
#### (StrOpt) Name of this node. Must be a valid hostname, FQDN, or IP
#### address. Must match "host" option, if running Nova.
######## defined in cinder.openstack.common.rpc.matchmaker ########
# matchmaker_ringfile=/etc/nova/matchmaker_ring.json
#### (StrOpt) Matchmaker ring file (JSON)
######## defined in cinder.scheduler.driver ########
# scheduler_host_manager=cinder.scheduler.host_manager.HostManager
#### (StrOpt) The scheduler host manager class to use
######## defined in cinder.scheduler.manager ########
# scheduler_driver=cinder.scheduler.simple.SimpleScheduler
#### (StrOpt) Default driver to use for the scheduler
######## defined in cinder.scheduler.simple ########
max_gigabytes=<%= node["openstack"]["block-storage"]["max_gigabytes"] %>
#### (IntOpt) maximum number of volume gigabytes to allow per host
######## defined in cinder.volume.api ########
# snapshot_same_host=true
#### (BoolOpt) Create volume from snapshot at the host where snapshot
#### resides
######## defined in cinder.volume.driver ########
<% if @enabled_drivers.include?("cinder.volume.drivers.lvm.LVMISCSIDriver") %>
volume_group=<%= node["openstack"]["block-storage"]["volume"]["volume_group"] %>
#### (StrOpt) Name for the VG that will contain exported volumes
volume_clear=<%= node["openstack"]["block-storage"]["volume"]["volume_clear"] %>
volume_clear_size=<%= node["openstack"]["block-storage"]["volume"]["volume_clear_size"] %>
<% end %>
# num_shell_tries=3
#### (IntOpt) number of times to attempt to run flakey shell commands
# num_iscsi_scan_tries=3
#### (IntOpt) number of times to rescan iSCSI target to find volume
# iscsi_num_targets=100
#### (IntOpt) Number of iscsi target ids per host
# iscsi_target_prefix=iqn.2010-10.org.openstack:
#### (StrOpt) prefix for iscsi volumes
iscsi_ip_address=<%= node["openstack"]["block-storage"]["volume"]["iscsi_ip_address"] %>
#### (StrOpt) The IP address where the iSCSI daemon is listening on
iscsi_port=<%= node["openstack"]["block-storage"]["volume"]["iscsi_port"] %>
#### (IntOpt) The port that the iSCSI daemon is listening on
<% if @enabled_drivers.include?("cinder.volume.drivers.rbd.RBDDriver") %>
#
# Options defined in cinder.volume.drivers.rbd
#
# The RADOS pool where rbd volumes are stored (string value)
rbd_pool=<%= node["openstack"]["block-storage"]["rbd"]["cinder"]["pool"] %>
# The RADOS client name for accessing rbd volumes - only set
# when using cephx authentication (string value)
rbd_user=<%= node["openstack"]["block-storage"]["rbd"]["user"] %>
# Path to the ceph configuration file (string value)
rbd_ceph_conf=<%= node["openstack"]["block-storage"]["rbd"]["conf_dir"] %>
# Flatten volumes created from snapshots to remove dependency
# from volume to snapshot (boolean value)
rbd_flatten_volume_from_snapshot=<%= node["openstack"]["block-storage"]["rbd"]["flatten_volume"] %>
# The libvirt uuid of the secret for the rbd_user volumes
# (string value)
rbd_secret_uuid=<%= node["openstack"]["block-storage"]["rbd"]["secret_uuid"] %>
# Maximum number of nested volume clones that are taken before
# a flatten occurs. Set to 0 to disable cloning. (integer
# value)
rbd_max_clone_depth=<%= node["openstack"]["block-storage"]["rbd"]["max_clone_depth"] %>
# Volumes will be chunked into objects of this size (in
# megabytes). (integer value)
rbd_store_chunk_size=<%= node["openstack"]["block-storage"]["rbd"]["chunk_size"] %>
# Timeout value (in seconds) used when connecting to ceph
# cluster. If value < 0, no timeout is set and default
# librados value is used. (integer value)
rados_connect_timeout=<%= node["openstack"]["block-storage"]["rbd"]["rados_timeout"] %>
<% end %>
# volume_tmp_dir=<None>
#### (StrOpt) where to store temporary image files if the volume driver
#### does not write them directly to the volume
######## defined in cinder.volume.iscsi ########
iscsi_helper=<%= node["openstack"]["block-storage"]["volume"]["iscsi_helper"] %>
#### (StrOpt) iscsi target user-land tool to use
volumes_dir=<%= node['openstack']['block-storage']['volume']['volumes_dir'] %>
#### (StrOpt) Volume configuration file storage directory
######## defined in cinder.volume.manager ########
volume_driver=<%= node["openstack"]["block-storage"]["volume"]["driver"] %>
#### (StrOpt) Driver to use for volume creation
# use_local_volumes=true
#### (BoolOpt) if True, will not discover local volumes
# volume_force_update_capabilities=false
#### (BoolOpt) if True will force update capabilities on each check
# Default volume type to use (string value)
default_volume_type=<%= node["openstack"]["block-storage"]["volume"]["default_volume_type"] %>
######## defined in cinder.volume.netapp ########
<% if @enabled_drivers.include?("cinder.volume.drivers.netapp.NetAppISCSIDriver") %>
netapp_wsdl_url=<%= node["openstack"]["block-storage"]["netapp"]["protocol"] %>://<%= node["openstack"]["block-storage"]["netapp"]["dfm_hostname"] %>:<%= node["openstack"]["block-storage"]["netapp"]["dfm_web_port"] %>/dfm.wsdl
#### (StrOpt) URL of the WSDL file for the DFM server
netapp_login=<%= node["openstack"]["block-storage"]["netapp"]["dfm_login"] %>
#### (StrOpt) User name for the DFM server
netapp_password=<%= node["openstack"]["block-storage"]["netapp"]["dfm_password"] %>
#### (StrOpt) Password for the DFM server
netapp_server_hostname=<%= node["openstack"]["block-storage"]["netapp"]["dfm_hostname"] %>
#### (StrOpt) Hostname for the DFM server
netapp_server_port=<%= node["openstack"]["block-storage"]["netapp"]["dfm_port"] %>
#### (IntOpt) Port number for the DFM server
netapp_storage_service=<%= node["openstack"]["block-storage"]["netapp"]["storage_service"] %>
#### (StrOpt) Storage service to use for provisioning (when
#### volume_type=None)
# netapp_storage_service_prefix=<None>
#### (StrOpt) Prefix of storage service name to use for provisioning
#### (volume_type name will be appended)
# netapp_vfiler=<None>
#### (StrOpt) Vfiler to use for provisioning
<% end %>
######## defined in cinder.volume.netapp_nfs ########
<% if @enabled_drivers.include?("cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver") %>
nfs_mount_point_base=<%= node["openstack"]["block-storage"]["nfs"]["mount_point_base"] %>
<% node["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"].each do |h| %>
netapp_server_hostname=<%= h %>
<% end %>
netapp_server_port=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_port"] %>
netapp_login=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_login"] %>
netapp_password=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_password"] %>
nfs_shares_config=<%= node["openstack"]["block-storage"]["nfs"]["shares_config"] %>
nfs_disk_util=<%= node["openstack"]["block-storage"]["nfs"]["nfs_disk_util"] %>
nfs_sparsed_volumes=<%= node["openstack"]["block-storage"]["nfs"]["nfs_sparsed_volumes"] %>
<% end %>
######## defined in cinder.volume.nexenta.volume ########
# nexenta_host=
#### (StrOpt) IP address of Nexenta SA
# nexenta_rest_port=2000
#### (IntOpt) HTTP port to connect to Nexenta REST API server
# nexenta_rest_protocol=auto
#### (StrOpt) Use http or https for REST connection (default auto)
# nexenta_user=admin
#### (StrOpt) User name to connect to Nexenta SA
# nexenta_password=nexenta
#### (StrOpt) Password to connect to Nexenta SA
# nexenta_iscsi_target_portal_port=3260
#### (IntOpt) Nexenta target portal port
# nexenta_volume=cinder
#### (StrOpt) pool on SA that will hold all volumes
# nexenta_target_prefix=iqn.1986-03.com.sun:02:cinder-
#### (StrOpt) IQN prefix for iSCSI targets
# nexenta_target_group_prefix=cinder/
#### (StrOpt) prefix for iSCSI target groups on SA
# nexenta_blocksize=
#### (StrOpt) block size for volumes (blank=default,8KB)
# nexenta_sparse=false
#### (BoolOpt) flag to create sparse volumes
######## defined in cinder.volume.nfs ########
<% if @enabled_drivers.include?("cinder.volume.drivers.ibm.ibmnas.IBMNAS_NFSDriver") %>
nfs_shares_config=<%= node["openstack"]["block-storage"]["ibmnas"]["shares_config"] %>
#### (StrOpt) File with the list of available nfs shares
nfs_mount_point_base=<%= node["openstack"]["block-storage"]["ibmnas"]["mount_point_base"] %>
#### (StrOpt) Base dir where nfs expected to be mounted
nfs_sparsed_volumes=<%= node["openstack"]["block-storage"]["ibmnas"]["nfs_sparsed_volumes"] %>
#### (BoolOpt) Create volumes as sparsed files which take no space.If set
#### to False volume is created as regular file.In such case
#### volume creation takes a lot of time.
<% else %>
# nfs_shares_config=<None>
#### (StrOpt) File with the list of available nfs shares
# nfs_mount_point_base=$state_path/mnt
#### (StrOpt) Base dir where nfs expected to be mounted
# nfs_disk_util=df
#### (StrOpt) Use du or df for free space calculation
# nfs_sparsed_volumes=true
#### (BoolOpt) Create volumes as sparsed files which take no space.If set
#### to False volume is created as regular file.In such case
#### volume creation takes a lot of time.
<% end %>
######## defined in cinder.volume.san ########
<% if @enabled_drivers.include?("cinder.volume.drivers.ibm.storwize_svc.StorwizeSVCDriver") %>
san_ip=<%= node["openstack"]["block-storage"]["storwize"]["san_ip"] %>
#### (StrOpt) IP address of SAN controller
<% if node['openstack']['block-storage']['storwize']['san_private_key'].to_s.empty? %>
san_login=<%= node["openstack"]["block-storage"]["storwize"]["san_login"] %>
#### (StrOpt) Username for SAN controller
san_password=<%= @storwize_pass %>
#### (StrOpt) Password for SAN controller
<% end %>
san_private_key=<%= node["openstack"]["block-storage"]["storwize"]["san_private_key"] %>
#### (StrOpt) Filename of private key to use for SSH authentication
<% end %>
<% if @enabled_drivers.include?("cinder.volume.drivers.solidfire.SolidFire") %>
######## defined in cinder.volume.solidfire ########
sf_emulate_512=<%= node["openstack"]["block-storage"]["solidfire"]["sf_emulate"] %>
#### (BoolOpt) Set 512 byte emulation on volume creation;
san_ip=<%= node["openstack"]["block-storage"]["solidfire"]["san_ip"] %>
# #### (StrOpt) IP address of SolidFire MVIP
san_login=<%= node["openstack"]["block-storage"]["solidfire"]["san_login"] %>
#### (StrOpt) Username for SF Cluster Admin
san_password=<%= @solidfire_pass %>
#### (StrOpt) Password for SF Cluster Admin
<% unless node["openstack"]["block-storage"]["solidfire"]['iscsi_ip_prefix'].nil? %>
iscsi_ip_prefix=<%= node["openstack"]["block-storage"]["solidfire"]["iscsi_ip_prefix"] %>
<% end %>
<% end %>
<% if @enabled_drivers.include?("cinder.volume.drivers.ibm.flashsystem.FlashSystemDriver") -%>
######## defined in cinder.volume.drivers.ibm.flashsystem.FlashSystemDriver ########
san_ip=<%= node["openstack"]["block-storage"]["flashsystem"]["san_ip"] %>
#### (StrOpt) IP address of FlashSystem Cluster Node
san_login=<%= node["openstack"]["block-storage"]["flashsystem"]["san_login"] %>
#### (StrOpt) Username for FlashSystem Cluster Admin
san_password=<%= @flashsystem_pass %>
#### (StrOpt) Password for FlashSystem Cluster Admin
flashsystem_connection_protocol=<%= node["openstack"]["block-storage"]["flashsystem"]["flashsystem_connection_protocol"] %>
#### (StrOpt) Connection protocol (FC only)
flashsystem_multipath_enabled=<%= node["openstack"]["block-storage"]["flashsystem"]["flashsystem_multipath_enabled"] %>
#### (BoolOpt) Multipath flag (FC only)
flashsystem_multihostmap_enabled=<%= node["openstack"]["block-storage"]["flashsystem"]["flashsystem_multihostmap_enabled"] %>
#### (BoolOpt) Multi host mapping flag
<% end -%>
#### (BoolOpt) Allow tenants to specify QOS on create
<% if @enabled_drivers.include?("cinder.volume.drivers.ibm.storwize_svc.StorwizeSVCDriver") %>
######## defined in cinder.volume.storwize_svc ########
storwize_svc_volpool_name=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_volpool_name"] %>
#### (StrOpt) Storage system storage pool for volumes
storwize_svc_vol_rsize=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_rsize"] %>
#### (StrOpt) Storage system space-efficiency parameter for volumes
storwize_svc_vol_warning=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_warning"] %>
#### (StrOpt) Storage system threshold for volume capacity warnings
storwize_svc_vol_autoexpand=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_autoexpand"] %>
#### (BoolOpt) Storage system autoexpand parameter for volumes (True/False)
storwize_svc_vol_grainsize=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_grainsize"] %>
#### (StrOpt) Storage system grain size parameter for volumes
#### (32/64/128/256)
storwize_svc_vol_compression=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_compression"] %>
#### (BoolOpt) Storage system compression option for volumes
storwize_svc_vol_easytier=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_easytier"] %>
#### (BoolOpt) Enable Easy Tier for volumes
# The I/O group in which to allocate volumes (integer value)
storwize_svc_vol_iogrp=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_iogrp"] %>
storwize_svc_flashcopy_timeout=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_flashcopy_timeout"] %>
#### (StrOpt) Maximum number of seconds to wait for FlashCopy to be
#### prepared. Maximum value is 600 seconds (10 minutes).
# Connection protocol (iSCSI/FC) (string value)
storwize_svc_connection_protocol=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_connection_protocol"] %>
<% if node["openstack"]["block-storage"]["storwize"]["storwize_svc_connection_protocol"] == "iSCSI" %>
# Configure CHAP authentication for iSCSI connections
# (Default: Enabled) (boolean value)
storwize_svc_iscsi_chap_enabled=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_iscsi_chap_enabled"] %>
<% else %>
# Connect with multipath (FC only; iSCSI multipath is
# controlled by Nova) (boolean value)
storwize_svc_multipath_enabled=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_multipath_enabled"] %>
<% end %>
# Allows vdisk to multi host mapping (boolean value)
storwize_svc_multihostmap_enabled=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_multihostmap_enabled"] %>
# Allow tenants to specify QOS on create (boolean value)
storwize_svc_allow_tenant_qos=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_allow_tenant_qos"] %>
<% unless node["openstack"]["block-storage"]["storwize"]["storwize_svc_stretched_cluster_partner"].nil? %>
# If operating in stretched cluster mode, specify the name of
# # the pool in which mirrored copies are stored.
# (Default: Null) (string value)
storwize_svc_stretched_cluster_partner=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_stretched_cluster_partner"] %>
<% end %>
<% end %>
<% if @enabled_drivers.include?("cinder.volume.drivers.emc.emc_smis_iscsi.EMCSMISISCSIDriver") %>
iscsi_target_prefix=<%= node["openstack"]["block-storage"]["emc"]["iscsi_target_prefix"] %>
cinder_emc_config_file=<%= node["openstack"]["block-storage"]["emc"]["cinder_emc_config_file"] %>
<% end %>
<% if @enabled_drivers.include?("cinder.volume.drivers.ibm.ibmnas.IBMNAS_NFSDriver") %>
######## defined in cinder.volume.ibm.ibmnas ########
nas_ip=<%= node["openstack"]["block-storage"]["ibmnas"]["nas_ip"] %>
#### (StrOpt) IP address of IBMNAS storage
nas_login=<%= node["openstack"]["block-storage"]["ibmnas"]["nas_login"] %>
#### (StrOpt) Username for IBMNAS Cluster
nas_password=<%= @ibmnas_pass %>
#### (StrOpt) Password for IBMNAS Cluster
nas_ssh_port=<%= node["openstack"]["block-storage"]["ibmnas"]["nas_ssh_port"] %>
#### (StrOpt) IP address of IBMNAS storage
ibmnas_platform_type=<%= node["openstack"]["block-storage"]["ibmnas"]["ibmnas_platform_type"] %>
#### (StrOpt) IBMNAS platform type to be used as backend storage
<% end %>
######## defined in cinder.volume.xiv ########
# xiv_proxy=xiv_openstack.nova_proxy.XIVNovaProxy
#### (StrOpt) Proxy driver
######## defined in cinder.volume.zadara ########
# zadara_vpsa_ip=<None>
#### (StrOpt) Management IP of Zadara VPSA
# zadara_vpsa_port=<None>
#### (StrOpt) Zadara VPSA port number
# zadara_vpsa_use_ssl=false
#### (BoolOpt) Use SSL connection
# zadara_user=<None>
#### (StrOpt) User name for the VPSA
# zadara_password=<None>
#### (StrOpt) Password for the VPSA
# zadara_vpsa_poolname=<None>
#### (StrOpt) Name of VPSA storage pool for volumes
# zadara_default_cache_policy=write-through
#### (StrOpt) Default cache policy for volumes
# zadara_default_encryption=NO
#### (StrOpt) Default encryption policy for volumes
# zadara_default_striping_mode=simple
#### (StrOpt) Default striping mode for volumes
# zadara_default_stripesize=64
#### (StrOpt) Default stripe size for volumes
# zadara_vol_name_template=OS_%s
#### (StrOpt) Default template for VPSA volume names
# zadara_vpsa_auto_detach_on_delete=true
#### (BoolOpt) Automatically detach from servers on volume delete
# zadara_vpsa_allow_nonexistent_delete=true
#### (BoolOpt) Don't halt on deletion of non-existing volumes
<% if @enabled_drivers.include?('cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver') %>
#
# Options defined in cinder.volume.drivers.vmware.vmdk
#
# IP address for connecting to VMware ESX/VC server. (string
# value)
vmware_host_ip = <%= node['openstack']['block-storage']['vmware']['vmware_host_ip'] %>
# Username for authenticating with VMware ESX/VC server.
# (string value)
vmware_host_username = <%= node['openstack']['block-storage']['vmware']['vmware_host_username'] %>
# Password for authenticating with VMware ESX/VC server.
# (string value)
vmware_host_password = <%= @vmware_host_pass %>
<% if node['openstack']['block-storage']['vmware']['vmware_wsdl_location'] -%>
# Optional VIM service WSDL Location e.g
# http://<server>/vimService.wsdl. Optional over-ride to
# default location for bug work-arounds. (string value)
vmware_wsdl_location = <%= node['openstack']['block-storage']['vmware']['vmware_wsdl_location'] %>
<% end %>
# Number of times VMware ESX/VC server API must be retried
# upon connection related issues. (integer value)
vmware_api_retry_count = <%= node['openstack']['block-storage']['vmware']['vmware_api_retry_count'] %>
# The interval (in seconds) for polling remote tasks invoked
# on VMware ESX/VC server. (integer value)
vmware_task_poll_interval = <%= node['openstack']['block-storage']['vmware']['vmware_task_poll_interval'] %>
# Name for the folder in the VC datacenter that will contain
# cinder volumes. (string value)
vmware_volume_folder = <%= node['openstack']['block-storage']['vmware']['vmware_volume_folder'] %>
# Timeout in seconds for VMDK volume transfer between Cinder
# and Glance. (integer value)
vmware_image_transfer_timeout_secs = <%= node['openstack']['block-storage']['vmware']['vmware_image_transfer_timeout_secs'] %>
# Max number of objects to be retrieved per batch. Query
# results will be obtained in batches from the server and not
# in one shot. Server may still limit the count to something
# less than the configured value. (integer value)
vmware_max_objects_retrieval = <%= node['openstack']['block-storage']['vmware']['vmware_max_objects_retrieval'] %>
<% end %>
<% if @enabled_drivers.include?('cinder.volume.drivers.ibm.gpfs.GPFSDriver') %>
######## defined in cinder.openstack.volume.drivers.ibm.gpfs ########
# Specifies the path of the GPFS directory where Block Storage
# volume and snapshot files are stored. (string value)
gpfs_mount_point_base = <%= node["openstack"]["block-storage"]["gpfs"]["gpfs_mount_point_base"] %>
<% if node['openstack']['block-storage']['gpfs']['gpfs_images_dir'] %>
# Specifies the path of the Image service repository in GPFS.
# Leave undefined if not storing images in GPFS. (string
# value)
gpfs_images_dir = <%= node['openstack']['block-storage']['gpfs']['gpfs_images_dir'] %>
# Specifies the type of image copy to be used. Set this when
# the Image service repository also uses GPFS so that image
# files can be transferred efficiently from the Image service
# to the Block Storage service. There are two valid values:
# "copy" specifies that a full copy of the image is made;
# "copy_on_write" specifies that copy-on-write optimization
# strategy is used and unmodified blocks of the image file are
# shared efficiently. (string value)
gpfs_images_share_mode = <%= node['openstack']['block-storage']['gpfs']['gpfs_images_share_mode'] %>
<% end %>
# Specifies an upper limit on the number of indirections
# required to reach a specific block due to snapshots or
# clones. A lengthy chain of copy-on-write snapshots or
# clones can have a negative impact on performance, but
# improves space utilization. 0 indicates unlimited clone
# depth. (integer value)
gpfs_max_clone_depth = <%= node['openstack']['block-storage']['gpfs']['gpfs_max_clone_depth'] %>
# Specifies that volumes are created as sparse files which
# initially consume no space. If set to False, the volume is
# created as a fully allocated file, in which case, creation
# may take a significantly longer time. (boolean value)
gpfs_sparse_volumes = <%= node['openstack']['block-storage']['gpfs']['gpfs_sparse_volumes'] %>
# Specifies the storage pool that volumes are assigned to. By
# default, the system storage pool is used. (string value)
gpfs_storage_pool = <%= node['openstack']['block-storage']['gpfs']['gpfs_storage_pool'] %>
<% end %>
<% unless @multi_backend_sections.empty? %>
enabled_backends = <%= @multi_backend_sections.keys.join(',') %>
<% end %>
# Misc options
<% if node["openstack"]["block-storage"]["misc_cinder"] %>
<% node["openstack"]["block-storage"]["misc_cinder"].each do |m| %>
<%= m %>
<% end %>
<% end %>
# Multi-backend support, add new sections here
# Make sure these sections are at the bottom of conf file
<% unless @multi_backend_sections.empty? %>
<% @multi_backend_sections.each do |sec, opts| %>
[<%= sec %>]
<% opts.each do |optline| %>
<%= optline %>
<% end %>
<% end %>
<% end %>
[keystone_authtoken]
#
# Options defined in keystonemiddleware.auth_token
#
# Complete public Identity API endpoint (string value)
auth_uri = <%= @auth_uri %>
# Complete admin Identity API endpoint. This should specify
# the unversioned root endpoint e.g. https://localhost:35357/
# (string value)
identity_uri = <%= @identity_uri %>
# API version of the admin Identity API endpoint (string
# value)
<% if node['openstack']['block-storage']['api']['auth']['version'] != 'v2.0' %>
auth_version = <%= node['openstack']['block-storage']['api']['auth']['version'] %>
<% end %>
# Do not handle authorization requests within the middleware,
# but delegate the authorization decision to downstream WSGI
# components (boolean value)
#delay_auth_decision=false
# Request timeout value for communicating with Identity API
# server. (boolean value)
#http_connect_timeout=<None>
# How many times are we trying to reconnect when communicating
# with Identity API Server. (integer value)
#http_request_max_retries=3
# This option is deprecated and may be removed in a future
# release. Single shared secret with the Keystone
# configuration used for bootstrapping a Keystone
# installation, or otherwise bypassing the normal
# authentication process. This option should not be used, use
# `admin_user` and `admin_password` instead. (string value)
#admin_token=<None>
# Keystone account username (string value)
admin_user = <%= node["openstack"]["block-storage"]["service_user"] %>
# Keystone account password (string value)
admin_password = <%= @service_pass %>
# Keystone service account tenant name to validate user tokens
# (string value)
admin_tenant_name = <%= node["openstack"]["block-storage"]["service_tenant_name"] %>
# Env key for the swift cache (string value)
#cache=<None>
# Required if Keystone server requires client certificate
# (string value)
#certfile=<None>
# Required if Keystone server requires client certificate
# (string value)
#keyfile=<None>
# A PEM encoded Certificate Authority to use when verifying
# HTTPs connections. Defaults to system CAs. (string value)
#cafile=<None>
<% if node['openstack']['block-storage']['api']['auth']['cafile'] %>
cafile = <%= node['openstack']['block-storage']['api']['auth']['cafile'] %>
<% end %>
# Verify HTTPS connections. (boolean value)
#insecure=false
insecure = <%= node['openstack']['block-storage']['api']['auth']['insecure'] %>
# Directory used to cache files related to PKI tokens (string
# value)
signing_dir = <%= node["openstack"]["block-storage"]["api"]["auth"]["cache_dir"] %>
# Optionally specify a list of memcached server(s) to use for
# caching. If left undefined, tokens will instead be cached
# in-process. (list value)
# Deprecated group/name - [DEFAULT]/memcache_servers
#memcached_servers=<None>
<% if node['openstack']['block-storage']['api']['auth']['memcached_servers'] %>
memcached_servers = <%= node['openstack']['block-storage']['api']['auth']['memcached_servers'] %>
<% end %>
# In order to prevent excessive effort spent validating
# tokens, the middleware caches previously-seen tokens for a
# configurable duration (in seconds). Set to -1 to disable
# caching completely. (integer value)
#token_cache_time=300
# Determines the frequency at which the list of revoked tokens
# is retrieved from the Identity service (in seconds). A high
# number of revocation events combined with a low cache
# duration may significantly reduce performance. (integer
# value)
#revocation_cache_time=10
# (optional) if defined, indicate whether token data should be
# authenticated or authenticated and encrypted. Acceptable
# values are MAC or ENCRYPT. If MAC, token data is
# authenticated (with HMAC) in the cache. If ENCRYPT, token
# data is encrypted and authenticated in the cache. If the
# value is not one of these options or empty, auth_token will
# raise an exception on initialization. (string value)
#memcache_security_strategy=<None>
<% if node['openstack']['block-storage']['api']['auth']['memcache_security_strategy'] %>
memcache_security_strategy = <%= node['openstack']['block-storage']['api']['auth']['memcache_security_strategy'] %>
<% end %>
# (optional, mandatory if memcache_security_strategy is
# defined) this string is used for key derivation. (string
# value)
#memcache_secret_key=<None>
<% if node['openstack']['block-storage']['api']['auth']['memcache_secret_key'] %>
memcache_secret_key = <%= node['openstack']['block-storage']['api']['auth']['memcache_secret_key'] %>
<% end %>
# (optional) indicate whether to set the X-Service-Catalog
# header. If False, middleware will not ask for service
# catalog on token validation and will not set the X-Service-
# Catalog header. (boolean value)
#include_service_catalog=true
# Used to control the use and type of token binding. Can be
# set to: "disabled" to not check token binding. "permissive"
# (default) to validate binding information if the bind type
# is of a form known to the server and ignore it if not.
# "strict" like "permissive" but if the bind type is unknown
# the token will be rejected. "required" any form of token
# binding is needed to be allowed. Finally the name of a
# binding method that must be present in tokens. (string
# value)
#enforce_token_bind=permissive
# If true, the revocation list will be checked for cached
# tokens. This requires that PKI tokens are configured on the
# Keystone server. (boolean value)
#check_revocations_for_cached=false
# Hash algorithms to use for hashing PKI tokens. This may be a
# single algorithm or multiple. The algorithms are those
# supported by Python standard hashlib.new(). The hashes will
# be tried in the order given, so put the preferred one first
# for performance. The result of the first hash will be stored
# in the cache. This will typically be set to multiple values
# only while migrating from a less secure algorithm to a more
# secure one. Once all the old tokens are expired this option
# should be set to a single value for better performance.
# (list value)
#hash_algorithms=md5
hash_algorithms = <%= node['openstack']['block-storage']['api']['auth']['hash_algorithms'] %>