Do not create {hostname}-host_containers group as child of other groups

The existing code adds entries like aio1-host_containers as a child group
of many other container type groups in the inventory.

The side effect is that the ansible magic variable group_names for
a particular LXC container lists many group names associated with
all of the containers on its physical host.

Roles such as os_ironic create several containers and use conditional
logic to deploy the correct components into each container using the
contents of group_names. This does not work correctly when group_names
contains all of the possible ironic container groups.

This patch removes the code which adds host container groups as
children of other container type groups.

Removal of the {hostname}-host_containers group from each container
reveals a further bug, where any belongs_to directives in env.d
file container_skel sections were not processed. There is different
functionality in skel_load() and container_skel_load() which is the
cause of this.

This patch adds a call to _parse_belongs_to() into
container_skel_load() so that any groups defined with 'belongs_to'
in container_skel are correctly added as children to the
corresponding parent group.

Change-Id: Ic76b2c211484fb107d8d23f4ef6e6cc9a4ddec4f
This commit is contained in:
Jonathan Rosser 2022-08-01 18:31:34 +01:00
parent 3e4ee68a73
commit c76a4d5dfe
1 changed files with 10 additions and 10 deletions

View File

@ -146,9 +146,8 @@ def _parse_belongs_to(key, belongs_to, inventory):
def _build_container_hosts(container_affinity, container_hosts, type_and_name,
inventory, host_type, container_type,
container_host_type, physical_host_type, config,
properties, assignment):
inventory, host_type, container_host_type,
physical_host_type, config, properties, assignment):
"""Add in all of the host associations into inventory.
This will add in all of the hosts into the inventory based on the given
@ -159,7 +158,6 @@ def _build_container_hosts(container_affinity, container_hosts, type_and_name,
:param type_and_name: ``str`` Combined name of host and container name
:param inventory: ``dict`` Living dictionary of inventory
:param host_type: ``str`` Name of the host type
:param container_type: ``str`` Type of container
:param container_host_type: ``str`` Type of host
:param physical_host_type: ``str`` Name of physical host group
:param config: ``dict`` User defined information
@ -180,7 +178,6 @@ def _build_container_hosts(container_affinity, container_hosts, type_and_name,
if existing_count < container_affinity:
hostvars = inventory['_meta']['hostvars']
container_mapping = inventory[container_type]['children']
address = None
if is_metal is False:
@ -214,10 +211,6 @@ def _build_container_hosts(container_affinity, container_hosts, type_and_name,
host_type_config = config[physical_host_type][host_type]
address = host_type_config.get('ip')
# Create a host types containers group and append it to inventory
host_type_containers = '{}-host_containers'.format(host_type)
du.append_if(array=container_mapping, item=host_type_containers)
hostvars_options.update({
'ansible_host': address,
'container_address': address,
@ -408,7 +401,6 @@ def _add_container_hosts(assignment, config, container_name, container_type,
type_and_name,
inventory,
host_type,
container_type,
container_host_type,
physical_host_type,
config,
@ -722,6 +714,14 @@ def container_skel_load(container_skel, inventory, config):
for key, value in container_skel.items():
contains_in = value.get('contains', False)
belongs_to_in = value.get('belongs_to', False)
if belongs_to_in:
_parse_belongs_to(
key,
belongs_to=value['belongs_to'],
inventory=inventory
)
if contains_in or belongs_to_in:
for assignment in value['contains']:
for container_type in value['belongs_to']: