Files
kayobe/ansible/roles/kolla-ansible-host-vars/tests/test.yml
Mark Goddard ad64ebc921 Add support for customising Neutron physical network names
Previously Kolla Ansible hard-coded Neutron physical networks starting
at physnet1 up to physnetN, matching the number of interfaces in
neutron_external_interface and bridges in neutron_bridge_name.

Sometimes we may want to customise the physical network names used.
This may be to allow for not all hosts having access to all physical
networks, or to use more descriptive names.

For example, in an environment with a separate physical network for
Ironic provisioning, controllers might have access to two physical
networks, while compute nodes have access to one.

This change extends the 'physical_network' network attribute to make it
possible to customise the Neutron physical network names used for the
OVS, OVN, Linux bridge and OVS DPDK plugins. The default behaviour is
unchanged.

Depends-On: https://review.opendev.org/c/openstack/kolla-ansible/+/922320
Change-Id: I214444c60653f484fcda6275cc725879d14f9e7a
2024-09-06 10:00:50 +00:00

159 lines
6.0 KiB
YAML

---
- name: Test kolla-ansible-host-vars role extras
hosts: localhost
connection: local
tasks:
- name: Add a controller host to the inventory
add_host:
name: test-controller
groups: controllers
ansible_host: "1.2.3.5"
kolla_network_interface: "eth0"
kolla_external_vip_interface: "eth1"
kolla_api_interface: "eth2"
kolla_storage_interface: "eth3"
kolla_cluster_interface: "eth4"
kolla_dns_interface: "eth5"
kolla_neutron_external_interfaces: "eth6,eth7"
kolla_neutron_bridge_names: "br0,br1"
kolla_neutron_physical_networks: "physnet1,physnet2"
kolla_provision_interface: "eth8"
kolla_inspector_dnsmasq_interface: "eth9"
kolla_tunnel_interface: "eth10"
kolla_swift_storage_interface: "eth13"
kolla_swift_replication_interface: "eth14"
- name: Add a compute host to the inventory
add_host:
name: test-compute
groups: compute
ansible_host: "1.2.3.6"
kolla_network_interface: "eth0"
kolla_api_interface: "eth2"
kolla_storage_interface: "eth3"
kolla_neutron_external_interfaces: "eth4,eth5"
kolla_neutron_bridge_names: "br0,br1"
kolla_neutron_physical_networks: "physnet2,physnet3"
kolla_tunnel_interface: "eth6"
- name: Test kolla-ansible-host-vars role extras
hosts: controllers:compute
connection: local
gather_facts: no
tasks:
- name: Create a temporary directory
tempfile:
state: directory
register: tempfile_result
delegate_to: localhost
run_once: true
- block:
- name: Test the kolla-ansible-host-vars role with default values
include_role:
name: ../../kolla-ansible-host-vars
vars:
kolla_ansible_pass_through_host_vars:
- "ansible_host"
- "ansible_port"
- "ansible_ssh_private_key_file"
- "kolla_network_interface"
- "kolla_api_interface"
- "kolla_storage_interface"
- "kolla_cluster_interface"
- "kolla_swift_storage_interface"
- "kolla_swift_replication_interface"
- "kolla_provision_interface"
- "kolla_inspector_dnsmasq_interface"
- "kolla_dns_interface"
- "kolla_tunnel_interface"
- "kolla_external_vip_interface"
- "kolla_neutron_external_interfaces"
- "kolla_neutron_bridge_names"
- "kolla_neutron_physical_networks"
kolla_ansible_pass_through_host_vars_map:
kolla_network_interface: "network_interface"
kolla_api_interface: "api_interface"
kolla_storage_interface: "storage_interface"
kolla_cluster_interface: "cluster_interface"
kolla_swift_storage_interface: "swift_storage_interface"
kolla_swift_replication_interface: "swift_replication_interface"
kolla_provision_interface: "provision_interface"
kolla_inspector_dnsmasq_interface: "ironic_dnsmasq_interface"
kolla_dns_interface: "dns_interface"
kolla_tunnel_interface: "tunnel_interface"
kolla_neutron_external_interfaces: "neutron_external_interface"
kolla_neutron_bridge_names: "neutron_bridge_name"
kolla_neutron_physical_networks: "neutron_physical_networks"
kolla_ansible_inventory_path: "{{ temp_path }}"
- name: Check whether inventory host vars files exist
stat:
path: "{{ temp_path ~ '/host_vars/' ~ inventory_hostname }}"
register: host_vars_stat
- name: Validate inventory host vars files
assert:
that:
- host_vars_stat.stat.exists
- host_vars_stat.stat.size > 0
msg: >
Inventory file {{ temp_path ~ '/host_vars/' ~ inventory_hostname }} was not found.
- name: Read inventory host vars files
slurp:
src: "{{ host_vars_stat.stat.path }}"
register: host_vars_slurp
- name: Validate inventory host vars file contents
assert:
that:
- host_vars_content is defined
- host_vars_content == expected_contents[inventory_hostname]
vars:
host_vars_content: "{{ host_vars_slurp.content | b64decode }}"
expected_contents:
test-controller: |
---
ansible_host: "1.2.3.5"
network_interface: "eth0"
api_interface: "eth2"
storage_interface: "eth3"
cluster_interface: "eth4"
swift_storage_interface: "eth13"
swift_replication_interface: "eth14"
provision_interface: "eth8"
ironic_dnsmasq_interface: "eth9"
dns_interface: "eth5"
tunnel_interface: "eth10"
kolla_external_vip_interface: "eth1"
neutron_external_interface: "eth6,eth7"
neutron_bridge_name: "br0,br1"
neutron_physical_networks: "physnet1,physnet2"
test-compute: |
---
ansible_host: "1.2.3.6"
network_interface: "eth0"
api_interface: "eth2"
storage_interface: "eth3"
tunnel_interface: "eth6"
neutron_external_interface: "eth4,eth5"
neutron_bridge_name: "br0,br1"
neutron_physical_networks: "physnet2,physnet3"
always:
- name: Ensure the temporary directory is removed
file:
path: "{{ temp_path }}"
state: absent
run_once: true
- name: Refresh the inventory
meta: refresh_inventory
rescue:
- name: Flag that a failure occurred
set_fact:
test_failures: "{{ test_failures | default(0) | int + 1 }}"
vars:
temp_path: "{{ tempfile_result.path }}"