Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

azure_rm_networkinterface: Feature/dns servers #43588

Merged
merged 6 commits into from
Aug 28, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
32 changes: 32 additions & 0 deletions lib/ansible/modules/cloud/azure/azure_rm_networkinterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,12 @@
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
Expand Down Expand Up @@ -291,6 +297,15 @@
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
Expand Down Expand Up @@ -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,
)


Expand Down Expand Up @@ -436,6 +452,7 @@ def __init__(self):
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 = [
Expand All @@ -461,6 +478,7 @@ def __init__(self):
self.open_ports = None
self.enable_ip_forwarding = None
self.ip_configurations = None
self.dns_servers = None

self.results = dict(
changed=False,
Expand Down Expand Up @@ -540,6 +558,16 @@ def exec_module(self, **kwargs):
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:
Expand Down Expand Up @@ -622,6 +650,10 @@ def exec_module(self, **kwargs):
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))
Expand Down
66 changes: 66 additions & 0 deletions test/integration/targets/azure_rm_networkinterface/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}"
Expand Down