--- - set_fact: get_ip_script: | $adapter = Get-CimInstance -ClassName Win32_NetworkAdapter -Filter "NetConnectionID='{{ network_adapter_name }}'" $config = Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "Index=$($adapter.DeviceID)" $ips = $config.DNSServerSearchOrder if ($ips) { $config.DNSServerSearchOrder[0] $config.DNSServerSearchOrder[1] } - name: set a single IPv4 address (check mode) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: 192.168.34.5 register: set_single_check check_mode: yes - name: get result of set a single IPv4 address (check mode) win_shell: '{{ get_ip_script }}' changed_when: no register: set_single_actual_check - name: assert set a single IPv4 address (check mode) assert: that: - set_single_check is changed - set_single_actual_check.stdout_lines == [] - name: set a single IPv4 address win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: 192.168.34.5 register: set_single - name: get result of set a single IPv4 address win_shell: '{{ get_ip_script }}' changed_when: no register: set_single_actual - name: assert set a single IPv4 address assert: that: - set_single is changed - set_single_actual.stdout_lines == ["192.168.34.5"] - name: set a single IPv4 address (idempotent) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: 192.168.34.5 register: set_single_again - name: assert set a single IPv4 address (idempotent) assert: that: - not set_single_again is changed - name: change IPv4 address to another value (check mode) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: 192.168.34.6 register: change_single_check check_mode: yes - name: get result of change IPv4 address to another value (check mode) win_shell: '{{ get_ip_script }}' changed_when: no register: check_single_actual_check - name: assert change IPv4 address to another value (check mode) assert: that: - change_single_check is changed - check_single_actual_check.stdout_lines == ["192.168.34.5"] - name: change IPv4 address to another value win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: 192.168.34.6 register: change_single - name: get result of change IPv4 address to another value win_shell: '{{ get_ip_script }}' changed_when: no register: check_single_actual - name: assert change IPv4 address to another value assert: that: - change_single is changed - check_single_actual.stdout_lines == ["192.168.34.6"] - name: set multiple IPv4 addresses (check mode) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: - 192.168.34.7 - 192.168.34.8 register: set_multiple_check check_mode: yes - name: get result of set multiple IPv4 addresses (check mode) win_shell: '{{ get_ip_script }}' changed_when: no register: set_multiple_actual_check - name: assert set multiple IPv4 addresses (check mode) assert: that: - set_multiple_check is changed - set_multiple_actual_check.stdout_lines == ["192.168.34.6"] - name: set multiple IPv4 addresses win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: - 192.168.34.7 - 192.168.34.8 register: set_multiple - name: get result of set multiple IPv4 addresses win_shell: '{{ get_ip_script }}' changed_when: no register: set_multiple_actual - name: assert set multiple IPv4 addresses assert: that: - set_multiple is changed - set_multiple_actual.stdout_lines == ["192.168.34.7", "192.168.34.8"] - name: set multiple IPv4 addresses (idempotent) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: - 192.168.34.7 - 192.168.34.8 register: set_multiple_again - name: assert set multiple IPv4 addresses (idempotent) assert: that: - not set_multiple_again is changed - name: reset IPv4 DNS back to DHCP (check mode) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: [] register: set_dhcp_check check_mode: yes - name: get result of reset IPv4 DNS back to DHCP (check mode) win_shell: '{{ get_ip_script }}' changed_when: no register: set_dhcp_actual_check - name: assert reset IPv4 DNS back to DHCP (check mode) assert: that: - set_dhcp_check is changed - set_dhcp_actual_check.stdout_lines == ["192.168.34.7", "192.168.34.8"] - name: reset IPv4 DNS back to DHCP win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: [] register: set_dhcp - name: get result of reset IPv4 DNS back to DHCP win_shell: '{{ get_ip_script }}' changed_when: no register: set_dhcp_actual - name: assert reset IPv4 DNS back to DHCP assert: that: - set_dhcp is changed - set_dhcp_actual.stdout_lines == [] - name: reset IPv4 DNS back to DHCP (idempotent) win_dns_client: adapter_names: '{{ network_adapter_name }}' ipv4_addresses: [] register: set_dhcp_again - name: assert reset IPv4 DNS back to DHCP (idempotent) assert: that: - set_dhcp_again is not changed # Legacy WMI does not support setting IPv6 addresses so we can only test this on newer hosts that have the new cmdlets - name: check if server supports IPv6 win_shell: if (Get-Command -Name Get-NetAdapter -ErrorAction SilentlyContinue) { $true } else { $false } changed_when: no register: new_os - name: run IPv6 tests when: new_os.stdout | trim | bool block: - name: set IPv6 DNS address win_dns_client: adapter_names: '{{ network_adapter_name }}' dns_servers: - 2001:db8::1 - 2001:db8::2 register: set_ipv6 - name: get result of set IPv6 DNS address win_shell: (Get-DnsClientServerAddress -InterfaceAlias '{{ network_adapter_name }}' -AddressFAmily IPv6).ServerAddresses changed_when: no register: set_ipv6_actual - name: assert set IPv6 DNS address assert: that: - set_ipv6 is changed - set_ipv6_actual.stdout_lines == ['2001:db8::1', '2001:db8::2']