Ansible의 jinja2 템플릿을 이용한 DNS Resolver 설정
DNS Resolver 설정을 자동화할 수 있다.
주요 기능
- templates/resolv.conf.j2 파일을 이용해 변수에 맞게 DNS Resolver 설정을 수행할 수 있다.
- DNS Resolver는 설정즉시 반영되기 때문에 설정 후 dig 명령을 통해 제대로 Resolving 되는 지 확인한다.
Inventory 설정
# cat hosts
[ALL_HOSTS]
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03"
[ALL_HOSTS_OK]
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 ALL_HOSTS_OK 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
Host Variables 설정
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass: "사용자 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "!root_패스워드"
ansible_python_interpreter: python2.7
Playbook 설정
---
- name: DNS Resolver Deploy Playbook
hosts: ALL_HOSTS
vars:
time: "{{lookup('pipe','date \"+%Y%m%d_%H%M\"')}}"
dns_resolver1: "XXX.XXX.XXX.1"
dns_resolver2: "XXX.XXX.XXX.2"
environment:
LANG: ko_KR.UTF-8
tasks:
- name: /etc/resolv.conf_{{ time }} file check
stat:
path: /etc/resolv.conf_{{ time }}
register: resolv_backup
- name: /etc/resolv.conf_{{ time }} file backup
command: cp -rf /etc/resolv.conf /etc/resolv.conf_{{ time }}
when: resolv_backup.stat.exists == False
ignore_errors: True
- name: /etc/resolv.conf deploy
template: src=templates/resolv.conf.j2 dest=/etc/resolv.conf mode=0644
- name: dig command Result
shell: dig naver.com
register: dig_result
- debug: var=dig_result
- name: Local Directory Create
local_action: command mkdir -p DIG_CHECK/{{ managed_ip }}
- name: DNS Resolver Check Execute Result
local_action: copy content={{ dig_result.stdout }} dest=DIG_CHECK/{{ managed_ip }}/{{ managed_ip }}_dig.txt
- name: Local Directory Create GIT
local_action: command mkdir -p /mnt/d/GIT/system_engineer/Documents/SERVICE/DNS-RESOLVER/WITNESS/{{ managed_ip }}
- name: Local Result Git Repository Copy from dig command
local_action: command cp -rf DIG_CHECK/{{ managed_ip }}/{{ managed_ip }}_dig.txt /mnt/d/GIT/system_engineer/Documents/SERVICE/DNS-RESOLVER/WITNESS/{{ managed_ip }}/
jinja2 템플릿 내역은 다음과 같다. 참고적으로 핵심적인 내역만은 명시한다.
# cat templates/resolv.conf.j2
nameserver {{ dns_resolver1 }}
nameserver {{ dns_resolver2 }}
DNS Resolver 배포
에 대한 Playbook 분석
- dns_resolver1/2 에 대한 변수 값이 원격 호스트에 설정된다.
- 적용 후 dig 명령을 쿼리하여, 로컬 시스템(PC 또는 서버)에 증적을 기록한다.
- dig 명령의 결과는 각 호스트별로 로컬에 파일로 기록된다.
playbook 실행
# ansible-playbook -i hosts dns_resolver.yml