vmware_host_dns: consistent rslt when name changes
This commit address a problem in static mode, if the hostname change, `host.name` value with change too. And as a result: results['dns_config_result'][host.name] will be initialized. We now record the initial hostname first, and uses it as the key for the results. This commit also ensures hostname and search domain change are detected if `instance.dnsConfig.dhcp` is true. Finally, if we target a cluster, the `changed` result will depend on the number of nodes.
This commit is contained in:
parent
b183d36c53
commit
5280042901
2 changed files with 59 additions and 50 deletions
|
@ -197,9 +197,10 @@ class VmwareHostDNS(PyVmomi):
|
||||||
verbose = self.module.params.get('verbose', False)
|
verbose = self.module.params.get('verbose', False)
|
||||||
host_change_list = []
|
host_change_list = []
|
||||||
for host in self.hosts:
|
for host in self.hosts:
|
||||||
|
initial_name = host.name
|
||||||
changed = False
|
changed = False
|
||||||
changed_list = []
|
changed_list = []
|
||||||
results['dns_config_result'][host.name] = dict(changed='', msg='')
|
host_result = {'changed': '', 'msg': '', 'host_name': host.name}
|
||||||
|
|
||||||
host_netstack_config = host.config.network.netStackInstance
|
host_netstack_config = host.config.network.netStackInstance
|
||||||
for instance in host_netstack_config:
|
for instance in host_netstack_config:
|
||||||
|
@ -209,41 +210,50 @@ class VmwareHostDNS(PyVmomi):
|
||||||
netstack_spec.netStackInstance = vim.host.NetStackInstance()
|
netstack_spec.netStackInstance = vim.host.NetStackInstance()
|
||||||
netstack_spec.netStackInstance.key = 'defaultTcpipStack'
|
netstack_spec.netStackInstance.key = 'defaultTcpipStack'
|
||||||
dns_config = vim.host.DnsConfig()
|
dns_config = vim.host.DnsConfig()
|
||||||
results['dns_config_result'][host.name]['dns_config'] = self.network_type
|
host_result['dns_config'] = self.network_type
|
||||||
|
host_result['search_domains'] = self.search_domains
|
||||||
if self.network_type == 'static':
|
if self.network_type == 'static':
|
||||||
|
if self.host_name:
|
||||||
|
if instance.dnsConfig.hostName != self.host_name:
|
||||||
|
host_result['host_name_previous'] = instance.dnsConfig.hostName
|
||||||
|
changed = True
|
||||||
|
changed_list.append("Host name")
|
||||||
|
dns_config.hostName = self.host_name
|
||||||
|
else:
|
||||||
|
dns_config.hostName = instance.dnsConfig.hostName
|
||||||
|
|
||||||
|
if self.search_domains:
|
||||||
|
if instance.dnsConfig.searchDomain != self.search_domains:
|
||||||
|
host_result['search_domains_previous'] = instance.dnsConfig.searchDomain
|
||||||
|
host_result['search_domains_changed'] = (
|
||||||
|
self.get_differt_entries(instance.dnsConfig.searchDomain, self.search_domains)
|
||||||
|
)
|
||||||
|
changed = True
|
||||||
|
changed_list.append("Search domains")
|
||||||
|
dns_config.searchDomain = self.search_domains
|
||||||
|
else:
|
||||||
|
dns_config.searchDomain = instance.dnsConfig.searchDomain
|
||||||
|
|
||||||
if instance.dnsConfig.dhcp:
|
if instance.dnsConfig.dhcp:
|
||||||
results['dns_config_result'][host.name]['domain'] = self.domain
|
host_result['domain'] = self.domain
|
||||||
results['dns_config_result'][host.name]['dns_servers'] = self.dns_servers
|
host_result['dns_servers'] = self.dns_servers
|
||||||
results['dns_config_result'][host.name]['search_domains'] = self.search_domains
|
host_result['search_domains'] = self.search_domains
|
||||||
results['dns_config_result'][host.name]['dns_config_previous'] = 'DHCP'
|
host_result['dns_config_previous'] = 'DHCP'
|
||||||
changed = True
|
changed = True
|
||||||
changed_list.append("DNS configuration")
|
changed_list.append("DNS configuration")
|
||||||
dns_config.dhcp = False
|
dns_config.dhcp = False
|
||||||
dns_config.virtualNicDevice = None
|
dns_config.virtualNicDevice = None
|
||||||
if self.host_name:
|
|
||||||
dns_config.hostName = self.host_name
|
|
||||||
else:
|
|
||||||
dns_config.hostName = instance.dnsConfig.hostName
|
|
||||||
dns_config.domainName = self.domain
|
dns_config.domainName = self.domain
|
||||||
dns_config.address = self.dns_servers
|
dns_config.address = self.dns_servers
|
||||||
dns_config.searchDomain = self.search_domains
|
dns_config.searchDomain = self.search_domains
|
||||||
else:
|
else:
|
||||||
results['dns_config_result'][host.name]['host_name'] = self.host_name
|
|
||||||
# Check host name
|
# Check host name
|
||||||
if self.host_name:
|
|
||||||
if instance.dnsConfig.hostName != self.host_name:
|
|
||||||
results['dns_config_result'][host.name]['host_name_previous'] = instance.dnsConfig.hostName
|
|
||||||
changed = True
|
|
||||||
changed_list.append("Host name")
|
|
||||||
dns_config.hostName = self.host_name
|
|
||||||
else:
|
|
||||||
dns_config.hostName = instance.dnsConfig.hostName
|
|
||||||
|
|
||||||
# Check domain
|
# Check domain
|
||||||
results['dns_config_result'][host.name]['domain'] = self.domain
|
host_result['domain'] = self.domain
|
||||||
if self.domain:
|
if self.domain:
|
||||||
if instance.dnsConfig.domainName != self.domain:
|
if instance.dnsConfig.domainName != self.domain:
|
||||||
results['dns_config_result'][host.name]['domain_previous'] = instance.dnsConfig.domainName
|
host_result['domain_previous'] = instance.dnsConfig.domainName
|
||||||
changed = True
|
changed = True
|
||||||
changed_list.append("Domain")
|
changed_list.append("Domain")
|
||||||
dns_config.domainName = self.domain
|
dns_config.domainName = self.domain
|
||||||
|
@ -251,11 +261,11 @@ class VmwareHostDNS(PyVmomi):
|
||||||
dns_config.domainName = instance.dnsConfig.domainName
|
dns_config.domainName = instance.dnsConfig.domainName
|
||||||
|
|
||||||
# Check DNS server(s)
|
# Check DNS server(s)
|
||||||
results['dns_config_result'][host.name]['dns_servers'] = self.dns_servers
|
host_result['dns_servers'] = self.dns_servers
|
||||||
if self.dns_servers:
|
if self.dns_servers:
|
||||||
if instance.dnsConfig.address != self.dns_servers:
|
if instance.dnsConfig.address != self.dns_servers:
|
||||||
results['dns_config_result'][host.name]['dns_servers_previous'] = instance.dnsConfig.address
|
host_result['dns_servers_previous'] = instance.dnsConfig.address
|
||||||
results['dns_config_result'][host.name]['dns_servers_changed'] = (
|
host_result['dns_servers_changed'] = (
|
||||||
self.get_differt_entries(instance.dnsConfig.address, self.dns_servers)
|
self.get_differt_entries(instance.dnsConfig.address, self.dns_servers)
|
||||||
)
|
)
|
||||||
changed = True
|
changed = True
|
||||||
|
@ -271,22 +281,9 @@ class VmwareHostDNS(PyVmomi):
|
||||||
else:
|
else:
|
||||||
dns_config.address = instance.dnsConfig.address
|
dns_config.address = instance.dnsConfig.address
|
||||||
|
|
||||||
# Check search domain config
|
|
||||||
results['dns_config_result'][host.name]['search_domains'] = self.search_domains
|
|
||||||
if self.search_domains:
|
|
||||||
if instance.dnsConfig.searchDomain != self.search_domains:
|
|
||||||
results['dns_config_result'][host.name]['search_domains_previous'] = instance.dnsConfig.searchDomain
|
|
||||||
results['dns_config_result'][host.name]['search_domains_changed'] = (
|
|
||||||
self.get_differt_entries(instance.dnsConfig.searchDomain, self.search_domains)
|
|
||||||
)
|
|
||||||
changed = True
|
|
||||||
changed_list.append("Search domains")
|
|
||||||
dns_config.searchDomain = self.search_domains
|
|
||||||
else:
|
|
||||||
dns_config.searchDomain = instance.dnsConfig.searchDomain
|
|
||||||
elif self.network_type == 'dhcp' and not instance.dnsConfig.dhcp:
|
elif self.network_type == 'dhcp' and not instance.dnsConfig.dhcp:
|
||||||
results['dns_config_result'][host.name]['device'] = self.vmkernel_device
|
host_result['device'] = self.vmkernel_device
|
||||||
results['dns_config_result'][host.name]['dns_config_previous'] = 'static'
|
host_result['dns_config_previous'] = 'static'
|
||||||
changed = True
|
changed = True
|
||||||
changed_list.append("DNS configuration")
|
changed_list.append("DNS configuration")
|
||||||
dns_config.dhcp = True
|
dns_config.dhcp = True
|
||||||
|
@ -313,7 +310,7 @@ class VmwareHostDNS(PyVmomi):
|
||||||
message = dns_servers_verbose_message
|
message = dns_servers_verbose_message
|
||||||
else:
|
else:
|
||||||
message += changed_suffix
|
message += changed_suffix
|
||||||
results['dns_config_result'][host.name]['changed'] = True
|
host_result['changed'] = True
|
||||||
host_network_system = host.configManager.networkSystem
|
host_network_system = host.configManager.networkSystem
|
||||||
if not self.module.check_mode:
|
if not self.module.check_mode:
|
||||||
try:
|
try:
|
||||||
|
@ -344,9 +341,11 @@ class VmwareHostDNS(PyVmomi):
|
||||||
(host.name, to_native(config_fault.msg))
|
(host.name, to_native(config_fault.msg))
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
results['dns_config_result'][host.name]['changed'] = False
|
host_result['changed'] = False
|
||||||
message = 'All settings are already configured'
|
message = 'All settings are already configured'
|
||||||
results['dns_config_result'][host.name]['msg'] = message
|
|
||||||
|
host_result['msg'] = message
|
||||||
|
results['dns_config_result'][initial_name] = host_result
|
||||||
|
|
||||||
host_change_list.append(changed)
|
host_change_list.append(changed)
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@
|
||||||
that:
|
that:
|
||||||
- vmware_host_dns_result_0005 is changed
|
- vmware_host_dns_result_0005 is changed
|
||||||
|
|
||||||
# Revert to original DNS configuration
|
# Revert to original DNS configuration with a different search_domains
|
||||||
- name: Revert to original DNS configuration
|
- name: Revert to original DNS configuration
|
||||||
vmware_host_dns:
|
vmware_host_dns:
|
||||||
hostname: '{{ esxi1 }}'
|
hostname: '{{ esxi1 }}'
|
||||||
|
@ -115,7 +115,7 @@
|
||||||
search_domains: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['search_domain'] }}"
|
search_domains: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['search_domain'] }}"
|
||||||
|
|
||||||
# Testcase 0006: Ensure DNS config on the cluster is idempotent for static
|
# Testcase 0006: Ensure DNS config on the cluster is idempotent for static
|
||||||
- name: Ensure static DNS config is idempotent when done on the cluster
|
- name: Apply configuration on a cluster
|
||||||
vmware_host_dns:
|
vmware_host_dns:
|
||||||
hostname: '{{ vcenter_hostname }}'
|
hostname: '{{ vcenter_hostname }}'
|
||||||
username: '{{ vcenter_username }}'
|
username: '{{ vcenter_username }}'
|
||||||
|
@ -123,15 +123,25 @@
|
||||||
cluster_name: "{{ ccr1 }}"
|
cluster_name: "{{ ccr1 }}"
|
||||||
validate_certs: False
|
validate_certs: False
|
||||||
type: 'static'
|
type: 'static'
|
||||||
|
search_domains: "different-search-domain"
|
||||||
|
register: vmware_host_dns_result_0006
|
||||||
|
|
||||||
|
- name: Ensure configuration has changed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vmware_host_dns_result_0006 is changed
|
||||||
|
|
||||||
|
- name: Revert to original DNS configuration
|
||||||
|
vmware_host_dns:
|
||||||
|
hostname: '{{ esxi1 }}'
|
||||||
|
username: '{{ esxi_user }}'
|
||||||
|
password: '{{ esxi_password }}'
|
||||||
|
validate_certs: False
|
||||||
|
type: 'static'
|
||||||
|
host_name: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['host_name'] }}"
|
||||||
domain: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['domain_name'] }}"
|
domain: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['domain_name'] }}"
|
||||||
dns_servers: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['ip_address'] }}"
|
dns_servers: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['ip_address'] }}"
|
||||||
search_domains: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['search_domain'] }}"
|
search_domains: "{{ dns['results'][0]['hosts_dns_info'][esxi1]['search_domain'] }}"
|
||||||
register: vmware_host_dns_result_0006
|
|
||||||
|
|
||||||
- name: Ensure DNS config wasn't changed
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vmware_host_dns_result_0006 is not changed
|
|
||||||
|
|
||||||
# Testcase 0007: Ensure changing the domain on the cluster works
|
# Testcase 0007: Ensure changing the domain on the cluster works
|
||||||
- name: Ensure changing the domain on the cluster works
|
- name: Ensure changing the domain on the cluster works
|
||||||
|
|
Loading…
Reference in a new issue