--- - name: Create parent network openstack.cloud.network: cloud: "{{ cloud }}" state: present name: "{{ parent_network_name }}" external: true register: parent_network - name: Create parent subnet openstack.cloud.subnet: cloud: "{{ cloud }}" state: present name: "{{ parent_subnet_name }}" network_name: "{{ parent_network_name }}" cidr: 10.5.5.0/24 register: parent_subnet - name: Create parent port openstack.cloud.port: cloud: "{{ cloud }}" state: present name: "{{ parent_port_name }}" network: "{{ parent_network_name }}" fixed_ips: - ip_address: 10.5.5.69 register: parent_port - name: Create subport network openstack.cloud.network: cloud: "{{ cloud }}" state: present name: "{{ subport_network_name }}" external: true register: subport_network - name: Create subport subnet openstack.cloud.subnet: cloud: "{{ cloud }}" state: present name: "{{ subport_subnet_name }}" network_name: "{{ subport_network_name }}" cidr: 10.5.6.0/24 register: subport_subnet - name: Create subport openstack.cloud.port: cloud: "{{ cloud }}" state: present name: "{{ subport_name }}" network: "{{ subport_network_name }}" fixed_ips: - ip_address: 10.5.6.55 register: subport - name: Create trunk without subports openstack.cloud.trunk: cloud: "{{ cloud }}" state: present name: "{{ trunk_name }}" port: "{{ parent_port_name }}" register: trunk - name: Display return values of trunk module ansible.builtin.debug: var: trunk - name: Assert return values of trunk module ansible.builtin.assert: that: # allow new fields to be introduced but prevent fields from being removed - expected_fields|difference(trunk.trunk.keys())|length == 0 - name: Add subport to trunk by name openstack.cloud.trunk: cloud: "{{ cloud }}" state: present name: "{{ trunk_name }}" port: "{{ parent_port_name }}" sub_ports: - port: "{{ subport_name }}" segmentation_type: vlan segmentation_id: 123 register: trunk_subport_by_name - name: Assert the subport is part of the trunk ansible.builtin.assert: that: - trunk_subport_by_name.trunk.sub_ports|length == 1 - name: Remove subport from trunk openstack.cloud.trunk: cloud: "{{ cloud }}" state: present name: "{{ trunk_name }}" port: "{{ parent_port_name }}" sub_ports: [] register: trunk_subport_removed - name: Assert no subports are part of the trunk ansible.builtin.assert: that: - trunk_subport_removed.trunk.sub_ports|length == 0 - name: Add subport to trunk by ID openstack.cloud.trunk: cloud: "{{ cloud }}" state: present name: "{{ trunk_name }}" port: "{{ parent_port_name }}" sub_ports: - port: "{{ subport.port.id }}" segmentation_type: vlan segmentation_id: 123 register: trunk_subport_by_id - name: Assert the subport is part of the trunk ansible.builtin.assert: that: - trunk_subport_by_id.trunk.sub_ports|length == 1 - name: Delete trunk openstack.cloud.trunk: cloud: "{{ cloud }}" state: absent name: "{{ trunk_name }}" - name: Create trunk without subports openstack.cloud.trunk: cloud: "{{ cloud }}" state: present name: "{{ trunk_name }}" port: "{{ parent_port_name }}" sub_ports: - port: "{{ subport.port.id }}" segmentation_type: vlan segmentation_id: 123 register: trunk_with_subports - name: Assert the subport is part of the trunk ansible.builtin.assert: that: - trunk_with_subports.trunk.sub_ports|length == 1 - name: Delete trunk openstack.cloud.trunk: cloud: "{{ cloud }}" state: absent name: "{{ trunk_name }}" - name: Delete subport openstack.cloud.port: cloud: "{{ cloud }}" state: absent name: "{{ subport_name }}" - name: Delete subport subnet openstack.cloud.subnet: cloud: "{{ cloud }}" state: absent name: "{{ subport_subnet_name }}" - name: Delete subport network openstack.cloud.network: cloud: "{{ cloud }}" state: absent name: "{{ subport_network_name }}" - name: Delete parent port openstack.cloud.port: cloud: "{{ cloud }}" state: absent name: "{{ parent_port_name }}" - name: Delete parent subnet openstack.cloud.subnet: cloud: "{{ cloud }}" state: absent name: "{{ parent_subnet_name }}" - name: Delete parent network openstack.cloud.network: cloud: "{{ cloud }}" state: absent name: "{{ parent_network_name }}"