ansible을 사용하여 /etc/resolv.conf에 네임서버를 설정하고 싶습니다. 기본적으로 변수(DNS1, DNS2, DNS3)를 설정하고 싶습니다. 정의된 경우에만 DNS#을 적용하고 싶습니다. 지금까지 나는 다음을 가지고 있습니다.
# Run this playbook on all hosts that should query the DNS server.
- hosts: all
vars:
# dns_server: 192.168.1.190
nameserver_ip: 192.168.1.214
DNS2: 192.168.1.1
tasks:
- name: Add DNS server's IPv4 address to /etc/resolv.conf
command: "nmcli con mod {{ ansible_default_ipv4['interface'] }} ipv4.dns {{ nameserver_ip }}"
- name: Add non-authoritative DNS servers to /etc/resolv.conf
shell: "nmcli con mod {{ ansible_default_ipv4['interface'] }} +ipv4.dns {{ item }}"
when: item is defined
with_items:
- DNS2
- DNS3
- name: Restart default network interface to update /etc/resolv.conf
shell: "nmcli con reload && nmcli con up {{ ansible_default_ipv4['interface'] }}"
그러나 이것을 실행하면 다음과 같은 오류가 발생합니다.
[root@ns1 dns]# ansible-playbook --user root -i ftp.home, dns_client.yaml -k
...
...
TASK [Add non-authoritative DNS servers to /etc/resolv.conf] *****************************************************************************************************************************************************
failed: [ftp.home] (item=DNS2) => {"changed": true, "cmd": "nmcli con mod eth0 +ipv4.dns DNS2", "delta": "0:00:00.055982", "end": "2019-04-01 12:25:53.029983", "item": "DNS2", "msg": "non-zero return code", "rc": 2, "start": "2019-04-01 12:25:52.974001", "stderr": "Error: failed to modify ipv4.dns: invalid IPv4 address 'DNS2'.", "stderr_lines": ["Error: failed to modify ipv4.dns: invalid IPv4 address 'DNS2'."], "stdout": "", "stdout_lines": []}
failed: [ftp.home] (item=DNS3) => {"changed": true, "cmd": "nmcli con mod eth0 +ipv4.dns DNS3", "delta": "0:00:00.056684", "end": "2019-04-01 12:25:53.782999", "item": "DNS3", "msg": "non-zero return code", "rc": 2, "start": "2019-04-01 12:25:53.726315", "stderr": "Error: failed to modify ipv4.dns: invalid IPv4 address 'DNS3'.", "stderr_lines": ["Error: failed to modify ipv4.dns: invalid IPv4 address 'DNS3'."], "stdout": "", "stdout_lines": []}
to retry, use: --limit @/root/ansible/dns/dns_client.retry
DNS{2,3} 값을 사용하는 대신 문자 그대로 DNS2 및 DNS3 변수 이름을 사용하는 것처럼 보입니다. 내가 여기서 뭘 잘못하고 있는 걸까?
답변1
나는 그것에 대해 생각했다. Ansible에서 변수의 값을 사용하려면 변수 이름을 "{{ ... }}"로 묶어야 한다는 사실을 잊었습니다. 다음 변경 사항으로 문제가 해결되었습니다.
with_items:
- "{{ DNS2 }}"
- "{{ DNS3 }}"