OpenStack configuration overview
OpenStack is a collection of open source project components that enable setting up cloud services. Each component uses similar configuration techniques and a common framework for INI file options.
This guide pulls together multiple references and configuration options for the following OpenStack components:
OpenStack Block Storage
OpenStack Compute
OpenStack Dashboard
Database Service
OpenStack Identity
OpenStack Image Service
OpenStack Networking
OpenStack Object Storage
Telemetry
Orchestration
1. Configuration file format
OpenStack uses the INI
file format for configuration files. An INI file is a simple text file that specifies options as key=value pairs, grouped into sections. The DEFAULT section contains most of the configuration options. Lines starting with a hash sign (#) are comment lines. For example:
[DEFAULT] # Print debugging output (set logging level to DEBUG instead # of default WARNING level). (boolean value) debug = true # Print more verbose output (set logging level to INFO instead # of default WARNING level). (boolean value) verbose = true [database] # The SQLAlchemy connection string used to connect to the # database (string value) connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone
Options can have different type for values. The comments in the sample config files always mention these. The following types are used by OpenStack:
- boolean value
Enables or disables an option. The allowed values are
trueandfalse.# Enable the experimental use of database reconnect on # connection lost (boolean value) use_db_reconnect = false
- floating point value
A floating point number like
0.25or1000.# Sleep time in seconds for polling an ongoing async task # (floating point value) task_poll_interval = 0.5
- integer value
An integer number is a number without fractional components, like
0or42.# The port which the OpenStack Compute service listens on. # (integer value) compute_port = 8774
- list value
Represents values of other types, separated by commas. As an example, the following sets
allowed_rpc_exception_modulesto a list containing the four elementsoslo.messaging.exceptions,nova.exception,cinder.exception, andexceptions:# Modules of exceptions that are permitted to be recreated # upon receiving exception data from an rpc call. (list value) allowed_rpc_exception_modules = oslo.messaging.exceptions,nova.exception,cinder.exception,exceptions
- multi valued
A multi-valued option is a string value and can be given more than once, all values will be used.
# Driver or drivers to handle sending notifications. (multi # valued) notification_driver = nova.openstack.common.notifier.rpc_notifier notification_driver = ceilometer.compute.nova_notifier
- string value
Strings can be optionally enclosed with single or double quotes.
# onready allows you to send a notification when the process # is ready to serve. For example, to have it notify using # systemd, one could set shell command: "onready = systemd- # notify --ready" or a module with notify() method: "onready = # keystone.common.systemd". (string value) onready = systemd-notify --ready # If an instance is passed with the log message, format it # like this (string value) instance_format = "[instance: %(uuid)s] "
1.1. Sections
Configuration options are grouped by section. Most configuration file supports at least the following sections:
[DEFAULT]Contains most configuration options. If the documentation for a configuration option does not specify its section, assume that it appears in this section.
[database]Configuration options for the database that stores the state of the OpenStack service.
1.2. Substitution
The configuration file supports variable substitution. After you set a configuration option, it can be referenced in later configuration values when you precede it with a $, like $OPTION.
The following example uses the values of rabbit_host and rabbit_port to define the value of the rabbit_hosts option, in this case as controller:5672.
# The RabbitMQ broker address where a single node is used. # (string value) rabbit_host = controller # The RabbitMQ broker port where a single node is used. # (integer value) rabbit_port = 5672 # RabbitMQ HA cluster host:port pairs. (list value) rabbit_hosts = $rabbit_host:$rabbit_port
To avoid substitution, use $$, it is replaced by a single $. For example, if your LDAP DNS password is $xkj432, specify it, as follows:
ldap_dns_password = $$xkj432
The code uses the Python string.Template.safe_substitute() method to implement variable substitution. For more details on how variable substitution is resolved, see http://docs.python.org/2/library/string.html#template-strings and PEP 292.
1.3. Whitespace
To include whitespace in a configuration value, use a quoted string. For example:
ldap_dns_passsword='a password with spaces'
1.4. Define an alternate location for a config file
Most services and the and the *-manage command-line clients load the configuration file. To define an alternate location for the configuration file, pass the --config-file CONFIG_FILE parameter when you start a service or call a *-manage command.