diff --git a/ci/roles/subnet/defaults/main.yml b/ci/roles/subnet/defaults/main.yml index c35469b0b60a8f2e915faef4188b8273051c6c4a..c48397a270b9a36db33ceb0ef7b030e19915fe16 100644 --- a/ci/roles/subnet/defaults/main.yml +++ b/ci/roles/subnet/defaults/main.yml @@ -5,6 +5,7 @@ expected_fields: - created_at - description - dns_nameservers + - dns_publish_fixed_ip - gateway_ip - host_routes - id diff --git a/ci/roles/subnet/tasks/main.yml b/ci/roles/subnet/tasks/main.yml index da81919f13eefe481456791581324a2053ab2d28..f002cf951a2bbbdbaea9ee76542afd887deb9eb6 100644 --- a/ci/roles/subnet/tasks/main.yml +++ b/ci/roles/subnet/tasks/main.yml @@ -62,6 +62,49 @@ assert: that: subnet is not changed +- name: Get Subnet Info with name + openstack.cloud.subnets_info: + cloud: "{{ cloud }}" + name: "{{ subnet_name }}" + register: subnet + +- name: assert subnet fields + assert: + that: item in subnet.subnets[0] + loop: "{{ expected_fields }}" + +- name: Get Subnet Info with filters + openstack.cloud.subnets_info: + cloud: "{{ cloud }}" + filters: + enable_dhcp: "{{ enable_subnet_dhcp }}" + gateway_ip: 192.168.0.1 + cidr: 192.168.0.0/24 + register: subnet + +- name: Verify Subnet info result + assert: + that: + - subnet is not changed + - subnet.subnets is defined + - subnet.subnets | length > 0 + +- name: Get Subnet Info with name and improper filter values + openstack.cloud.subnets_info: + cloud: "{{ cloud }}" + name: "{{ subnet_name }}" + filters: + gateway_ip: 192.168.16.1 + cidr: 192.168.16.0/24 + register: subnet + +- name: Verify Subnet info result + assert: + that: + - subnet is not changed + - subnet.subnets is defined + - subnet.subnets | length == 0 + - name: Update subnet openstack.cloud.subnet: cloud: "{{ cloud }}" diff --git a/ci/roles/subnet/tasks/subnet-allocation.yml b/ci/roles/subnet/tasks/subnet-allocation.yml index 741856208028a7afb2c9ed876491f2366ac2266c..773d334c85c7b4b54db93ffc54a331b5248e0559 100644 --- a/ci/roles/subnet/tasks/subnet-allocation.yml +++ b/ci/roles/subnet/tasks/subnet-allocation.yml @@ -51,16 +51,16 @@ assert: that: - idem1 is not changed - - subnet_result.openstack_subnets is defined - - subnet_result.openstack_subnets | length == 1 - - subnet_result.openstack_subnets[0].allocation_pools is defined - - subnet_result.openstack_subnets[0].allocation_pools | length == 1 + - subnet_result.subnets is defined + - subnet_result.subnets | length == 1 + - subnet_result.subnets[0].allocation_pools is defined + - subnet_result.subnets[0].allocation_pools | length == 1 - name: Verify Subnet Allocation Pools assert: that: - - subnet_result.openstack_subnets[0].allocation_pools.0.start == '192.168.0.2' - - subnet_result.openstack_subnets[0].allocation_pools.0.end == '192.168.0.8' + - subnet_result.subnets[0].allocation_pools.0.start == '192.168.0.2' + - subnet_result.subnets[0].allocation_pools.0.end == '192.168.0.8' - name: Delete subnet {{ subnet_name }} openstack.cloud.subnet: diff --git a/plugins/modules/subnets_info.py b/plugins/modules/subnets_info.py index c5a70ef9b926de5cf586f710de5ef58706e683fd..623d656e725eb65486b69af3704ec584cf016cbe 100644 --- a/plugins/modules/subnets_info.py +++ b/plugins/modules/subnets_info.py @@ -45,7 +45,7 @@ EXAMPLES = ''' - name: Show openstack subnets debug: - msg: "{{ result.openstack_subnets }}" + msg: "{{ result.subnets }}" - name: Gather information about a previously created subnet by name openstack.cloud.subnets_info: @@ -59,7 +59,7 @@ EXAMPLES = ''' - name: Show openstack subnets debug: - msg: "{{ result.openstack_subnets }}" + msg: "{{ result.subnets }}" - name: Gather information about a previously created subnet with filter # Note: name and filters parameters are not mutually exclusive @@ -70,62 +70,98 @@ EXAMPLES = ''' password: password project_name: someproject filters: - tenant_id: 55e2ce24b2a245b09f181bf025724cbe + project_id: 55e2ce24b2a245b09f181bf025724cbe register: result - name: Show openstack subnets debug: - msg: "{{ result.openstack_subnets }}" + msg: "{{ result.subnets }}" ''' RETURN = ''' -openstack_subnets: +subnets: description: has all the openstack information about the subnets - returned: always, but can be null - type: complex + returned: always, but can be empty list + type: list + elements: dict contains: id: - description: Unique UUID. - returned: success + description: The ID of the subnet. type: str name: description: Name given to the subnet. - returned: success + type: str + description: + description: Description of the subnet. type: str network_id: description: Network ID this subnet belongs in. - returned: success type: str cidr: description: Subnet's CIDR. - returned: success type: str gateway_ip: description: Subnet's gateway ip. - returned: success type: str - enable_dhcp: - description: DHCP enable flag for this subnet. - returned: success + is_dhcp_enabled: + description: Is DHCP enabled. type: bool ip_version: description: IP version for this subnet. - returned: success type: int - tenant_id: - description: Tenant id associated with this subnet. - returned: success - type: str dns_nameservers: description: DNS name servers for this subnet. - returned: success type: list elements: str allocation_pools: description: Allocation pools associated with this subnet. - returned: success type: list elements: dict + created_at: + description: Date and time when the resource was created. + type: str + updated_at: + description: Date and time when the resource was updated. + type: str + dns_publish_fixed_ip: + description: Whether to publish DNS records for IPs from this subnet. + type: str + host_routes: + description: Additional routes for the subnet. + type: list + elements: dict + ipv6_address_mode: + description: The IPv6 address modes specifies mechanisms for assigning IP addresses. + type: str + ipv6_ra_mode: + description: The IPv6 router advertisement specifies whether the networking service should transmit ICMPv6 packets, for a subnet. + type: str + project_id: + description: The ID of the project. + type: str + revision_number: + description: The revision number of the resource. + type: str + segment_id: + description: The ID of a network segment the subnet is associated with. + type: str + service_types: + description: The service types associated with the subnet. + type: list + elements: str + subnet_pool_id: + description: The ID of the subnet pool associated with the subnet. + type: str + tags: + description: The list of tags on the resource. + type: list + elements: str + prefix_length: + description: The prefix length to use for subnet allocation from a subnet pool. + type: str + use_default_subnet_pool: + description: Whether to use the default subnet pool to obtain a CIDR. + type: bool ''' from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule @@ -141,14 +177,23 @@ class SubnetInfoModule(OpenStackModule): ) def run(self): - kwargs = self.check_versioned( - filters=self.params['filters'] - ) + kwargs = {} + subnets = [] if self.params['name']: - kwargs['name_or_id'] = self.params['name'] - subnets = self.conn.search_subnets(**kwargs) - - self.exit(changed=False, openstack_subnets=subnets) + kwargs['name'] = self.params['name'] + # Try to get subnet by ID + try: + raw = self.conn.network.get_subnet(self.params['name']) + raw = raw.to_dict(computed=False) + subnets.append(raw) + self.exit(changed=False, subnets=subnets) + except self.sdk.exceptions.ResourceNotFound: + pass + if self.params['filters']: + kwargs.update(self.params['filters']) + subnets = self.conn.network.subnets(**kwargs) + subnets = [i.to_dict(computed=False) for i in subnets] + self.exit(changed=False, subnets=subnets) def main():