Add env.d extra configuration directory to etc/openstack_deploy/

Like etc/openstack_deploy/conf.d/ we need a way to add additional
containers to the infrastructure without modifying the provided
openstack_environment.yml file.  This patch looks for an env.d
directory and merges their configurations into the inventory. An
example extra_container configuration file is also provided.

Closes-bug: 1440117

Change-Id: Ibc83770e69efb67996a012c96766b4a88774986e
This commit is contained in:
Dave Wilde 2015-04-03 10:52:32 -05:00 committed by Jesse Pretorius
parent 4c4fbe25c3
commit 27f1d2d3ec
2 changed files with 51 additions and 2 deletions

View File

@ -0,0 +1,44 @@
---
# Copyright 2014, Rackspace US, Inc.
# #
# # Licensed under the Apache License, Version 2.0 (the "License");
# # you may not use this file except in compliance with the License.
# # You may obtain a copy of the License at
# #
# # http://www.apache.org/licenses/LICENSE-2.0
# #
# # Unless required by applicable law or agreed to in writing, software
# # distributed under the License is distributed on an "AS IS" BASIS,
# # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# # See the License for the specific language governing permissions and
# # limitations under the License.
component_skel:
example_api:
belongs_to:
# This is a meta group of a given component type.
- example_all
container_skel:
example_api_container:
belongs_to:
# This is a group of containers mapped to a physical host.
- example-infra_containers
contains:
# This maps back to an item in the component_skel.
- example_api
properties:
# These are arbitrary key value pairs.
service_name: example_service
# This is the image that the lxc container will be built from.
container_release: trusty
physical_skel:
# This maps back to items in the container_skel.
example-infra_containers:
belongs_to:
- all_containers
# This is a required pair for the container physical entry.
example-infra_hosts:
belongs_to:
- hosts

View File

@ -556,7 +556,7 @@ def _add_additional_networks(key, inventory, ip_q, q_name, netmask, interface,
if properties:
is_metal = properties.get('is_metal', False)
## This should convert found addresses based on q_name + "_address"
# This should convert found addresses based on q_name + "_address"
# and then build the network if its not found.
if not is_metal and old_address not in networks:
network = networks[old_address] = network_entry()
@ -857,7 +857,7 @@ def _merge_dict(base_items, new_items):
def _extra_config(user_defined_config, base_dir):
"""Discover new items in a conf.d directory and add the new values.
"""Discover new items in any extra directories and add the new values.
:param user_defined_config: ``dict``
:param base_dir: ``str``
@ -920,6 +920,11 @@ def main():
% (env_version, version)
)
# Load anything in an env.d directory if found
env_plugins = os.path.join(local_path, 'env.d')
if os.path.isdir(env_plugins):
_extra_config(user_defined_config=environment, base_dir=env_plugins)
# Load existing inventory file if found
dynamic_inventory_file = os.path.join(
local_path, 'openstack_inventory.json'