두 백엔드를 동시에 변경하지 않고 vm-web01 한 대에만 구성 Playbook을 먼저 적용해 작업 범위와 검증 절차를 확인한다.
다음 순서로 진행했다.
ansible-playbook --syntax-check playbooks/web-config.yml
ansible-playbook --check --diff --limit vm-web01 playbooks/web-config.ymlCheck Mode에서는 다음 세 항목이 변경 대상으로 표시됐다.
- 기본 인터페이스의 permanent public Zone 연결
- 기본 인터페이스의 active public Zone 연결
/usr/share/nginx/html/index.html교체
Fact 참조는 향후 Ansible 변경에 대비해 다음 형식으로 수정했다.
interface: "{{ ansible_facts['default_ipv4']['interface'] }}"수정 후 YAML 오류와 Deprecation 경고 없이 Check Mode를 통과했다.
ansible-playbook --diff --limit vm-web01 playbooks/web-config.yml실제 변경은 두 건이었다.
- 기본 인터페이스를 permanent public Zone에 연결
- 서버 식별용 HTML을 Template으로 배포
active Zone 연결과 SSH·HTTP 서비스 허용, Nginx·firewalld 실행 상태는 이미 원하는 상태여서 ok로 처리됐다.
최종 결과:
vm-web01 : ok=13 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
후속 검증도 성공했다.
nginx -t성공- localhost HTTP 200
- 응답 본문에
WEB01 - Zone 1포함 - 응답 본문에
vm-web01포함
web-config.yml은 vm-web01 한 대에서 실제 적용과 후속 검증까지 성공했다. 이 단계에서는 두 번째 실행 결과를 별도로 확인해 멱등성을 판단하기로 했다.
vm-web01에 구성 Playbook을 다시 실행해, 이미 원하는 상태인 서버에서 불필요한 변경이 발생하지 않는지 확인했다.
처음에는 저장소 루트에서 Playbook을 실행해 ansible/ansible.cfg가 로드되지 않았다.
No inventory was parsed
skipping: no hosts matched
이 실행은 관리 대상에 도달하지 않았으므로 멱등성 결과에 포함하지 않았다. ansible/ 디렉터리에서 같은 Playbook을 다시 실행했다.
ansible-playbook --diff --limit vm-web01 playbooks/web-config.yml두 번째 실행에서는 변경이 발생하지 않았다.
vm-web01 : ok=13 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
후속 검증도 다시 성공했다.
nginx -t성공- localhost HTTP 200
- 응답 본문에
WEB01 - Zone 1포함 - 응답 본문에
vm-web01포함
첫 적용에서 필요한 두 변경을 수행한 뒤 두 번째 실행이 changed=0으로 끝났으므로, vm-web01에 대한 구성 Playbook의 멱등성을 확인했다.
두 번째 백엔드 적용과 Drift 복구는 다음 기록으로 분리했다.