diff --git a/lib/ansible/modules/cloud/openstack/os_subnet.py b/lib/ansible/modules/cloud/openstack/os_subnet.py index d3f805fba2..45faf271c1 100644 --- a/lib/ansible/modules/cloud/openstack/os_subnet.py +++ b/lib/ansible/modules/cloud/openstack/os_subnet.py @@ -95,6 +95,12 @@ options: availability_zone: description: - Ignored. Present for backwards compatibility + extra_specs: + description: + - Dictionary with extra key/value pairs passed to the API + required: false + default: {} + version_added: "2.7" requirements: - "python >= 2.6" - "openstacksdk" @@ -231,6 +237,7 @@ def main(): ipv6_ra_mode=dict(default=None, choice=ipv6_mode_choices), ipv6_address_mode=dict(default=None, choice=ipv6_mode_choices), use_default_subnetpool=dict(default=False, type='bool'), + extra_specs=dict(required=False, default=dict(), type='dict'), state=dict(default='present', choices=['absent', 'present']), project=dict(default=None) ) @@ -256,6 +263,7 @@ def main(): ipv6_a_mode = module.params['ipv6_address_mode'] use_default_subnetpool = module.params['use_default_subnetpool'] project = module.params.pop('project') + extra_specs = module.params['extra_specs'] # Check for required parameters when state == 'present' if state == 'present': @@ -296,6 +304,7 @@ def main(): if state == 'present': if not subnet: kwargs = dict( + cidr=cidr, ip_version=ip_version, enable_dhcp=enable_dhcp, subnet_name=subnet_name, @@ -307,9 +316,14 @@ def main(): ipv6_ra_mode=ipv6_ra_mode, ipv6_address_mode=ipv6_a_mode, tenant_id=project_id) + dup_args = set(kwargs.keys()) & set(extra_specs.keys()) + if dup_args: + raise ValueError('Duplicate key(s) {0} in extra_specs' + .format(list(dup_args))) if use_default_subnetpool: kwargs['use_default_subnetpool'] = use_default_subnetpool - subnet = cloud.create_subnet(network_name, cidr, **kwargs) + kwargs = dict(kwargs, **extra_specs) + subnet = cloud.create_subnet(network_name, **kwargs) changed = True else: if _needs_update(subnet, module, cloud):