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
This commit is contained in:
Jasper Aorangi 2018-08-29 03:59:45 +12:00 committed by Matt Davis
parent 0972d37872
commit 56ea56f2b5
2 changed files with 98 additions and 0 deletions

View file

@ -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))

View file

@ -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 }}"