# 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

    [database]
    # The SQLAlchemy connection string used to connect to the
    # database (string value)
    connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

Options can have different types for values. The comments in the sample config files always mention these and the tables mention the `Opt` value as first item like `(BoolOpt) Toggle...`. The following types are used by OpenStack:

boolean value (`BoolOpt`)

  Enables or disables an option. The allowed values are `true` and `false`.

      # Enable the experimental use of database reconnect on
      # connection lost (boolean value)
      use_db_reconnect = false

floating point value (`FloatOpt`)

  A floating point number like `0.25` or `1000`.

      # Sleep time in seconds for polling an ongoing async task
      # (floating point value)
      task_poll_interval = 0.5

integer value (`IntOpt`)

  An integer number is a number without fractional components, like `0` or `42`.

      # The port which the OpenStack Compute service listens on.
      # (integer value)
      compute_port = 8774

IP address (`IPOpt`)

  An IPv4 or IPv6 address.

      # Address to bind the server. Useful when selecting a particular network
      # interface. (ip address value)
      bind_host = 0.0.0.0

key-value pairs (`DictOpt`)

  A key-value pairs, also known as a dictionary. The key value pairs are separated by commas and a colon is used to separate key and value. Example: `key1:value1,key2:value2`.

      # Parameter for l2_l3 workflow setup. (dict value)
      l2_l3_setup_params = data_ip_address:192.168.200.99, \
         data_ip_mask:255.255.255.0,data_port:1,gateway:192.168.200.1,ha_port:2

list value (`ListOpt`)

  Represents values of other types, separated by commas. As an example, the following sets `allowed_rpc_exception_modules` to a list containing the four elements `oslo.messaging.exceptions`, `nova.exception`, `cinder.exception`, and `exceptions`:

      # 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

multi valued (`MultiStrOpt`)

  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

port value (`PortOpt`)

  A TCP/IP port number. Ports can range from 1 to 65535.

      # Port to which the UDP socket is bound. (port value)
      # Minimum value: 1
      # Maximum value: 65535
      udp_port = 4952

string value (`StrOpt`)

  Strings can be optionally enclosed with single or double quotes.

      # The format for an instance that is passed with the log message.
      # (string value)
      instance_format = "[instance: %(uuid)s] "

## Sections

Configuration options are grouped by section. Most configuration files support 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.

## 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, escape the `$` with `$$` or `\$`. 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 https://docs.python.org/2/library/string.html#template-strings and PEP 292.

## Whitespace

To include whitespace in a configuration value, use a quoted string. For example:

    ldap_dns_password='a password with spaces'

## Define an alternate location for a config file

Most services 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.

this page last updated: 2026-07-14 13:15:13

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.

found an error? report a bug