diff --git a/ci/roles/trunk/tasks/main.yml b/ci/roles/trunk/tasks/main.yml index c48a1734..b82e559b 100644 --- a/ci/roles/trunk/tasks/main.yml +++ b/ci/roles/trunk/tasks/main.yml @@ -53,7 +53,7 @@ - ip_address: 10.5.6.55 register: subport -- name: Create trunk +- name: Create trunk without subports openstack.cloud.trunk: cloud: "{{ cloud }}" state: present @@ -61,15 +61,17 @@ port: "{{ parent_port_name }}" register: trunk -- debug: var=trunk +- name: Display return values of trunk module + ansible.builtin.debug: + var: trunk -- name: assert return values of trunk module - assert: +- 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 +- name: Add subport to trunk by name openstack.cloud.trunk: cloud: "{{ cloud }}" state: present @@ -79,14 +81,66 @@ - port: "{{ subport_name }}" segmentation_type: vlan segmentation_id: 123 + register: trunk_subport_by_name -- name: Update subport from trunk +- 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: diff --git a/plugins/modules/trunk.py b/plugins/modules/trunk.py index 4d918e24..b7dbe187 100644 --- a/plugins/modules/trunk.py +++ b/plugins/modules/trunk.py @@ -201,6 +201,11 @@ class TrunkModule(OpenStackModule): if state == 'present' and not trunk: # create trunk trunk = self._create(name_or_id, port) + + # add sub ports + update = self._build_update(trunk, sub_ports) + trunk = self._update(trunk, update) + self.exit_json(changed=True, trunk=trunk.to_dict(computed=False)) elif state == 'present' and trunk: @@ -232,7 +237,7 @@ class TrunkModule(OpenStackModule): if found is False: psp = self.params['sub_ports'] or [] for k in psp: - if sp['name'] == k['port']: + if sp['name'] == k['port'] or sp['id'] == k['port']: spobj = { 'port_id': sp['id'], 'segmentation_type': k['segmentation_type'],