Resolve invalid chars in groups

Since ansible 2.8, usage of dashes in group names is against convention,
so by default Ansible issues a warning for such
group names.

This patch aims to finaly rename groups for all new deployments, while
making the transition for existing ones as smooth as possible.

For existing deployments old defenitions will be respected, and
a new set of groups produced.

It's up do operators to perform the clean up of old groups.

We also change the value of ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS to
show the warning, but konvert groups names to the new format.

This is needed to ensure roles and playbooks will have expected group
names in them, even though this may affect negatively cases, where
OSA deploy hosts are also being used for internal operations.

Depends-On: https://review.opendev.org/c/openstack/openstack-ansible-plugins/+/978458
Change-Id: I94907bcce7947df48f8cd19c3a79a8c7242dbc2d
Signed-off-by: Dmitriy Rabotyagov <dmitriy.rabotyagov@cleura.com>
This commit is contained in:
Dmitriy Rabotyagov
2026-03-02 18:06:31 +01:00
parent 27e8797928
commit 79d29b9f74
90 changed files with 741 additions and 487 deletions
@@ -467,7 +467,7 @@ Assuming, you currently have a config like the one below in your
control03:
ip: 172.29.236.13
shared-infra_hosts: *control_hosts
shared_infra_hosts: *control_hosts
Convert it to something like this:
@@ -494,7 +494,7 @@ Convert it to something like this:
ip: 172.29.236.23
In the example above we de-couple each service that is part of the
`shared-infra_hosts` and define them separately, along with providing MariaDB
`shared_infra_hosts` and define them separately, along with providing MariaDB
its new destination host.
* Create the container on the new infra node:
@@ -586,7 +586,7 @@ this:
.. note::
Ensure that you dont have more generic shared-infra_hosts defined.
Ensure that you dont have more generic shared_infra_hosts defined.
Now we need to manually re-generate the inventory and ensure that a new
record was mapped to our infra01:
@@ -99,7 +99,7 @@ Example:
.. code-block:: shell-session
# openstack-ansible haproxy-install.yml --tags haproxy-service-config
# openstack-ansible openstack.osa.haproxy --tags haproxy-service-config
ceph
----
@@ -112,7 +112,7 @@ Example:
.. code-block:: shell-session
# openstack-ansible ceph-install.yml --tags ceph
# openstack-ansible openstack.osa.ceph_install --tags ceph
uwsgi
-----
+10 -10
View File
@@ -72,7 +72,7 @@ host.
The configuration in the ``openstack_user_config.yml`` file defines which hosts
run the containers and services deployed by OpenStack-Ansible. For
example, hosts listed in the ``shared-infra_hosts`` section run containers for
example, hosts listed in the ``shared_infra_hosts`` section run containers for
many of the shared services that your OpenStack environment requires. Some of
these services include databases, Memcached, and RabbitMQ. Several other
host types contain other types of containers, and all of these are listed
@@ -111,11 +111,11 @@ the br-mgmt container management bridge on each target host.
br-mgmt interface, please, refer to the `guide <https://docs.openstack.org/openstack-ansible/latest/reference/inventory/configure-inventory.html#having-ssh-network-different-from-openstack-management-network>`_.
#. Configure a list containing at least three infrastructure
target hosts in the ``shared-infra_hosts`` section:
target hosts in the ``shared_infra_hosts`` section:
.. code-block:: yaml
shared-infra_hosts:
shared_infra_hosts:
infra01:
ip: INFRA01_IP_ADDRESS
infra02:
@@ -139,25 +139,25 @@ the br-mgmt container management bridge on each target host.
.. code-block:: yaml
network-infra_hosts:
network_infra_hosts:
infra01:
ip: INFRA01_IP_ADDRESS
infra02: ...
network-northd_hosts:
network_northd_hosts:
infra01:
ip: INFRA01_IP_ADDRESS
infra02: ...
When deploying OpenStack with OVN, it's essential to properly configure
``network-gateway_hosts`` depending on your network architecture. There are
``network_gateway_hosts`` depending on your network architecture. There are
two typical scenarios:
Scenario 1: DVR with gateway on compute nodes:
.. code-block:: yaml
network-gateway_hosts:
network_gateway_hosts:
compute01:
ip: COMPUTE01_IP_ADDRESS
compute02: ...
@@ -166,7 +166,7 @@ the br-mgmt container management bridge on each target host.
.. code-block:: yaml
network-gateway_hosts:
network_gateway_hosts:
network01:
ip: NETWORK01_IP_ADDRESS
network02: ...
@@ -182,11 +182,11 @@ the br-mgmt container management bridge on each target host.
compute02: ...
#. Configure a list containing at least one repository target host in
the ``repo-infra_hosts`` section:
the ``repo_infra_hosts`` section:
.. code-block:: yaml
repo-infra_hosts:
repo_infra_hosts:
infra01:
ip: INFRA01_IP_ADDRESS
infra02:
@@ -180,32 +180,32 @@ In order to achieve that we need:
.. code-block:: yaml
az1-infra_hosts: &infra_az1
az1_infra_hosts: &infra_az1
az1-infra1:
ip: 172.39.123.11
az2-infra_hosts: &infra_az2
az2_infra_hosts: &infra_az2
az2-infra2:
ip: 172.39.123.12
az3-infra_hosts: &infra_az3
az3_infra_hosts: &infra_az3
az3-infra3:
ip: 172.39.123.13
shared-infra_hosts: &controllers
shared_infra_hosts: &controllers
<<: *infra_az1
<<: *infra_az2
<<: *infra_az3
az1-compute_hosts: &computes_az1
az1_compute_hosts: &computes_az1
az1-compute01:
ip: 172.39.123.100
az2-compute_hosts: &computes_az2
az2_compute_hosts: &computes_az2
az2-compute01:
ip: 172.39.123.150
az3-compute_hosts: &computes_az3
az3_compute_hosts: &computes_az3
az3-compute01:
ip: 172.39.123.200
@@ -281,12 +281,12 @@ When OpenStack-Ansible generates its dynamic inventory, the affinity
setting determines how many containers of a similar type are deployed on a
single physical host.
Using ``shared-infra_hosts`` as an example, consider this
Using ``shared_infra_hosts`` as an example, consider this
``openstack_user_config.yml`` configuration:
.. code-block:: yaml
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 172.29.236.101
infra2:
@@ -294,7 +294,7 @@ Using ``shared-infra_hosts`` as an example, consider this
infra3:
ip: 172.29.236.103
Three hosts are assigned to the ``shared-infra_hosts`` group,
Three hosts are assigned to the ``shared_infra_hosts`` group,
OpenStack-Ansible ensures that each host runs a single database container,
a single Memcached container, and a single RabbitMQ container. Each host has
an affinity of 1 by default, which means that each host runs one of each
@@ -306,7 +306,7 @@ your ``openstack_user_config.yml`` file would look as follows:
.. code-block:: yaml
shared-infra_hosts:
shared_infra_hosts:
infra1:
affinity:
rabbit_mq_container: 0
@@ -356,7 +356,7 @@ Example:
.. code-block:: yaml
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 192.168.0.101
management_ip: 172.29.236.101
@@ -34,7 +34,7 @@ the ``conf.d/`` directory is identical to the syntax used in the
``openstack_user_config.yml`` file.
In these files, the target hosts are listed under one or more
headings, such as ``shared-infra_hosts`` or ``storage_hosts``, which serve as
headings, such as ``shared_infra_hosts`` or ``storage_hosts``, which serve as
Ansible group mappings. These groups map to the physical
hosts.
@@ -66,11 +66,11 @@ groups, that define where each service deploys. By reviewing files within the
in the default layout.
For example, the ``shared-infra.yml`` file defines a container group,
``shared-infra_containers``, as a subset of the ``all_containers``
inventory group. The ``shared- infra_containers`` container group is
mapped to the ``shared-infra_hosts`` host group. All of the service
components in the ``shared-infra_containers`` container group are
deployed to each target host in the ``shared-infra_hosts host`` group.
``shared_infra_containers``, as a subset of the ``all_containers``
inventory group. The ``shared_infra_containers`` container group is
mapped to the ``shared_infra_hosts`` host group. All of the service
components in the ``shared_infra_containers`` container group are
deployed to each target host in the ``shared_infra_hosts host`` group.
Within a ``physical_skel`` section, the OpenStack-Ansible dynamic inventory
expects to find a pair of keys. The first key maps to items in the
@@ -79,7 +79,7 @@ expects to find a pair of keys. The first key maps to items in the
To continue the example, the ``memcache.yml`` file defines the
``memcache_container`` container group. This group is a subset of the
``shared-infra_containers`` group, which is itself a subset of
``shared_infra_containers`` group, which is itself a subset of
the ``all_containers`` inventory group.
.. note::
+6 -5
View File
@@ -10,7 +10,7 @@ the Ceph backend for images, volumes, and instances.
This example environment has the following characteristics:
* Three infrastructure (control plane) hosts with ceph-mon containers
* Three infrastructure (control plane) hosts with ``ceph_mon`` containers
* Two compute hosts
* Three Ceph OSD storage hosts
* One log aggregation host
@@ -63,10 +63,11 @@ integration in three ways:
No ssh access by OpenStack-Ansible is required to the ceph cluster.
* deploying a ceph cluster as part of the OpenStack-Ansible deployment
by using the roles maintained by the `Ceph-Ansible`_ project. Deployers
can enable the ``ceph-install.yml`` playbook by adding hosts to the
``ceph-mon_hosts`` and ``ceph-osd_hosts`` groups in
``openstack_user_config.yml``. In order to enable ``ceph-rgw-install.yml``
playbook you need to add ``ceph-rgw_hosts`` in ``openstack_user_config.yml``.
can enable the ``openstack.osa.ceph_install`` playbook by adding hosts to
the ``ceph_mon_hosts`` and ``ceph_osd_hosts`` groups in
``openstack_user_config.yml``. In order to enable
``openstack.osa.ceph_rgw_install`` playbook you need to add
``ceph_rgw_hosts`` in ``openstack_user_config.yml``.
.. note::
+3 -3
View File
@@ -7,7 +7,7 @@ OpenStack-Ansible gives you the option of deploying Ceph Object Gateway
In particular, the ``openstack.osa.ceph_rgw_install`` playbook
(which includes ``openstack.osa.ceph_rgw_keystone_setup``) will deploy
radosgw to any ``ceph-rgw`` hosts, and create a corresponding Keystone
radosgw to any ``ceph_rgw`` hosts, and create a corresponding Keystone
``object-store`` service catalog entry. The service endpoints do
contain the ``AUTH_%(tenant_id)s`` prefix just like in native Swift,
so public read ACLs and temp URLs will work just like they do in
@@ -25,9 +25,9 @@ is an example configuration snippet:
.. note::
Mentioned below overrides are default ones and will be applied to `ceph-rgw` group
Mentioned below overrides are default ones and will be applied to `ceph_rgw` group
.. literalinclude:: ../../../../inventory/group_vars/ceph-rgw.yml
.. literalinclude:: ../../../../inventory/group_vars/ceph_rgw.yml
You may also want to add the ``rgw_dns_name`` option if you want to
enable bucket hostnames with the S3 API.
+1 -1
View File
@@ -69,7 +69,7 @@ There are multiple complications related to organizing storage where the storage
First, there is only a single controller in any given Availability
Zone, while multiple copies of ``cinder_volume`` needs to be run for
each storage provider for High Availability. As ``cinder_volume`` needs
access to storage network, one of the best places for it are ``ceph-mon``
access to storage network, one of the best places for it are ``ceph_mon``
hosts.
Another challenge is to organize shared storage for Glance Images, as
+1 -1
View File
@@ -1,4 +1,4 @@
metering-alarm_hosts:
metering_alarm_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,5 +1,5 @@
# The infra nodes that will be running the alarming services
metering-alarm_hosts:
metering_alarm_hosts:
infra1:
ip: 172.20.236.111
infra2:
+1 -1
View File
@@ -1,5 +1,5 @@
---
key-manager_hosts:
key_manager_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,5 +1,5 @@
---
key-manager_hosts:
key_manager_hosts:
infra1:
ip: 172.20.236.111
infra2:
@@ -1,11 +1,11 @@
# The compute host that the ceilometer compute agent will be running on.
metering-compute_hosts:
metering_compute_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
# The infra nodes that the central agents will be running on
metering-infra_hosts:
metering_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,13 +1,13 @@
# The compute hosts that will run the ceilometer compute agent. This list
# should contain every host in the compute_hosts list.
metering-compute_hosts:
metering_compute_hosts:
compute1:
ip: 172.20.236.110
# The infra hosts that will run the central agents.
# For running Ceilometer in HA for workload partitioning, see
# https://docs.openstack.org/pike/admin/#support-for-ha-deployment
metering-infra_hosts:
metering_infra_hosts:
infra1:
ip: 172.20.236.111
# See note regarding HA configuration above.
+5 -5
View File
@@ -1,30 +1,30 @@
# The infra nodes where the Ceph mon services will run
ceph-mon_hosts:
ceph_mon_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
# The nodes that the Ceph OSD disks will be running on
ceph-osd_hosts:
ceph_osd_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
{% if 'manila' not in bootstrap_host_scenarios_expanded %}
# The nodes that the Ceph RadosGW object gateways will be running on
ceph-rgw_hosts:
ceph_rgw_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
{% endif %}
{% if 'manila' in bootstrap_host_scenarios_expanded %}
ceph-mds_hosts:
ceph_mds_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
ceph-nfs_hosts:
ceph_nfs_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,5 +1,5 @@
---
storage-infra_hosts:
storage_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+3 -3
View File
@@ -1,17 +1,17 @@
---
ironic-infra_hosts:
ironic_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
# Ironic compute hosts. These compute hosts will be used to
# facilitate ironic's interactions through nova.
ironic-compute_hosts:
ironic_compute_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
ironic-inspector_hosts:
ironic_inspector_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,5 +1,5 @@
---
cluster-api_hosts:
cluster_api_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,4 +1,4 @@
magnum-infra_hosts:
magnum_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,5 +1,5 @@
# The infra nodes that will be running the magnum services
magnum-infra_hosts:
magnum_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
+2 -2
View File
@@ -1,9 +1,9 @@
manila-infra_hosts:
manila_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
manila-data_hosts:
manila_data_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,5 +1,5 @@
# The infra nodes that will be running the manila services
manila-infra_hosts:
manila_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
@@ -7,7 +7,7 @@ manila-infra_hosts:
infra3:
ip: 172.20.236.113
manila-data_hosts:
manila_data_hosts:
data1:
ip: 172.20.236.121
data2:
+2 -2
View File
@@ -1,10 +1,10 @@
---
masakari-infra_hosts:
masakari_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
masakari-monitor_hosts:
masakari_monitor_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,6 +1,6 @@
---
# The infra nodes that will be running the masakari services
masakari-infra_hosts:
masakari_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
@@ -9,7 +9,7 @@ masakari-infra_hosts:
ip: 172.20.236.113
# The infra nodes that will be running the masakari monitors
masakari-monitor_hosts:
masakari_monitor_hosts:
infra1:
ip: 172.20.236.111
infra2:
+1 -1
View File
@@ -1,4 +1,4 @@
mistral-infra_hosts:
mistral_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,5 +1,5 @@
# The infra nodes that will be running the mistral services
mistral-infra_hosts:
mistral_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
+2 -2
View File
@@ -7,12 +7,12 @@ network_hosts:
management_ip: {{ bootstrap_host_management_address }}
{% if _neutron_plugin_driver == 'ml2.ovn' %}
network-gateway_hosts:
network_gateway_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
network-northd_hosts:
network_northd_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,5 +1,5 @@
---
compute-infra_hosts:
compute_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,5 +1,5 @@
# The controller host that the octavia control plane will be run on
octavia-infra_hosts:
octavia_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,4 +1,4 @@
placement-infra_hosts:
placement_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,5 +1,5 @@
# The infra nodes that will be running the placement services
placement-infra_hosts:
placement_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
@@ -3,7 +3,7 @@
# NB. The ip address that must be specified is the IP address that swift
# hosts will be able to replicate on and not necessarily the
# ansible_ssh IP from the remote ansible install.
swift-remote_hosts:
swift_remote_hosts:
remote-swift1:
ip: 172.29.237.1
remote-swift2:
+1 -1
View File
@@ -14,7 +14,7 @@ global_overrides:
name: default
index: 0
default: true
swift-proxy_hosts:
swift_proxy_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -245,10 +245,10 @@
#
# --------
#
# Level: swift-proxy_hosts (required)
# Level: swift_proxy_hosts (required)
# List of target hosts on which to deploy the swift proxy service. Recommend
# three minimum target hosts for these services. Typically contains the same
# target hosts as the 'shared-infra_hosts' level in complete OpenStack
# target hosts as the 'shared_infra_hosts' level in complete OpenStack
# deployments.
#
# Level: <value> (optional, string)
@@ -310,7 +310,7 @@
#
# Define three swift proxy hosts:
#
# swift-proxy_hosts:
# swift_proxy_hosts:
#
# infra1:
# ip: 172.29.236.101
+1 -1
View File
@@ -1,4 +1,4 @@
trove-infra_hosts:
trove_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -1,5 +1,5 @@
# The infra nodes that will be running the trove services
trove-infra_hosts:
trove_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
+2 -2
View File
@@ -1,9 +1,9 @@
---
zun-infra_hosts:
zun_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
zun-compute_hosts:
zun_compute_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
+1 -1
View File
@@ -1,6 +1,6 @@
---
# The infra nodes that will be running the zun services
zun-infra_hosts:
zun_infra_hosts:
infra1:
ip: 172.20.236.111
infra2:
@@ -12,10 +12,10 @@ container_skel:
ceilometer_central_container:
properties:
is_metal: true
ceph-mon_container:
ceph_mon_container:
properties:
is_metal: true
ceph-rgw_container:
ceph_rgw_container:
properties:
is_metal: true
cinder_api_container:
@@ -72,7 +72,7 @@ container_skel:
memcached_container:
properties:
is_metal: true
metering-compute_container:
metering_compute_container:
properties:
is_metal: true
mistral_container:
@@ -3,51 +3,51 @@ component_skel:
# Ceph MON
ceph_mon_az1:
belongs_to:
- ceph-mon
- ceph_mon
- ceph_all
- az1_all
ceph_mon_az2:
belongs_to:
- ceph-mon
- ceph_mon
- ceph_all
- az2_all
ceph_mon_az3:
belongs_to:
- ceph-mon
- ceph_mon
- ceph_all
- az3_all
# Ceph OSD
ceph_osd_az1:
belongs_to:
- ceph-osd
- ceph_osd
- ceph_all
- az1_all
ceph_osd_az2:
belongs_to:
- ceph-osd
- ceph_osd
- ceph_all
- az2_all
ceph_osd_az3:
belongs_to:
- ceph-osd
- ceph_osd
- ceph_all
- az3_all
# Ceph RGW
ceph_rgw_az1:
belongs_to:
- ceph-rgw
- ceph_rgw
- ceph_all
- az1_all
ceph_rgw_az2:
belongs_to:
- ceph-rgw
- ceph_rgw
- ceph_all
- az2_all
ceph_rgw_az3:
belongs_to:
- ceph-rgw
- ceph_rgw
- ceph_all
- az3_all
@@ -78,9 +78,9 @@ global_overrides:
net_name: "lbaas"
group_binds:
- neutron_openvswitch_agent
- octavia-worker
- octavia-housekeeping
- octavia-health-manager
- octavia_worker
- octavia_housekeeping
- octavia_health_manager
- network:
container_bridge: "br-bmaas"
container_type: "veth"
@@ -124,11 +124,11 @@ global_overrides:
- swift_proxy
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
aio1:
ip: 172.29.236.100
repo-infra_hosts:
repo_infra_hosts:
aio1:
ip: 172.29.236.100
@@ -121,9 +121,9 @@ global_overrides:
{% else %}
- neutron_ovn_gateway
{% endif %}
- octavia-worker
- octavia-housekeeping
- octavia-health-manager
- octavia_worker
- octavia_housekeeping
- octavia_health_manager
{% endif %}
{% if 'ironic' in bootstrap_host_scenarios_expanded %}
- network:
@@ -186,8 +186,8 @@ global_overrides:
- nova_compute
- manila_share
- swift_proxy
- ceph-mon
- ceph-osd
- ceph_mon
- ceph_osd
# keystone
identity_hosts:
@@ -204,7 +204,7 @@ identity_hosts:
{% endif %}
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
aio1:
ip: {{ bootstrap_host_public_address }}
management_ip: {{ bootstrap_host_management_address }}
@@ -215,7 +215,7 @@ shared-infra_hosts:
rabbit_mq_container: 3
{% endif %}
repo-infra_hosts:
repo_infra_hosts:
aio1:
{% if bootstrap_host_install_method == 'distro' %}
affinity:
@@ -214,7 +214,7 @@ az3_hosts:
shared_infra_hosts: &controllers
<<: [*controller_az1, *controller_az2, *controller_az3]
repo-infra_hosts: *controllers
repo_infra_hosts: *controllers
memcaching_hosts: *controllers
database_hosts: *controllers
mq_hosts: *controllers
@@ -222,11 +222,11 @@ operator_hosts: *controllers
identity_hosts: *controllers
image_hosts: *controllers
dashboard_hosts: *controllers
compute-infra_hosts: *controllers
placement-infra_hosts: *controllers
storage-infra_hosts: *controllers
network-infra_hosts: *controllers
network-northd_hosts: *controllers
compute_infra_hosts: *controllers
placement_infra_hosts: *controllers
storage_infra_hosts: *controllers
network_infra_hosts: *controllers
network_northd_hosts: *controllers
coordination_hosts: *controllers
compute_hosts: &computes
@@ -238,7 +238,7 @@ pinned_compute_hosts:
shared_compute_hosts:
<<: [*shared_computes_az1, *shared_computes_az2, *shared_computes_az3]
network-gateway_hosts: *computes
network_gateway_hosts: *computes
storage_hosts: &storage
<<: [*storage_az1, *storage_az2, *storage_az3]
@@ -299,7 +299,7 @@
#
# --------
#
# Level: shared-infra_hosts (required)
# Level: shared_infra_hosts (required)
# List of target hosts on which to deploy shared infrastructure services
# including the Galera SQL database cluster, RabbitMQ, and Memcached. Recommend
# three minimum target hosts for these services.
@@ -315,7 +315,7 @@
#
# Define three shared infrastructure hosts:
#
# shared-infra_hosts:
# shared_infra_hosts:
# infra1:
# ip: 172.29.236.101
# infra2:
@@ -325,10 +325,10 @@
#
# --------
#
# Level: repo-infra_hosts (required)
# Level: repo_infra_hosts (required)
# List of target hosts on which to deploy the package repository. Recommend
# minimum three target hosts for this service. Typically contains the same
# target hosts as the 'shared-infra_hosts' level.
# target hosts as the 'shared_infra_hosts' level.
#
# Level: <value> (required, string)
# Hostname of a target host.
@@ -341,7 +341,7 @@
#
# Define three package repository hosts:
#
# repo-infra_hosts:
# repo_infra_hosts:
# infra1:
# ip: 172.29.236.101
# infra2:
@@ -370,10 +370,10 @@
#
# --------
#
# Level: os-infra_hosts (required)
# Level: os_infra_hosts (required)
# List of target hosts on which to deploy the glance API, nova API, heat API,
# and horizon. Recommend three minimum target hosts for these services.
# Typically contains the same target hosts as 'shared-infra_hosts' level.
# Typically contains the same target hosts as 'shared_infra_hosts' level.
#
# Level: <value> (required, string)
# Hostname of a target host.
@@ -386,7 +386,7 @@
#
# Define three OpenStack infrastructure hosts:
#
# os-infra_hosts:
# os_infra_hosts:
# infra1:
# ip: 172.29.236.101
# infra2:
@@ -399,7 +399,7 @@
# Level: identity_hosts (required)
# List of target hosts on which to deploy the keystone service. Recommend
# three minimum target hosts for this service. Typically contains the same
# target hosts as the 'shared-infra_hosts' level.
# target hosts as the 'shared_infra_hosts' level.
#
# Level: <value> (required, string)
# Hostname of a target host.
@@ -425,7 +425,7 @@
# Level: network_hosts (required)
# List of target hosts on which to deploy neutron services. Recommend three
# minimum target hosts for this service. Typically contains the same target
# hosts as the 'shared-infra_hosts' level.
# hosts as the 'shared_infra_hosts' level.
#
# Level: <value> (required, string)
# Hostname of a target host.
@@ -447,12 +447,12 @@
# ip: 172.29.236.103
#
# If you want to deploy neutron agents to different set of hosts (net nodes)
# rather then neutron API, you should define 'network-infra_hosts' and
# 'network-agent_hosts' instead.
# rather then neutron API, you should define 'network_infra_hosts' and
# 'network_agent_hosts' instead.
#
# Example:
#
# network-infra_hosts:
# network_infra_hosts:
# infra1:
# ip: 172.29.236.101
# infra2:
@@ -460,7 +460,28 @@
# infra3:
# ip: 172.29.236.103
#
# network-agent_hosts:
# NOTE: network_agent_hosts is not applicable for OVN ML2 driver.
# They are mainly used for ML2 OVS driver.
#
# network_agent_hosts:
# net1:
# ip: 172.29.236.201
# net2:
# ip: 172.29.236.202
# net3:
# ip: 172.29.236.203
#
# For the ML2 OVN scenario, you need to define following groups instead:
#
# network_northd_hosts:
# infra1:
# ip: 172.29.236.101
# infra2:
# ip: 172.29.236.102
# infra3:
# ip: 172.29.236.103
#
# network_gateway_hosts:
# net1:
# ip: 172.29.236.201
# net2:
@@ -508,16 +529,16 @@
#
# Define an OpenStack compute host:
#
# ironic-compute_hosts:
# ironic-infra1:
# ironic_compute_hosts:
# ironic_infra1:
# ip: 172.29.236.121
#
# --------
#
# Level: storage-infra_hosts (required)
# Level: storage_infra_hosts (required)
# List of target hosts on which to deploy the cinder API. Recommend three
# minimum target hosts for this service. Typically contains the same target
# hosts as the 'shared-infra_hosts' level.
# hosts as the 'shared_infra_hosts' level.
#
# Level: <value> (required, string)
# Hostname of a target host.
@@ -530,7 +551,7 @@
#
# Define three OpenStack storage infrastructure hosts:
#
# storage-infra_hosts:
# storage_infra_hosts:
# infra1:
# ip: 172.29.236.101
# infra2:
@@ -91,7 +91,7 @@ global_overrides:
###
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -100,7 +100,7 @@ shared-infra_hosts:
ip: 172.29.236.13
# repository (apt cache, python packages, etc)
repo-infra_hosts:
repo_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -133,7 +133,7 @@ identity_hosts:
ip: 172.29.236.13
# cinder api services
storage-infra_hosts:
storage_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -176,7 +176,7 @@ image_hosts:
options: "_netdev,auto"
# nova api, conductor, etc services
compute-infra_hosts:
compute_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -212,7 +212,7 @@ network_hosts:
ip: 172.29.236.13
# ceilometer (telemetry data collection)
metering-infra_hosts:
metering_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -221,7 +221,7 @@ metering-infra_hosts:
ip: 172.29.236.13
# aodh (telemetry alarm service)
metering-alarm_hosts:
metering_alarm_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -246,7 +246,7 @@ compute_hosts:
ip: 172.29.236.17
# ceilometer compute agent (telemetry data collection)
metering-compute_hosts:
metering_compute_hosts:
compute1:
ip: 172.29.236.16
compute2:
@@ -289,11 +289,11 @@ pod4_hosts: &pod4
ip: 172.29.245.11
# galera, memcache, rabbitmq, utility
shared-infra_hosts: &controllers
shared_infra_hosts: &controllers
<<: [*pod1, *pod2, *pod3]
# repository (apt cache, python packages, etc)
repo-infra_hosts: *controllers
repo_infra_hosts: *controllers
# load balancer
# Ideally the load balancer should not use the Infrastructure hosts.
@@ -308,7 +308,7 @@ load_balancer_hosts: *controllers
identity_hosts: *controllers
# cinder api services
storage-infra_hosts: *controllers
storage_infra_hosts: *controllers
# glance
# The settings here are repeated for each infra host.
@@ -345,7 +345,7 @@ image_hosts:
options: "_netdev,auto"
# nova api, conductor, etc services
compute-infra_hosts: *controllers
compute_infra_hosts: *controllers
# heat
orchestration_hosts: *controllers
@@ -357,10 +357,10 @@ dashboard_hosts: *controllers
network_hosts: *controllers
# ceilometer (telemetry data collection)
metering-infra_hosts: *controllers
metering_infra_hosts: *controllers
# aodh (telemetry alarm service)
metering-alarm_hosts: *controllers
metering_alarm_hosts: *controllers
# gnocchi (telemetry metrics storage)
metrics_hosts: *controllers
@@ -368,7 +368,7 @@ metrics_hosts: *controllers
compute_hosts: *pod4
# ceilometer compute agent (telemetry data collection)
metering-compute_hosts: *pod4
metering_compute_hosts: *pod4
# cinder volume hosts (NFS-backed)
# The settings here are repeated for each infra host.
@@ -72,8 +72,8 @@ global_overrides:
- cinder_volume
- manila_share
- nova_compute
- ceph-mon
- ceph-osd
- ceph_mon
- ceph_osd
###
### Infrastructure
@@ -94,7 +94,7 @@ compute_hosts: &compute_hosts
compute2:
ip: 172.29.236.17
ceph-osd_hosts:
ceph_osd_hosts:
osd1:
ip: 172.29.236.18
osd2:
@@ -103,22 +103,22 @@ ceph-osd_hosts:
ip: 172.29.236.20
# galera, memcache, rabbitmq, utility
shared-infra_hosts: *infrastructure_hosts
shared_infra_hosts: *infrastructure_hosts
# zookeeper
coordination_hosts: *infrastructure_hosts
# ceph-mon containers
ceph-mon_hosts: *infrastructure_hosts
# ceph_mon containers
ceph_mon_hosts: *infrastructure_hosts
# ceph-mds containers
ceph-mds_hosts: *infrastructure_hosts
# ceph_mds containers
ceph_mds_hosts: *infrastructure_hosts
# ganesha-nfs hosts
ceph-nfs_hosts: *infrastructure_hosts
ceph_nfs_hosts: *infrastructure_hosts
# repository (apt cache, python packages, etc)
repo-infra_hosts: *infrastructure_hosts
repo_infra_hosts: *infrastructure_hosts
# load balancer
# Ideally the load balancer should not use the Infrastructure hosts.
@@ -133,7 +133,7 @@ load_balancer_hosts: *infrastructure_hosts
identity_hosts: *infrastructure_hosts
# cinder api services
storage-infra_hosts: *infrastructure_hosts
storage_infra_hosts: *infrastructure_hosts
# cinder volume hosts (Ceph RBD-backed)
storage_hosts: *infrastructure_hosts
@@ -142,10 +142,10 @@ storage_hosts: *infrastructure_hosts
image_hosts: *infrastructure_hosts
# placement
placement-infra_hosts: *infrastructure_hosts
placement_infra_hosts: *infrastructure_hosts
# nova api, conductor, etc services
compute-infra_hosts: *infrastructure_hosts
compute_infra_hosts: *infrastructure_hosts
# heat
orchestration_hosts: *infrastructure_hosts
@@ -157,17 +157,17 @@ dashboard_hosts: *infrastructure_hosts
network_hosts: *infrastructure_hosts
# ceilometer (telemetry data collection)
metering-infra_hosts: *infrastructure_hosts
metering_infra_hosts: *infrastructure_hosts
# aodh (telemetry alarm service)
metering-alarm_hosts: *infrastructure_hosts
metering_alarm_hosts: *infrastructure_hosts
# gnocchi (telemetry metrics storage)
metrics_hosts: *infrastructure_hosts
# manila (share service)
manila-infra_hosts: *infrastructure_hosts
manila-data_hosts: *infrastructure_hosts
manila_infra_hosts: *infrastructure_hosts
manila_data_hosts: *infrastructure_hosts
# ceilometer compute agent (telemetry data collection)
metering-compute_hosts: *compute_hosts
metering_compute_hosts: *compute_hosts
@@ -76,7 +76,7 @@ global_overrides:
###
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -94,7 +94,7 @@ coordination_hosts:
ip: 172.29.236.13
# repository (apt cache, python packages, etc)
repo-infra_hosts:
repo_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -127,7 +127,7 @@ identity_hosts:
ip: 172.29.236.13
# cinder api services
storage-infra_hosts:
storage_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -170,7 +170,7 @@ image_hosts:
options: "_netdev,auto"
# placement
placement-infra_hosts:
placement_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -179,7 +179,7 @@ placement-infra_hosts:
ip: 172.29.236.13
# nova api, conductor, etc services
compute-infra_hosts:
compute_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -206,7 +206,7 @@ dashboard_hosts:
ip: 172.29.236.13
# neutron api
network-infra_hosts:
network_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -214,7 +214,7 @@ network-infra_hosts:
infra3:
ip: 172.29.236.13
network-northd_hosts:
network_northd_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -223,7 +223,7 @@ network-northd_hosts:
ip: 172.29.236.13
# neutron ovn controller
network-gateway_hosts:
network_gateway_hosts:
net1:
ip: 172.29.236.21
net2:
@@ -232,7 +232,7 @@ network-gateway_hosts:
ip: 172.29.236.23
# ceilometer (telemetry data collection)
metering-infra_hosts:
metering_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -241,7 +241,7 @@ metering-infra_hosts:
ip: 172.29.236.13
# aodh (telemetry alarm service)
metering-alarm_hosts:
metering_alarm_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -266,7 +266,7 @@ compute_hosts:
ip: 172.29.236.17
# ceilometer compute agent (telemetry data collection)
metering-compute_hosts:
metering_compute_hosts:
compute1:
ip: 172.29.236.16
compute2:
@@ -129,7 +129,7 @@ global_overrides:
###
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -138,7 +138,7 @@ shared-infra_hosts:
ip: 172.29.236.13
# repository (apt cache, python packages, etc)
repo-infra_hosts:
repo_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -171,7 +171,7 @@ identity_hosts:
ip: 172.29.236.13
# cinder api services
storage-infra_hosts:
storage_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -214,7 +214,7 @@ image_hosts:
options: "_netdev,auto"
# placement
placement-infra_hosts:
placement_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -223,7 +223,7 @@ placement-infra_hosts:
ip: 172.29.236.13
# nova api, conductor, etc services
compute-infra_hosts:
compute_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -259,7 +259,7 @@ network_hosts:
ip: 172.29.236.13
# ceilometer (telemetry data collection)
metering-infra_hosts:
metering_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -268,7 +268,7 @@ metering-infra_hosts:
ip: 172.29.236.13
# aodh (telemetry alarm service)
metering-alarm_hosts:
metering_alarm_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -293,7 +293,7 @@ compute_hosts:
ip: 172.29.236.17
# ceilometer compute agent (telemetry data collection)
metering-compute_hosts:
metering_compute_hosts:
compute1:
ip: 172.29.236.16
compute2:
@@ -91,7 +91,7 @@ global_overrides:
###
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -100,7 +100,7 @@ shared-infra_hosts:
ip: 172.29.236.13
# repository (apt cache, python packages, etc)
repo-infra_hosts:
repo_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -133,7 +133,7 @@ identity_hosts:
ip: 172.29.236.13
# cinder api services
storage-infra_hosts:
storage_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -176,7 +176,7 @@ image_hosts:
options: "_netdev,auto"
# nova api, conductor, etc services
compute-infra_hosts:
compute_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -212,7 +212,7 @@ network_hosts:
ip: 172.29.236.13
# ceilometer (telemetry data collection)
metering-infra_hosts:
metering_infra_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -221,7 +221,7 @@ metering-infra_hosts:
ip: 172.29.236.13
# aodh (telemetry alarm service)
metering-alarm_hosts:
metering_alarm_hosts:
infra1:
ip: 172.29.236.11
infra2:
@@ -246,7 +246,7 @@ compute_hosts:
ip: 172.29.236.17
# ceilometer compute agent (telemetry data collection)
metering-compute_hosts:
metering_compute_hosts:
compute1:
ip: 172.29.236.16
compute2:
@@ -72,12 +72,12 @@ global_overrides:
###
# galera, memcache, rabbitmq, utility
shared-infra_hosts:
shared_infra_hosts:
infra1:
ip: 172.29.236.11
# repository (apt cache, python packages, etc)
repo-infra_hosts:
repo_infra_hosts:
infra1:
ip: 172.29.236.11
@@ -96,7 +96,7 @@ identity_hosts:
ip: 172.29.236.11
# cinder api services
storage-infra_hosts:
storage_infra_hosts:
infra1:
ip: 172.29.236.11
@@ -106,12 +106,12 @@ image_hosts:
ip: 172.29.236.11
# placement
placement-infra_hosts:
placement_infra_hosts:
infra1:
ip: 172.29.236.11
# nova api, conductor, etc services
compute-infra_hosts:
compute_infra_hosts:
infra1:
ip: 172.29.236.11
+3 -3
View File
@@ -16,7 +16,7 @@ component_skel:
container_skel:
aodh_container:
belongs_to:
- metering-alarm_containers
- metering_alarm_containers
contains:
- aodh_api
- aodh_listener
@@ -24,9 +24,9 @@ container_skel:
- aodh_alarm_notifier
physical_skel:
metering-alarm_containers:
metering_alarm_containers:
belongs_to:
- all_containers
metering-alarm_hosts:
metering_alarm_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -21,14 +21,14 @@ component_skel:
container_skel:
barbican_container:
belongs_to:
- key-manager_containers
- key_manager_containers
contains:
- barbican_api
physical_skel:
key-manager_containers:
key_manager_containers:
belongs_to:
- all_containers
key-manager_hosts:
key_manager_hosts:
belongs_to:
- hosts
+15 -15
View File
@@ -2,39 +2,39 @@
component_skel:
ceilometer_agent_compute:
belongs_to:
- ceilometer_all
- ceilometer_all
ceilometer_agent_central:
belongs_to:
- ceilometer_all
- ceilometer_all
ceilometer_agent_notification:
belongs_to:
- ceilometer_all
- ceilometer_all
container_skel:
ceilometer_central_container:
belongs_to:
- metering-infra_containers
- metering_infra_containers
contains:
- ceilometer_agent_central
- ceilometer_agent_notification
metering-compute_container:
ceilometer_compute_container:
belongs_to:
- metering-compute_containers
- metering_compute_containers
contains:
- ceilometer_agent_compute
- ceilometer_agent_compute
properties:
is_metal: true
physical_skel:
metering-compute_containers:
metering_compute_containers:
belongs_to:
- all_containers
metering-compute_hosts:
- all_containers
metering_compute_hosts:
belongs_to:
- hosts
metering-infra_containers:
- hosts
metering_infra_containers:
belongs_to:
- all_containers
metering-infra_hosts:
- all_containers
metering_infra_hosts:
belongs_to:
- hosts
- hosts
+30 -30
View File
@@ -14,79 +14,79 @@
# limitations under the License.
component_skel:
ceph-mon:
ceph_mon:
belongs_to:
- ceph_all
ceph-osd:
ceph_osd:
belongs_to:
- ceph_all
ceph-rgw:
ceph_rgw:
belongs_to:
- ceph_all
ceph-mds:
ceph_mds:
belongs_to:
- ceph_all
ceph-nfs:
ceph_nfs:
belongs_to:
- ceph_all
container_skel:
ceph-mon_container:
ceph_mon_container:
belongs_to:
- ceph-mon_containers
- ceph_mon_containers
contains:
- ceph-mon
ceph-osd_container:
- ceph_mon
ceph_osd_container:
belongs_to:
- ceph-osd_containers
- ceph_osd_containers
contains:
- ceph-osd
- ceph_osd
properties:
is_metal: true
ceph-rgw_container:
ceph_rgw_container:
belongs_to:
- ceph-rgw_containers
- ceph_rgw_containers
contains:
- ceph-rgw
ceph-mds_container:
- ceph_rgw
ceph_mds_container:
belongs_to:
- ceph-mds_containers
- ceph_mds_containers
contains:
- ceph-mds
ceph-nfs_container:
- ceph_mds
ceph_nfs_container:
belongs_to:
- ceph-nfs_containers
- ceph_nfs_containers
contains:
- ceph-nfs
- ceph_nfs
physical_skel:
ceph-mon_containers:
ceph_mon_containers:
belongs_to:
- all_containers
ceph-mon_hosts:
ceph_mon_hosts:
belongs_to:
- hosts
ceph-osd_containers:
ceph_osd_containers:
belongs_to:
- all_containers
ceph-osd_hosts:
ceph_osd_hosts:
belongs_to:
- hosts
ceph-rgw_containers:
ceph_rgw_containers:
belongs_to:
- all_containers
ceph-rgw_hosts:
ceph_rgw_hosts:
belongs_to:
- hosts
ceph-mds_containers:
ceph_mds_containers:
belongs_to:
- all_containers
ceph-mds_hosts:
ceph_mds_hosts:
belongs_to:
- hosts
ceph-nfs_containers:
ceph_nfs_containers:
belongs_to:
- all_containers
ceph-nfs_hosts:
ceph_nfs_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -31,7 +31,7 @@ component_skel:
container_skel:
cinder_api_container:
belongs_to:
- storage-infra_containers
- storage_infra_containers
contains:
- cinder_api
- cinder_scheduler
@@ -52,10 +52,10 @@ container_skel:
physical_skel:
storage-infra_containers:
storage_infra_containers:
belongs_to:
- all_containers
storage-infra_hosts:
storage_infra_hosts:
belongs_to:
- hosts
storage_containers:
+1 -1
View File
@@ -23,7 +23,7 @@ container_skel:
galera_container:
belongs_to:
- database_containers
- shared-infra_containers
- shared_infra_containers
contains:
- galera
+1 -1
View File
@@ -23,7 +23,7 @@ container_skel:
glance_container:
belongs_to:
- image_containers
- os-infra_containers
- os_infra_containers
contains:
- glance_api
+1 -1
View File
@@ -29,7 +29,7 @@ container_skel:
heat_api_container:
belongs_to:
- orchestration_containers
- os-infra_containers
- os_infra_containers
contains:
- heat_api_cfn
- heat_api
+1 -1
View File
@@ -23,7 +23,7 @@ container_skel:
horizon_container:
belongs_to:
- dashboard_containers
- os-infra_containers
- os_infra_containers
contains:
- horizon
+9 -9
View File
@@ -34,13 +34,13 @@ component_skel:
container_skel:
ironic_api_container:
belongs_to:
- ironic-infra_containers
- ironic_infra_containers
contains:
- ironic_api
- ironic_conductor
ironic_compute_container:
belongs_to:
- ironic-compute_containers
- ironic_compute_containers
contains:
- ironic_compute
- ironic_console
@@ -49,26 +49,26 @@ container_skel:
is_metal: false
ironic_inspector_container:
belongs_to:
- ironic-inspector_containers
- ironic_inspector_containers
contains:
- ironic_inspector
physical_skel:
ironic-infra_containers:
ironic_infra_containers:
belongs_to:
- all_containers
ironic-infra_hosts:
ironic_infra_hosts:
belongs_to:
- hosts
ironic-compute_containers:
ironic_compute_containers:
belongs_to:
- all_containers
ironic-compute_hosts:
ironic_compute_hosts:
belongs_to:
- hosts
ironic-inspector_containers:
ironic_inspector_containers:
belongs_to:
- all_containers
ironic-inspector_hosts:
ironic_inspector_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -21,14 +21,14 @@ component_skel:
container_skel:
k8s_container:
belongs_to:
- cluster-api_containers
- cluster_api_containers
contains:
- k8s_capi
physical_skel:
cluster-api_containers:
cluster_api_containers:
belongs_to:
- all_containers
cluster-api_hosts:
cluster_api_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -24,14 +24,14 @@ component_skel:
container_skel:
magnum_container:
belongs_to:
- magnum-infra_containers
- magnum_infra_containers
contains:
- magnum
physical_skel:
magnum-infra_containers:
magnum_infra_containers:
belongs_to:
- all_containers
magnum-infra_hosts:
magnum_infra_hosts:
belongs_to:
- hosts
+6 -6
View File
@@ -29,13 +29,13 @@ component_skel:
container_skel:
manila_container:
belongs_to:
- manila-infra_containers
- manila_infra_containers
contains:
- manila_api
- manila_scheduler
manila_data_container:
belongs_to:
- manila-data_containers
- manila_data_containers
contains:
- manila_data
- manila_share
@@ -43,15 +43,15 @@ container_skel:
is_metal: true
physical_skel:
manila-data_containers:
manila_data_containers:
belongs_to:
- all_containers
manila-data_hosts:
manila_data_hosts:
belongs_to:
- hosts
manila-infra_containers:
manila_infra_containers:
belongs_to:
- all_containers
manila-infra_hosts:
manila_infra_hosts:
belongs_to:
- hosts
+6 -6
View File
@@ -27,28 +27,28 @@ component_skel:
container_skel:
masakari_api_container:
belongs_to:
- masakari-infra_containers
- masakari_infra_containers
contains:
- masakari_engine
- masakari_api
masakari_monitors_container:
belongs_to:
- masakari-monitor_containers
- masakari_monitor_containers
contains:
- masakari_monitor
properties:
is_metal: true
physical_skel:
masakari-monitor_containers:
masakari_monitor_containers:
belongs_to:
- all_containers
masakari-monitor_hosts:
masakari_monitor_hosts:
belongs_to:
- hosts
masakari-infra_containers:
masakari_infra_containers:
belongs_to:
- all_containers
masakari-infra_hosts:
masakari_infra_hosts:
belongs_to:
- hosts
+1 -1
View File
@@ -23,7 +23,7 @@ container_skel:
memcached_container:
belongs_to:
- memcaching_containers
- shared-infra_containers
- shared_infra_containers
contains:
- memcached
+3 -3
View File
@@ -30,7 +30,7 @@ component_skel:
container_skel:
mistral_container:
belongs_to:
- mistral-infra_containers
- mistral_infra_containers
contains:
- mistral_api
- mistral_engine
@@ -38,9 +38,9 @@ container_skel:
- mistral_notifier
physical_skel:
mistral-infra_containers:
mistral_infra_containers:
belongs_to:
- all_containers
mistral-infra_hosts:
mistral_infra_hosts:
belongs_to:
- hosts
+12 -12
View File
@@ -58,7 +58,7 @@ container_skel:
neutron_agents_container:
belongs_to:
- network_containers
- network-agent_containers
- network_agent_containers
contains:
- ironic_neutron_agent
- neutron_agent
@@ -74,12 +74,12 @@ container_skel:
neutron_server_container:
belongs_to:
- network_containers
- network-infra_containers
- network_infra_containers
contains:
- neutron_server
neutron_ovn_gateway_container:
belongs_to:
- network-gateway_containers
- network_gateway_containers
contains:
- neutron_ovn_controller
- neutron_ovn_gateway
@@ -87,7 +87,7 @@ container_skel:
is_metal: true
neutron_ovn_northd_container:
belongs_to:
- network-northd_containers
- network_northd_containers
contains:
- neutron_ovn_northd
@@ -98,27 +98,27 @@ physical_skel:
network_hosts:
belongs_to:
- hosts
network-agent_containers:
network_agent_containers:
belongs_to:
- all_containers
network-agent_hosts:
network_agent_hosts:
belongs_to:
- hosts
network-infra_containers:
network_infra_containers:
belongs_to:
- all_containers
network-infra_hosts:
network_infra_hosts:
belongs_to:
- hosts
network-gateway_containers:
network_gateway_containers:
belongs_to:
- all_containers
network-gateway_hosts:
network_gateway_hosts:
belongs_to:
- hosts
network-northd_containers:
network_northd_containers:
belongs_to:
- all_containers
network-northd_hosts:
network_northd_hosts:
belongs_to:
- hosts
+10 -10
View File
@@ -37,8 +37,8 @@ component_skel:
container_skel:
nova_api_container:
belongs_to:
- compute-infra_containers
- os-infra_containers
- compute_infra_containers
- os_infra_containers
contains:
- nova_api_metadata
- nova_api_os_compute
@@ -48,8 +48,8 @@ container_skel:
nova_compute_container:
belongs_to:
- compute_containers
- kvm-compute_containers
- qemu-compute_containers
- kvm_compute_containers
- qemu_compute_containers
contains:
- neutron_openvswitch_agent
- neutron_sriov_nic_agent
@@ -60,10 +60,10 @@ container_skel:
physical_skel:
compute-infra_containers:
compute_infra_containers:
belongs_to:
- all_containers
compute-infra_hosts:
compute_infra_hosts:
belongs_to:
- hosts
compute_containers:
@@ -72,15 +72,15 @@ physical_skel:
compute_hosts:
belongs_to:
- hosts
kvm-compute_containers:
kvm_compute_containers:
belongs_to:
- all_containers
kvm-compute_hosts:
kvm_compute_hosts:
belongs_to:
- hosts
qemu-compute_containers:
qemu_compute_containers:
belongs_to:
- all_containers
qemu-compute_hosts:
qemu_compute_hosts:
belongs_to:
- hosts
+11 -11
View File
@@ -14,16 +14,16 @@
# limitations under the License.
component_skel:
octavia-api:
octavia_api:
belongs_to:
- octavia_all
octavia-worker:
octavia_worker:
belongs_to:
- octavia_all
octavia-housekeeping:
octavia_housekeeping:
belongs_to:
- octavia_all
octavia-health-manager:
octavia_health_manager:
belongs_to:
- octavia_all
@@ -31,17 +31,17 @@ component_skel:
container_skel:
octavia_server_container:
belongs_to:
- octavia-infra_containers
- octavia_infra_containers
contains:
- octavia-api
- octavia-worker
- octavia-housekeeping
- octavia-health-manager
- octavia_api
- octavia_worker
- octavia_housekeeping
- octavia_health_manager
physical_skel:
octavia-infra_containers:
octavia_infra_containers:
belongs_to:
- all_containers
octavia-infra_hosts:
octavia_infra_hosts:
belongs_to:
- hosts
+2 -2
View File
@@ -14,9 +14,9 @@
# limitations under the License.
physical_skel:
os-infra_containers:
os_infra_containers:
belongs_to:
- all_containers
os-infra_hosts:
os_infra_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -22,15 +22,15 @@ component_skel:
container_skel:
repo_container:
belongs_to:
- repo-infra_containers
- repo_infra_containers
contains:
- pkg_repo
physical_skel:
repo-infra_hosts:
repo_infra_hosts:
belongs_to:
- hosts
repo-infra_containers:
repo_infra_containers:
belongs_to:
- all_containers
+4 -4
View File
@@ -22,15 +22,15 @@ component_skel:
container_skel:
placement_container:
belongs_to:
- os-infra_containers
- placement-infra_containers
- os_infra_containers
- placement_infra_containers
contains:
- placement_api
physical_skel:
placement-infra_containers:
placement_infra_containers:
belongs_to:
- all_containers
placement-infra_hosts:
placement_infra_hosts:
belongs_to:
- hosts
+1 -1
View File
@@ -23,7 +23,7 @@ container_skel:
rabbit_mq_container:
belongs_to:
- mq_containers
- shared-infra_containers
- shared_infra_containers
contains:
- rabbitmq
+2 -2
View File
@@ -14,9 +14,9 @@
# limitations under the License.
physical_skel:
shared-infra_containers:
shared_infra_containers:
belongs_to:
- all_containers
shared-infra_hosts:
shared_infra_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -22,7 +22,7 @@ component_skel:
container_skel:
swift_remote_container:
belongs_to:
- swift-remote_containers
- swift_remote_containers
contains:
- swift_remote
properties:
@@ -30,9 +30,9 @@ container_skel:
physical_skel:
swift-remote_containers:
swift_remote_containers:
belongs_to:
- remote_containers
swift-remote_hosts:
swift_remote_hosts:
belongs_to:
- remote
+3 -3
View File
@@ -31,7 +31,7 @@ component_skel:
container_skel:
swift_proxy_container:
belongs_to:
- swift-proxy_containers
- swift_proxy_containers
contains:
- swift_proxy
swift_acc_container:
@@ -64,9 +64,9 @@ physical_skel:
swift_hosts:
belongs_to:
- hosts
swift-proxy_containers:
swift_proxy_containers:
belongs_to:
- all_containers
swift-proxy_hosts:
swift_proxy_hosts:
belongs_to:
- hosts
+3 -3
View File
@@ -31,7 +31,7 @@ component_skel:
container_skel:
trove_api_container:
belongs_to:
- trove-infra_containers
- trove_infra_containers
contains:
- trove_api
- trove_conductor
@@ -39,9 +39,9 @@ container_skel:
physical_skel:
trove-infra_containers:
trove_infra_containers:
belongs_to:
- all_containers
trove-infra_hosts:
trove_infra_hosts:
belongs_to:
- hosts
+1 -1
View File
@@ -23,7 +23,7 @@ container_skel:
utility_container:
belongs_to:
- operator_containers
- shared-infra_containers
- shared_infra_containers
contains:
- utility
+6 -6
View File
@@ -10,12 +10,12 @@ component_skel:
container_skel:
zun_api_container:
belongs_to:
- zun-infra_containers
- zun_infra_containers
contains:
- zun_api
zun_compute_container:
belongs_to:
- zun-compute_containers
- zun_compute_containers
contains:
- neutron_openvswitch_agent
- neutron_sriov_nic_agent
@@ -24,15 +24,15 @@ container_skel:
is_metal: true
physical_skel:
zun-compute_containers:
zun_compute_containers:
belongs_to:
- all_containers
zun-compute_hosts:
zun_compute_hosts:
belongs_to:
- hosts
zun-infra_containers:
zun_infra_containers:
belongs_to:
- all_containers
zun-infra_hosts:
zun_infra_hosts:
belongs_to:
- hosts
+5 -5
View File
@@ -16,12 +16,12 @@
ceph_client_package_state: "{{ package_state }}"
## ceph-ansible configuration
mon_group_name: ceph-mon
mon_group_name: ceph_mon
mgr_group_name: "{{ mon_group_name }}"
osd_group_name: ceph-osd
rgw_group_name: ceph-rgw
mds_group_name: ceph-mds
nfs_group_name: ceph-nfs
osd_group_name: ceph_osd
rgw_group_name: ceph_rgw
mds_group_name: ceph_mds
nfs_group_name: ceph_nfs
# NOTE: Ubuntu 24.04 at the moment does not have a community repository and Ceph is only installable from UCA or native repository
# Values of origin/source are overriden for Ubuntu 24.04 explicitly to ensure seamless installation out of the box
+1 -1
View File
@@ -36,7 +36,7 @@ ceph_conf_overrides: "{{ (ceph_conf_overrides_rgw | default({})) | combine(ceph_
# Disable the NFS gateway PPA and package install by default as it is not
# needed.
nfs_file_gw: "{{ (('ceph-nfs' in groups) and ('ceph-mds' in groups)) }}"
nfs_file_gw: "{{ (('ceph_nfs' in groups) and ('ceph_mds' in groups)) }}"
nfs_obj_gw: False
nfs_ganesha_stable: True
nfs_ganesha_stable_deb_repo: http://ppa.launchpad.net/nfs-ganesha/nfs-ganesha-5/ubuntu
+56 -4
View File
@@ -181,6 +181,55 @@ class GroupConflict(Exception):
pass
def _check_ip_conflict_on_merge(existing_group, new_group):
"""Check for IP conflicts when merging two host groups.
:param existing_group: ``dict`` The group already in the config.
:param new_group: ``dict`` The group to be merged.
:raises: MultipleIpForHostError
"""
for hostname, entries in new_group.items():
if hostname in existing_group:
existing_ip = existing_group[hostname].get('ip')
new_ip = entries.get('ip')
if existing_ip and new_ip and existing_ip != new_ip:
raise MultipleIpForHostError(hostname, existing_ip, new_ip)
def _normalize_user_config(raw_config):
"""Normalize group names in user config and merge dashed/underscored names
This function iterates through the raw configuration, normalizes group
names by replacing dashes with underscores, and merges groups that become
duplicates after normalization.
If a group with a dash and a group with an underscore (which would result
in the same name) are both defined as host groups (dictionaries),
their hosts are merged. During the merge, it checks for IP address
conflicts for any host defined in both groups.
For non-dictionary values, the last-seen value for a given normalized
key will overwrite previous ones.
:param raw_config: ``dict`` The user configuration loaded from files.
:returns: A ``dict`` with normalized and merged configuration.
:raises: MultipleIpForHostError
"""
normalized_config = {}
for key, value in raw_config.items():
normalized_key = key.replace('-', '_')
if normalized_key in normalized_config:
existing_value = normalized_config[normalized_key]
if isinstance(existing_value, dict) and isinstance(value, dict):
_check_ip_conflict_on_merge(existing_value, value)
existing_value.update(value)
else:
normalized_config[normalized_key] = value
else:
normalized_config[normalized_key] = value
return normalized_config
def _hosts_in_group(group, inventory):
"""Generator that flattens nested inventory data.
@@ -326,6 +375,7 @@ def _append_to_host_groups(inventory, container_type, assignment, host_type,
r'\g<group>_all',
container_type
)
physical_group_type = physical_group_type.replace('-', '_')
if physical_group_type not in inventory:
logger.debug("Added %s group to inventory", physical_group_type)
inventory[physical_group_type] = {'hosts': []}
@@ -415,6 +465,7 @@ def _add_container_hosts(assignment, config, container_group, container_type,
r'\g<group>_hosts',
container_type
)
physical_host_type = physical_host_type.replace('-', '_')
container_name = re.sub(r'_', '-', f'{container_group}')
# If the physical host type is not in config return
if physical_host_type not in config:
@@ -469,7 +520,7 @@ def _add_container_hosts(assignment, config, container_group, container_type,
)
physical_host = inventory['_meta']['hostvars'][host_type]
container_host_type = '{}-host_containers'.format(host_type)
container_host_type = '{}_host_containers'.format(host_type)
if 'container_types' not in physical_host:
physical_host['container_types'] = container_host_type
elif physical_host['container_types'] != container_host_type:
@@ -818,7 +869,7 @@ def container_skel_load(container_skel, inventory, config):
)
for host_type in inventory[physical_host_type]['hosts']:
container_mapping = inventory[key]['children']
host_type_containers = '{}-host_containers'.format(host_type)
host_type_containers = '{}_host_containers'.format(host_type)
if host_type_containers in inventory:
du.append_if(array=container_mapping,
item=host_type_containers)
@@ -864,7 +915,7 @@ def container_skel_load(container_skel, inventory, config):
for group in p_net.get('group_binds', list()):
_add_additional_networks(
key=group,
key=group.replace('-', '_'),
inventory=inventory,
ip_q=ip_from_q,
q_name=q_name,
@@ -1211,10 +1262,11 @@ def generate(config=None,
_prepare_debug_logger()
try:
user_defined_config = filesys.load_user_configuration(config)
raw_user_defined_config = filesys.load_user_configuration(config)
except filesys.MissingDataSource as ex:
raise SystemExit(ex)
user_defined_config = _normalize_user_config(raw_user_defined_config)
base_env_dir = environment
base_env = filesys.load_environment(base_env_dir, {})
environment = filesys.load_environment(config, base_env)
@@ -0,0 +1,38 @@
---
prelude: >
Group definitions for OpenStack-Ansible were changed by replacing dashes
with underscores. Please check the ``Upgrade`` section for more detatails
on how this affects you.
upgrade:
- |
Group ``metering-group_container`` has been renamed to
``ceilometer_compute_container`` for general consistency across
group naming logic
- |
All OpenStack-Ansible groups, conf.d and openstack_user_config.yml
definitions were renamed by replacing all existing dashes with
underscores.
This change was made in order to comply with Ansible groups naming
convention, which has been introduced back in Ansible 2.8.
While old definitions should work after the upgrade, it is still
recommended to replace group names with underscores inside of the
``openstack_user_config.yml`` and conf.d files, as well as the
``openstack_inventory.json``, as the dynamic_inventory will not perform
the conversion. Please note, that old group names can be also referenced
in ``openstack_user_config.yml`` inside of the``provider_networks`` ->
``group_binds``. So please ensure, that network bindings are also updated
and contain group names only with underscores in their names.
Ansible will issue a warning in case invalid group names are present in
the ``openstack_inventory.json``, but will proceed with the replacement
of dashes with underscores.
You can ignore these warning messages and return the previous behavior
by adding ``ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore`` to
``/etc/openstack_deploy/user.rc`` or silence warnings and accept conversion
to the new group names by adding
``ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=silently`` to the
``/etc/openstack_deploy/user.rc``.
Change of the value for ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS may affect
environments, where deploy hosts are also used actively to run 3rd party
Ansible roles and playbooks.
You can read more about the variable and it's effect on
`Ansible Community Documentation <https://docs.ansible.com/projects/ansible/latest/reference_appendices/config.html#transform-invalid-group-chars>`_
+1 -1
View File
@@ -59,6 +59,6 @@ export ANSIBLE_FORKS="${ANSIBLE_FORKS:-OSA_ANSIBLE_FORKS}"
export ANSIBLE_FORCE_HANDLERS="${ANSIBLE_FORCE_HANDLERS:-True}"
export ANSIBLE_PYTHON_INTERPRETER="${ANSIBLE_PYTHON_INTERPRETER:-OSA_ANSIBLE_PYTHON_INTERPRETER}"
export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS="${ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS:-ignore}"
export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS="${ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS:-always}"
export ANSIBLE_CALLBACK_RESULT_FORMAT="${ANSIBLE_CALLBACK_RESULT_FORMAT:-yaml}"
+266 -124
View File
@@ -133,7 +133,7 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
inventory = None
expected_groups = [
'aio1-host_containers',
'aio1_host_containers',
'all',
'all_containers',
'adjutant_all',
@@ -157,30 +157,31 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'ceilometer_agent_compute',
'ceilometer_agent_notification',
'ceilometer_central_container',
'ceilometer_compute_container',
'ceph_all',
'ceph-mon_all',
'ceph-mon_containers',
'ceph-mon_container',
'ceph-mon_hosts',
'ceph-mon',
'ceph-mds',
'ceph-mds_containers',
'ceph-mds_container',
'ceph-mds_hosts',
'ceph-osd_all',
'ceph-osd_containers',
'ceph-osd_container',
'ceph-osd_hosts',
'ceph-osd',
'ceph-rgw_all',
'ceph-rgw_containers',
'ceph-rgw_container',
'ceph-rgw_hosts',
'ceph-rgw',
'ceph-nfs',
'ceph-nfs_containers',
'ceph-nfs_container',
'ceph-nfs_hosts',
'ceph_mon_all',
'ceph_mon_containers',
'ceph_mon_container',
'ceph_mon_hosts',
'ceph_mon',
'ceph_mds',
'ceph_mds_containers',
'ceph_mds_container',
'ceph_mds_hosts',
'ceph_osd_all',
'ceph_osd_containers',
'ceph_osd_container',
'ceph_osd_hosts',
'ceph_osd',
'ceph_rgw_all',
'ceph_rgw_containers',
'ceph_rgw_container',
'ceph_rgw_hosts',
'ceph_rgw',
'ceph_nfs',
'ceph_nfs_containers',
'ceph_nfs_container',
'ceph_nfs_hosts',
'cinder_all',
'cinder_api',
'cinder_api_container',
@@ -195,14 +196,14 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'cloudkitty_engine',
'rating_hosts',
'rating_all',
'cluster-api_all',
'cluster-api_containers',
'cluster-api_hosts',
'cluster_api_all',
'cluster_api_containers',
'cluster_api_hosts',
'coordination_containers',
'coordination_hosts',
'compute-infra_all',
'compute-infra_containers',
'compute-infra_hosts',
'compute_infra_all',
'compute_infra_containers',
'compute_infra_hosts',
'compute_all',
'compute_containers',
'compute_hosts',
@@ -255,9 +256,9 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'image_all',
'image_containers',
'image_hosts',
'ironic-infra_all',
'ironic-infra_containers',
'ironic-infra_hosts',
'ironic_infra_all',
'ironic_infra_containers',
'ironic_infra_hosts',
'ironic_all',
'ironic_api',
'ironic_api_container',
@@ -265,61 +266,61 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'ironic_console',
'ironic_compute',
'ironic_compute_container',
'ironic-compute_containers',
'ironic-compute_all',
'ironic-compute_hosts',
'ironic-inspector_all',
'ironic_compute_containers',
'ironic_compute_all',
'ironic_compute_hosts',
'ironic_inspector_all',
'ironic_inspector',
'ironic-inspector_containers',
'ironic-inspector_hosts',
'ironic_inspector_containers',
'ironic_inspector_hosts',
'ironic_inspector_container',
'ironic_neutron_agent',
'k8s_all',
'k8s_capi',
'k8s_container',
'key-manager_containers',
'key-manager_hosts',
'key-manager_all',
'key_manager_containers',
'key_manager_hosts',
'key_manager_all',
'keystone',
'keystone_all',
'keystone_container',
'kvm-compute_containers',
'kvm-compute_hosts',
'kvm_compute_containers',
'kvm_compute_hosts',
'lxc_hosts',
'magnum',
'magnum-infra_all',
'magnum-infra_containers',
'magnum-infra_hosts',
'magnum_infra_all',
'magnum_infra_containers',
'magnum_infra_hosts',
'magnum_all',
'magnum_container',
'manila_all',
'manila_api',
'manila_container',
'manila_data',
'manila-data_all',
'manila_data_all',
'manila_data_container',
'manila-data_containers',
'manila-data_hosts',
'manila-infra_all',
'manila-infra_containers',
'manila-infra_hosts',
'manila_data_containers',
'manila_data_hosts',
'manila_infra_all',
'manila_infra_containers',
'manila_infra_hosts',
'manila_scheduler',
'manila_share',
'masakari_all',
'masakari_api',
'masakari_api_container',
'masakari_engine',
'masakari-infra_all',
'masakari-infra_containers',
'masakari-infra_hosts',
'masakari_infra_all',
'masakari_infra_containers',
'masakari_infra_hosts',
'masakari_monitor',
'masakari-monitor_all',
'masakari-monitor_containers',
'masakari_monitor_all',
'masakari_monitor_containers',
'masakari_monitors_container',
'masakari-monitor_hosts',
'mistral-infra_all',
'mistral-infra_containers',
'mistral-infra_hosts',
'masakari_monitor_hosts',
'mistral_infra_all',
'mistral_infra_containers',
'mistral_infra_hosts',
'mistral_all',
'mistral_container',
'mistral_api',
@@ -329,23 +330,23 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'mano_all',
'mano_containers',
'mano_hosts',
'octavia-infra_hosts',
'octavia_infra_hosts',
'octavia_all',
'octavia-api',
'octavia_api',
'octavia_server_container',
'octavia-worker',
'octavia-housekeeping',
'octavia-health-manager',
'octavia-infra_containers',
'octavia-infra_all',
'placement-infra_all',
'placement-infra_containers',
'placement-infra_hosts',
'octavia_worker',
'octavia_housekeeping',
'octavia_health_manager',
'octavia_infra_containers',
'octavia_infra_all',
'placement_infra_all',
'placement_infra_containers',
'placement_infra_hosts',
'placement_all',
'placement_container',
'placement_api',
'qemu-compute_containers',
'qemu-compute_hosts',
'qemu_compute_containers',
'qemu_compute_hosts',
'reservation_all',
'reservation_containers',
'reservation_hosts',
@@ -354,24 +355,23 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'trove_conductor',
'trove_taskmanager',
'trove_api_container',
'trove-infra_containers',
'trove-infra_hosts',
'trove-infra_all',
'trove_infra_containers',
'trove_infra_hosts',
'trove_infra_all',
'memcached',
'memcached_all',
'memcached_container',
'memcaching_containers',
'memcaching_hosts',
'metering-alarm_all',
'metering-alarm_containers',
'metering-alarm_hosts',
'metering-compute_all',
'metering-compute_container',
'metering-compute_containers',
'metering-compute_hosts',
'metering-infra_all',
'metering-infra_containers',
'metering-infra_hosts',
'metering_alarm_all',
'metering_alarm_containers',
'metering_alarm_hosts',
'metering_compute_all',
'metering_compute_containers',
'metering_compute_hosts',
'metering_infra_all',
'metering_infra_containers',
'metering_infra_hosts',
'metrics_all',
'metrics_containers',
'metrics_hosts',
@@ -380,12 +380,12 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'network_all',
'network_containers',
'network_hosts',
'network-agent_containers',
'network-agent_hosts',
'network-gateway_containers',
'network-gateway_hosts',
'network-infra_containers',
'network-infra_hosts',
'network_agent_containers',
'network_agent_hosts',
'network_gateway_containers',
'network_gateway_hosts',
'network_infra_containers',
'network_infra_hosts',
'neutron_agent',
'neutron_agents_container',
'neutron_all',
@@ -394,8 +394,8 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'neutron_l3_agent',
'neutron_metadata_agent',
'neutron_metering_agent',
'network-northd_containers',
'network-northd_hosts',
'network_northd_containers',
'network_northd_hosts',
'neutron_openvswitch_agent',
'neutron_ovn_controller',
'neutron_ovn_gateway',
@@ -419,8 +419,8 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'orchestration_all',
'orchestration_containers',
'orchestration_hosts',
'os-infra_containers',
'os-infra_hosts',
'os_infra_containers',
'os_infra_hosts',
'pkg_repo',
'rabbit_mq_container',
'rabbitmq',
@@ -430,10 +430,10 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'registration_hosts',
'remote',
'remote_containers',
'repo-infra_all',
'repo-infra_containers',
'repo-infra_hosts',
'repo-infra_all',
'repo_infra_all',
'repo_infra_containers',
'repo_infra_hosts',
'repo_infra_all',
'repo_all',
'repo_container',
'skyline',
@@ -442,20 +442,20 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'skyline_dashboard_containers',
'skyline_dashboard_hosts',
'skyline_dashboard_all',
'shared-infra_all',
'shared-infra_containers',
'shared-infra_hosts',
'storage-infra_all',
'storage-infra_containers',
'storage-infra_hosts',
'shared_infra_all',
'shared_infra_containers',
'shared_infra_hosts',
'storage_infra_all',
'storage_infra_containers',
'storage_infra_hosts',
'storage_all',
'storage_containers',
'storage_hosts',
'swift-proxy_all',
'swift-proxy_containers',
'swift-proxy_hosts',
'swift-remote_containers',
'swift-remote_hosts',
'swift_proxy_all',
'swift_proxy_containers',
'swift_proxy_hosts',
'swift_remote_containers',
'swift_remote_hosts',
'swift_acc',
'swift_acc_container',
'swift_all',
@@ -484,16 +484,16 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'zookeeper',
'zookeeper_all',
'zookeeper_container',
'zun-infra_all',
'zun-infra_containers',
'zun-infra_hosts',
'zun_infra_all',
'zun_infra_containers',
'zun_infra_hosts',
'zun_all',
'zun_api',
'zun_api_container',
'zun_compute',
'zun-compute_containers',
'zun-compute_hosts',
'zun-compute_all',
'zun_compute_containers',
'zun_compute_hosts',
'zun_compute_all',
'zun_compute_container',
]
@@ -774,7 +774,7 @@ class TestConfigChecks(TestConfigCheckBase):
# Even with the same hash seed, different OSes get different results,
# eg. local OS X vs gate's Linux
config = collections.OrderedDict()
config['shared-infra_hosts'] = {
config['shared_infra_hosts'] = {
'host1': {
'ip': '192.168.1.1'
}
@@ -817,7 +817,7 @@ class TestConfigChecks(TestConfigCheckBase):
# Even with the same hash seed, different OSes get different results,
# eg. local OS X vs gate's Linux
config = collections.OrderedDict()
config['shared-infra_hosts'] = {
config['shared_infra_hosts'] = {
'host1': {
'ip': '192.168.1.1'
}
@@ -836,7 +836,7 @@ class TestConfigChecks(TestConfigCheckBase):
def test_correct_hostname_ip_map(self):
config = {
'shared-infra_hosts': {
'shared_infra_hosts': {
'host1': {
'ip': '192.168.1.1'
}
@@ -1332,7 +1332,7 @@ class TestLxcHosts(TestConfigCheckBase):
self.assertEqual(1, len(inventory['lxc_hosts']['hosts']))
def test_lxc_hosts_members(self):
self.add_host('shared-infra_hosts', 'aio2', '172.29.236.101')
self.add_host('shared_infra_hosts', 'aio2', '172.29.236.101')
inventory = get_inventory()
self.assertIn('aio2', inventory['lxc_hosts']['hosts'])
self.assertIn('aio1', inventory['lxc_hosts']['hosts'])
@@ -1383,7 +1383,7 @@ class TestLxcHosts(TestConfigCheckBase):
"""
ansible_host_address = '172.20.0.101'
management_address = '172.29.236.101'
self.add_host('shared-infra_hosts', 'aio2', ansible_host_address, management_address)
self.add_host('shared_infra_hosts', 'aio2', ansible_host_address, management_address)
inventory = get_inventory()
hostvars = inventory['_meta']['hostvars']['aio2']
self.assertEqual(ansible_host_address, hostvars['ansible_host'])
@@ -1608,7 +1608,7 @@ class TestNestsGroups(TestConfigCheckBase):
self.assertEqual(nest_hosts_expected, nest_hosts)
def test_nest_containers(self):
host_containers_group = 'aio1-host_containers'
host_containers_group = 'aio1_host_containers'
nest_containers_expected = set([host_containers_group])
nest_containers = set(self.inventory['nest_containers']['children'])
# Ensure we have only lxc_hosts in children
@@ -1618,5 +1618,147 @@ class TestNestsGroups(TestConfigCheckBase):
# Ensure that host-containers group is not empty
self.assertTrue(len(self.inventory[host_containers_group]['hosts']) > 0)
class TestGroupNameNormalization(TestConfigCheckBase):
def test_dashed_group_is_normalized(self):
"""
Test that a group with a dash is normalized to an underscore.
"""
self.add_config_key('my-test_hosts', {})
self.add_host('my-test_hosts', 'testhost1', '10.0.0.1')
self.write_config()
inventory = get_inventory()
# The normalized group should exist
self.assertIn('my_test_hosts', inventory)
# The original dashed group should not exist
self.assertNotIn('my-test_hosts', inventory)
# The host should be in the normalized group
self.assertIn('testhost1', inventory['my_test_hosts']['hosts'])
def test_dashed_and_underscored_groups_are_merged(self):
"""
Test that hosts from dashed and underscored groups are merged.
"""
# Add a group with a dash
self.add_config_key('merge-test_hosts', {})
self.add_host('merge-test_hosts', 'host-dash', '10.0.0.2')
# Add the "same" group with an underscore
self.add_config_key('merge_test_hosts', {})
self.add_host('merge_test_hosts', 'host-underscore', '10.0.0.3')
self.write_config()
inventory = get_inventory()
# The normalized group should exist
self.assertIn('merge_test_hosts', inventory)
# The original dashed group should not exist
self.assertNotIn('merge-test_hosts', inventory)
# Both hosts should be in the merged group
hosts = inventory['merge_test_hosts']['hosts']
self.assertIn('host-dash', hosts)
self.assertIn('host-underscore', hosts)
self.assertEqual(len(hosts), 2)
def test_merge_groups_with_ip_conflict_raises_error(self):
"""
Test that merging groups with a host IP conflict raises an error.
"""
# Add a group with a dash
self.add_config_key('conflict-test_hosts', {})
self.add_host('conflict-test_hosts', 'conflicthost', '10.0.0.4')
# Add the "same" group with an underscore, and a host with the same
# name but different IP.
self.add_config_key('conflict_test_hosts', {})
self.add_host('conflict_test_hosts', 'conflicthost', '10.0.0.5')
self.write_config()
with self.assertRaises(di.MultipleIpForHostError) as context:
get_inventory()
expected_msg = ("Host conflicthost has both 10.0.0.4 and 10.0.0.5 "
"assigned")
self.assertEqual(str(context.exception), expected_msg)
def test_storage_infra_normalization_and_container_creation(self):
"""
Test that `storage-infra_hosts` is treated as `storage_infra_hosts`
and that containers are generated correctly.
"""
inventory = get_inventory()
self.assertIn('storage_infra_hosts', inventory)
self.assertNotIn('storage-infra_hosts', inventory)
self.assertIn('aio1', inventory['storage_infra_hosts']['hosts'])
class TestProviderNetworkGroupBindNormalization(TestConfigCheckBase):
def setUp(self):
super(TestProviderNetworkGroupBindNormalization, self).setUp()
self.env_path = os.path.join(TARGET_DIR, 'env.d/my-test.yml')
self._create_test_env()
self.add_config_key('my_test_group_hosts', {})
self.add_host('my_test_group_hosts', 'testhost1', '10.10.10.10')
self.add_provider_network('test_net', '192.168.100.0/24')
pns = self.user_defined_config['global_overrides']['provider_networks']
new_pn = {
'network': {
'ip_from_q': 'test_net',
'is_management_address': True,
'container_bridge': 'br-test',
'container_interface': 'eth-test',
'container_type': 'veth',
'group_binds': [
'my-test-group_all'
]
}
}
pns.append(new_pn)
self.write_config()
self.inventory = get_inventory()
def tearDown(self):
super(TestProviderNetworkGroupBindNormalization, self).tearDown()
os.remove(self.env_path)
os.rmdir(os.path.dirname(self.env_path))
def _create_test_env(self):
data = """
physical_skel:
my_test_group_hosts:
belongs_to:
- my_test_group_all
"""
env = yaml.safe_load(data)
env_dir = os.path.dirname(self.env_path)
if not os.path.exists(env_dir):
os.mkdir(env_dir)
with open(self.env_path, 'w') as f:
f.write(yaml.safe_dump(env))
def test_group_bind_is_normalized(self):
"""
Test that a dashed group name in group_binds is normalized.
"""
hostvars = self.inventory['_meta']['hostvars']['testhost1']
container_networks = hostvars['container_networks']
self.assertIn('test_net_address', container_networks)
net_details = container_networks['test_net_address']
self.assertEqual(net_details['bridge'], 'br-test')
self.assertNotIn('interface', net_details.keys())
self.assertEqual(net_details['address'], '10.10.10.10')
if __name__ == '__main__':
unittest.main(catchbreak=True)