From 56ea56f2b55a81bff185ff3ec52a233139c95444 Mon Sep 17 00:00:00 2001 From: Jasper Aorangi Date: Wed, 29 Aug 2018 03:59:45 +1200 Subject: [PATCH] azure_rm_networkinterface: Feature/dns servers (#43588) * Working through tests and fixing dumb mistakes * Fix sanity issues and tests. All G * Correct type test for azure_rm_networkinterface * azure_rm_networkinterface correct type comparison * Post rebase cleanup * Remove erroneous reference to dns_servers --- .../cloud/azure/azure_rm_networkinterface.py | 32 +++++++++ .../azure_rm_networkinterface/tasks/main.yml | 66 +++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/lib/ansible/modules/cloud/azure/azure_rm_networkinterface.py b/lib/ansible/modules/cloud/azure/azure_rm_networkinterface.py index 331672ad52..03d227e94f 100644 --- a/lib/ansible/modules/cloud/azure/azure_rm_networkinterface.py +++ b/lib/ansible/modules/cloud/azure/azure_rm_networkinterface.py @@ -193,6 +193,12 @@ options: type: bool default: False version_added: 2.7 + dns_servers: + description: + - Which DNS servers should the NIC lookup + - List of IP's + type: list + version_added: 2.7 extends_documentation_fragment: - azure - azure_tags @@ -291,6 +297,15 @@ EXAMPLES = ''' public_ip_address_name: publicip001 primary: True + - name: Create a network interface with dns servers + azure_rm_networkinterface: + name: nic009 + resource_group: Testing + virtual_network: vnet001 + subnet_name: subnet001 + dns_servers: + - 8.8.8.8 + - name: Delete network interface azure_rm_networkinterface: resource_group: Testing @@ -399,6 +414,7 @@ def nic_to_dict(nic): provisioning_state=nic.provisioning_state, etag=nic.etag, enable_accelerated_networking=nic.enable_accelerated_networking, + dns_servers=nic.dns_settings.dns_servers, ) @@ -436,6 +452,7 @@ class AzureRMNetworkInterface(AzureRMModuleBase): os_type=dict(type='str', choices=['Windows', 'Linux'], default='Linux'), open_ports=dict(type='list'), enable_ip_forwarding=dict(type='bool', aliases=['ip_forwarding'], default=False), + dns_servers=dict(type='list'), ) required_if = [ @@ -461,6 +478,7 @@ class AzureRMNetworkInterface(AzureRMModuleBase): self.open_ports = None self.enable_ip_forwarding = None self.ip_configurations = None + self.dns_servers = None self.results = dict( changed=False, @@ -540,6 +558,16 @@ class AzureRMNetworkInterface(AzureRMModuleBase): results.get('enable_ip_forwarding'))) changed = True + # We need to ensure that dns_servers are list like + dns_servers_res = results.get('dns_settings').get('dns_servers') + _dns_servers_set = sorted(self.dns_servers) if isinstance(self.dns_servers, list) else list() + _dns_servers_res = sorted(dns_servers_res) if isinstance(self.dns_servers, list) else list() + if _dns_servers_set != _dns_servers_res: + self.log("CHANGED: DNS servers set to {0} (previously {1})".format( + ", ".join(_dns_servers_set), + ", ".join(_dns_servers_res))) + changed = True + if not changed: nsg = self.get_security_group(self.security_group['resource_group'], self.security_group['name']) if nsg and results.get('network_security_group') and results['network_security_group'].get('id') != nsg.id: @@ -622,6 +650,10 @@ class AzureRMNetworkInterface(AzureRMModuleBase): enable_ip_forwarding=self.enable_ip_forwarding, network_security_group=nsg ) + if self.dns_servers: + dns_settings = self.network_models.NetworkInterfaceDnsSettings( + dns_servers=self.dns_servers) + nic.dns_settings = dns_settings self.results['state'] = self.create_or_update_nic(nic) elif self.state == 'absent': self.log('Deleting network interface {0}'.format(self.name)) diff --git a/test/integration/targets/azure_rm_networkinterface/tasks/main.yml b/test/integration/targets/azure_rm_networkinterface/tasks/main.yml index a26a00f726..7e6b174084 100644 --- a/test/integration/targets/azure_rm_networkinterface/tasks/main.yml +++ b/test/integration/targets/azure_rm_networkinterface/tasks/main.yml @@ -358,6 +358,72 @@ that: - output.changed +- name: NIC with dns servers + azure_rm_networkinterface: + resource_group: "{{ resource_group }}" + name: "tn{{ rpfx }}dns" + virtual_network: "{{ vn.state.id }}" + subnet: "tn{{ rpfx }}" + dns_servers: + - 8.9.10.11 + register: output + +- assert: + that: + - output.changed + - output.state.dns_settings.dns_servers == ['8.9.10.11'] + +- name: NIC with dns servers is idempotent + azure_rm_networkinterface: + resource_group: "{{ resource_group }}" + name: "tn{{ rpfx }}dns" + virtual_network: "{{ vn.state.id }}" + subnet: "tn{{ rpfx }}" + dns_servers: + - 8.9.10.11 + register: output + +- assert: + that: + - not output.changed + +- name: NIC with dns servers adding server + azure_rm_networkinterface: + resource_group: "{{ resource_group }}" + name: "tn{{ rpfx }}dns" + virtual_network: "{{ vn.state.id }}" + subnet: "tn{{ rpfx }}" + dns_servers: + - 8.9.10.11 + - 10.11.12.13 + register: output + +- assert: + that: + - output.changed + - output.state.dns_settings.dns_servers | sort() == ['8.9.10.11', '10.11.12.13'] | sort() + +- name: NIC with dns servers removing server + azure_rm_networkinterface: + resource_group: "{{ resource_group }}" + name: "tn{{ rpfx }}dns" + virtual_network: "{{ vn.state.id }}" + subnet: "tn{{ rpfx }}" + dns_servers: + - 10.11.12.13 + register: output + +- assert: + that: + - output.changed + - output.state.dns_settings.dns_servers == ['10.11.12.13'] + +- name: Delete DNS servers NIC + azure_rm_networkinterface: + resource_group: "{{ resource_group }}" + name: "tn{{ rpfx }}dns" + state: absent + - name: Delete the NIC (check mode) azure_rm_networkinterface: resource_group: "{{ resource_group }}"