Ansible facts
💡 ansible fact는 ansible의 내장 모듈인 setup과 debug 모듈에 의해 실행될 수 있습니다
💡 gather fact를 비활성화 하면 facts 변수를 이용할 수 없습니다. task에서 setup 또는 debug 모듈을 통해서도 facts를 수집할 수 없습니다.
ansible facts는 remote host에 대한 정보를 의미하며 OS, IP address, hostname 등등의 정보를 포함한다.
ansible을 실행하면 자동으로 remote host에 대한 정보를 수집하고 수집한 정보 는 ansible_ 이라는 접두사를 붙여 저장한다. playbook이 아닌 ad-hoc 명령어에서는 setup 모듈을 이용하여 ansible fact를 수집할 수 있다.
이러한 fact 정보를 수집하여 특정 기준과 일치하는 그룹에만 task를 실행한다던지의 조건문을 생성해줄 수도 있다.
여담으로 playbook을 실행할 때 gathering facts라는 이름으로 전반적인 fact 수집 후에 오류가 없다면 task를 실행하게 되는데 호스트들이 모두 정상적인 상태라는 것을 알고 있다면 비활성화 하여 playbook의 성능을 향상 시킬 수 있다.
- name:
hosts:
gather_facts: no
위 코드로 fact 자체를 비활성화할 수 있다.
facts 수집하기
수집된 fact 값은 ansible_facts 변수에 저장되며, debug 모듈을 사용해 ansible_facts 변수 값을 출력할 수 있다.
ansible -m setup [host-pattern] | grep [variable]
우선 위 코드는 ad-hoc 명령어를 이용하여 facts를 수집하는 명령어다.
- name:
hosts:
task:
-name:
debug:
var: ansible_facts
기본적으로 위와 같이 코드를 작성한다.
사진 속에 있는 정보 외에도 호스트에 대한 굉장히 많고 자세한 양의 정보들이 출력되며 앞서 말했듯이 이런 정보들은 모두 ansible_ 접두사를 붙여 저장하게 된다. 그렇다면 위에 보이는 정보 중 dns에 대한 정보를 불러와보도록 하겠다.
수많은 정보들 중 dns 정보만 출력해낸 것을 확인할 수 있다.
하위 내용들에 대해서 아래와 같이 접근할 수 있다.
---
- name: ping test
hosts: hostname_Ansible_slave_node_for_web:hostname_Control_node
tasks:
- name:
debug:
var: ansible_dns['nameservers']
nameserver만 표시되는 것을 확인할 수 있다. 한번에 여러 변수 표시는 yaml 문법 공부를 좀 더 해봐야겠다. - 배열 표시라 이용하면 될 것 같았는데 안된다. 그냥 task 를 여러개 적어서 사용하는 것 같다.
변수가 아닌 메세지 형태로 출력할 수도 있다. 아래의 코드 형식처럼 말이다.
---
- name: ping test
hosts: hostname_Ansible_slave_node_for_web:hostname_Control_node
tasks:
- name:
debug:
msg:
- {{ ansible_dns['nameservers'] }}
위와 같이 코드를 작성한다.
정상적으로 포맷팅되어 출력되는 것을 확인할 수 있다. 이런 식으로 상태 관리에 이용할 수도 있을 것 같다.
'네트워크 > 네트워크 가상화, 자동화' 카테고리의 다른 글
Anycast Gateway (0) | 2024.04.29 |
---|---|
SPB(Shortest Path Bridging) (0) | 2024.04.14 |
Ansible Tags (1) | 2023.10.10 |
Ansible known hosts 자동 등록 & 무시 방법 (0) | 2023.09.12 |
Ansible Overview(config, inventory, dynamic inventory, playbook) (0) | 2023.09.11 |