From 27f1d2d3ec72358c442483ab124db9f43bfa94ee Mon Sep 17 00:00:00 2001 From: Dave Wilde Date: Fri, 3 Apr 2015 10:52:32 -0500 Subject: [PATCH] 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 --- .../env.d/extra_container.yml.example | 44 +++++++++++++++++++ playbooks/inventory/dynamic_inventory.py | 9 +++- 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 etc/openstack_deploy/env.d/extra_container.yml.example diff --git a/etc/openstack_deploy/env.d/extra_container.yml.example b/etc/openstack_deploy/env.d/extra_container.yml.example new file mode 100644 index 0000000000..75d944ea48 --- /dev/null +++ b/etc/openstack_deploy/env.d/extra_container.yml.example @@ -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 diff --git a/playbooks/inventory/dynamic_inventory.py b/playbooks/inventory/dynamic_inventory.py index 4ccd612d34..485b2b739f 100755 --- a/playbooks/inventory/dynamic_inventory.py +++ b/playbooks/inventory/dynamic_inventory.py @@ -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'