|
44 | 44 | src_path: "/tmp/resolvectl_dns.txt" |
45 | 45 | dest_path: "{{ current_test_log_folder }}/resolvectl_dns.txt" |
46 | 46 |
|
47 | | - - name: "Get output of 'resolvectl dns'" |
48 | | - command: cat "{{ current_test_log_folder }}/resolvectl_dns.txt" |
49 | | - register: dns_servers |
50 | | - |
51 | 47 | - name: "Set fact of guest DNS servers" |
52 | 48 | set_fact: |
53 | | - guest_dns_servers: "{{ dns_servers.stdout_lines | select('match', '^Link') | |
54 | | - regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}" |
| 49 | + guest_dns_servers: "{{ lookup('file', current_test_log_folder ~ '/resolvectl_dns.txt').split('\n') | select('match', '^link', ignorecase=True) | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}" |
55 | 50 | when: resolvectl_dns_result | bool |
56 | 51 |
|
57 | 52 | # Run command 'resolvectl domain' to get DNS servers |
|
72 | 67 | src_path: "/tmp/resolvectl_domain.txt" |
73 | 68 | dest_path: "{{ current_test_log_folder }}/resolvectl_domain.txt" |
74 | 69 |
|
75 | | - - name: "Get output of 'resolvectl domain'" |
76 | | - command: cat "{{ current_test_log_folder }}/resolvectl_domain.txt" |
77 | | - register: dns_domains |
78 | | - |
79 | 70 | - name: "Set fact of guest DNS searching domains" |
80 | 71 | set_fact: |
81 | | - guest_dns_search: "{{ dns_domains.stdout_lines | select('match', '^Link') | |
82 | | - regex_findall('\\b(?:[a-zA-Z0-9-]{1,}\\.){1,}[a-zA-Z0-9-]{1,}\\b') }}" |
| 72 | + guest_dns_search: "{{ lookup('file', current_test_log_folder ~ '/resolvectl_domain.txt').split('\n') | select('match', '^link', ignorecase=True) | regex_findall('\\b(?:[a-zA-Z0-9-]{1,}\\.){1,}[a-zA-Z0-9-]{1,}\\b') }}" |
83 | 73 | when: resolvectl_domain_result | bool |
84 | 74 | when: resolvectl_status_result |
85 | 75 |
|
|
101 | 91 | src_path: "/tmp/resolv.conf" |
102 | 92 | dest_path: "{{ current_test_log_folder }}/etc/resolv.conf" |
103 | 93 |
|
104 | | - - name: "Get DNS servers from /etc/resolv.conf" |
105 | | - shell: cat "{{ current_test_log_folder }}/etc/resolv.conf" | grep -i "^nameserver\s*" | awk '{print $2}' |
106 | | - register: dns_servers |
107 | | - |
108 | | - - name: "Get guest DNS servers from shell command output" |
109 | | - set_fact: |
110 | | - guest_dns_servers: "{{ dns_servers.stdout_lines }}" |
111 | | - |
112 | | - - name: "Get DNS search domains from /etc/resolv.conf" |
113 | | - shell: cat "{{ current_test_log_folder }}/etc/resolv.conf" | grep -i "^search" | awk '{i=2;while(i<=NF) {print $i; i++ }}' |
114 | | - register: dns_search |
115 | | - |
116 | | - - name: "Save guest DNS search list to tmp variable" |
| 94 | + - name: "Get content of /etc/resolv.conf in guest OS" |
117 | 95 | set_fact: |
118 | | - tmp_dns_search: "{{ dns_search.stdout_lines }}" |
| 96 | + guest_resolv_conf: "{{ lookup('file', current_test_log_folder ~ '/etc/resolv.conf').split('\n') }}" |
119 | 97 |
|
120 | | - # In Amazon Linux 2 guest, a period after each DNS search domain would be added, so remove it |
121 | | - - name: "Get guest DNS search list" |
| 98 | + - name: "Get guest DNS servers and search domains from /etc/resolv.conf" |
122 | 99 | set_fact: |
123 | | - guest_dns_search: "{{ guest_dns_search + [item | regex_replace('\\.$','')] }}" |
124 | | - with_items: "{{ tmp_dns_search }}" |
| 100 | + guest_dns_servers: "{{ guest_resolv_conf | select('match', '^nameserver\\s*') | map('regex_replace', 'nameserver\\s*', '') }}" |
| 101 | + guest_dns_search: "{{ guest_resolv_conf | select('match', '^search\\s*') | join('\\n') | regex_replace('^search\\s*', '') | split() | map('regex_replace', '\\.$', '') }}" |
125 | 102 | when: |
126 | 103 | - not resolvectl_status_result |
127 | 104 | - guest_os_ansible_distribution != 'Ubuntu' |
|
143 | 120 | operation: "fetch_file" |
144 | 121 | src_path: "/tmp/systemd_resolve_status" |
145 | 122 | dest_path: "{{ current_test_log_folder }}/systemd_resolve_status.txt" |
146 | | - - name: "Get DNS servers from command systemd-resolve" |
147 | | - shell: cat "{{ current_test_log_folder }}/systemd_resolve_status.txt" | sed -n '/DNS Servers/,/DNS Domain/p' | head -n -1 |
148 | | - register: dns_servers |
149 | | - - name: "Set fact of DNS servers from shell command output" |
| 123 | + |
| 124 | + - name: "Set fact of guest systemd resolve status" |
150 | 125 | set_fact: |
151 | | - guest_dns_servers: "{{ (guest_dns_servers + [item.strip().split(':')[1].strip()]) if 'DNS Servers' in item else (guest_dns_servers + [item.strip()]) }}" |
152 | | - with_items: "{{ dns_servers.stdout_lines }}" |
| 126 | + guest_resolve_status: "{{ lookup('file', current_test_log_folder ~ '/systemd_resolve_status.txt') | regex_replace('\\n\\s*','\\n') }}" |
153 | 127 |
|
154 | | - - name: "Get DNS search domains from command systemd-resolve" |
155 | | - shell: cat "{{ current_test_log_folder }}/systemd_resolve_status.txt" | sed -n '/DNS Domain/,/DNSSEC NTA/p' | head -n -1 |
156 | | - register: dns_domains |
157 | | - - name: "Set fact of DNS search domains from shell command output" |
| 128 | + - name: "Set fact of DNS servers and search domains from systemd resolve status" |
158 | 129 | set_fact: |
159 | | - guest_dns_search: "{{ (guest_dns_search + [item.strip().split(':')[1].strip()]) if 'DNS Domain' in item else (guest_dns_search + [item.strip()]) }}" |
160 | | - with_items: "{{ dns_domains.stdout_lines }}" |
| 130 | + guest_dns_servers: "{{ guest_resolve_status | regex_search('DNS Servers:\\s*(([0-9]+\\.){3}([0-9]+)\\n?)+') | regex_replace('DNS Servers:\\s*', '') | split('\\n') | reject('equalto', '') }}" |
| 131 | + guest_dns_search: "{{ guest_resolve_status | regex_search('DNS Domain:\\s*(([0-9a-zA-Z_\\-]+\\.){1,}([0-9a-zA-Z_\\-]+)\\n?)+') | regex_replace('DNS Domain:\\s*', '') | split('\\n') | reject('equalto', '') }}" |
161 | 132 | when: systemd_resolve_result |
162 | 133 | when: |
163 | 134 | - not resolvectl_status_result |
|
207 | 178 | gosc_check_error_msg: "VM DNS servers are {{ guest_dns_servers }}, not expected DNS servers {{ linux_gosc_spec['dns_servers'] }}" |
208 | 179 |
|
209 | 180 | # Check guest DNS search domains |
| 181 | +- debug: |
| 182 | + msg: |
| 183 | + - "The expected search domains: {{ linux_gosc_spec['dns_suffix'] }}" |
| 184 | + - "The actual DNS search domains got in guest: {{ guest_dns_search }}" |
| 185 | + |
210 | 186 | - name: "Check DNS search domains are customized" |
211 | 187 | set_fact: |
212 | 188 | dns_suffix_success: "{{ linux_gosc_spec['dns_suffix'] | difference(guest_dns_search) | length == 0 }}" |
|
0 commit comments