Modularize configuration files

date:2015-05-08 00:00
tags:config, configuration, modularize, modular

Modularize deployment configuration files to simplify the configuration process.

Blueprint:

https://blueprints.launchpad.net/openstack-ansible/+spec/modularize-config

Problem description

Deployment configuration primarily occurs in a rather monolithic openstack_user_config.yml file. Although adding documentation to this file eases understanding of the various levels and options, it also increases the size and apparant complexity, especially for larger deployments. With the addition of swift, the configuration structure already supports configuration files in the conf.d directory. Splitting the main monolithic configuration file into smaller files containing similar components helps overall organization, especially for larger deployments.

Proposed change

Similar to swift, modularize similar sections of configuration files, particularly openstack_user_config.yml, into the following separate files in the conf.d directory.

  • hosts.yml

    • Includes configuration for target hosts with simple options. For example, repo_hosts typically contains only a list of hosts. In comparison, storage_hosts requires significantly more options and should therefore use a separate file.
    • Contains the following levels:
      • shared-infra_hosts
      • repo_hosts
      • os-infra_hosts
      • identity_hosts
      • network_hosts
      • compute_hosts
      • storage-infra_hosts
      • swift_proxy-hosts
      • log_hosts

    Note

    For consistency, consider changing swift_proxy-hosts to swift-proxy_hosts and swift_hosts to swift-storage_hosts.

  • networking.yml

    • Includes host networks, IP address blacklist for inventory generator, load balancer options, and provider networks.
    • Contains the following levels:
      • cidr_networks
      • used_ips
      • provider_networks (from global_overrides)
      • internal_lb_vip_address, external_lb_vip_address, management_bridge, and tunnel_bridge (from global_overrides)
  • cinder_storage_hosts.yml

    • Includes configuration for cinder storage target hosts with complex options for backends.
    • Contains the following level: * storage_hosts
  • swift_storage_hosts.yml

    • Includes configuration for swift storage target hosts with complex options.
    • Contains the following levels: * swift (from global_overrides) * swift_hosts

Alternatives

Use a different strategy to modularize the configuration files or keep the existing monolithic structure.

Playbook impact

None.

Upgrade impact

Optionally, modularize configuration files according to this specification before or after upgrading to a version that supports it.

Security impact

None.

Performance impact

None.

End user impact

None.

Deployer impact

Simplify the configuration process.

Developer impact

Developers should consider the modular configuration when adding or changing configuration items.

Dependencies

None.

Implementation

Assignee(s)

Primary assignee:
<ionosphere80> Sam-I-Am

Work items

  • As necessary, break existing monolithic configuration files into smaller files that contain groups of similar items and reside in a .d directory within the configuration file structure.

Testing

  • Verify changes do not break gating process. The AIO script for gating can continue to use a monolithic file or modular files with the .aio extension.

Documentation impact

  • Change documentation that references monolithic configuration files to reference modular configuration files.

References

None.