Ansible Facts
팩트는 Ansible이 관리 호스트의 자원 정보를 수집한 변수를 뜻한다. 팩트 변수에는 아래와 같은 정보들이 포함된다.
- 호스트 이름
- 커널 버전
- 네트워크 인터페이스
- OS 버전
- CPU 정보
- 메모리 정보
- HDD 정보
이 처럼 활용성 높은 많은 정보를 수집하여 운용자는 제어 노드를 관리할 수 있다. 간단한 플레이북을 통해 팩트 변수를 살펴본다.
[root@Ansible-Controller playbook]# cat print_facts.yml
---
- name: ansible facts
hosts: node1
gather_facts: True
tasks:
- name: Print Facts
ansible.builtin.debug:
var: ansible_facts
하지만 팩트 변수는 광범위한 정보를 수집하기 때문에 앤서블 엔진에 불필요한 서비스 부하가 발생할 수도 있고, 이러한 팩트 변수가 필요가 없는 작업이 있을 수도 있다. 이때는 플레이북에서 팩트 수집을 off 해주거나, ansible.cfg 설정에서 팩트를 수집하지 않도록 설정해줄 수 있다.
1. ansible.cfg에 아래 구문을 추가
gathering=explicit
2. playbook 작성 시 아래구문 추가
gather_facts: False
변수로써 팩트 사용
수집한 팩트를 변수로써 선언하여 사용할 수 있다.
Fact | ansible_facts.* 표기법 | ansible_* 표기법 |
호스트 명 | ansible_facts.hostname | ansible_hostname |
도메인 기반 호스트 명 | ansible_facts.fqdn | ansible_fqdn |
IPv4 addr | ansible_facts.default_ipv4.address | ansible_default_ipv4.address |
네트워크 인터페이스 목록 | ansible_facts.interfaces | ansible_interfaces |
dns 서버 목록 | ansible_facts.dns.nameservers | ansible_dns.nameservers |
커널 버전 | ansible_facts.kernel | ansible_kernel |
OS | ansible_facts.distribution | ansible_distribution |
앤서블 2.5 버전 이전에는 ansible_* 형태로 팩트 변수를 사용하였다. 이러한 형태는 일반변수와 팩트변수 사이에서 종종 collesion을 야기하기 때문에 이후 버전에서 부터는 ansible_facts.* 형태로 팩트 변수를 사용하기를 권장하고 있다.
현재 앤서블 버전에는 양쪽 표기법 모두 인지를 하여 활용이 가능하다. 만약 ansible_* 표기법을 허용하고 싶지 않다면, ansible.cfg에 아래 구문을 추가해준다.
inject_facts_as_vars=False
사용자 정의 팩트 만들기
사용자에 의해 정의된 팩트를 이용하여 환경 설정 파일의 일부 항목을 구성하거나 조건부 작업을 진행할 수 있다.
사용자 지정 팩트는 관리 호스트 로컬에 있는 '/etc/ansible/facts.d' 디렉토리 내에 '*.fact' 확장자로 지정되어야만 이용이 가능하다.
# /etc/ansible/facts.d 아래 경로에 .fact 파일 생성
[root@Ansible-Controller playbook]# cat /etc/ansible/facts.d/Ansible-Controller-Sysinfo.fact
[system_info]
os = Rocky Linux 8.8
kernel = 4.18.0-477.10.1.el8_8.x86_64
[users]
user1 = root
user2 = ansible
작성한 관리노드의 local fact 를 출력하는 플레이북을 만들고 실행해보자.
[root@Ansible-Controller playbook]# cat print_local_fact.yml
---
- name: ansible facts
hosts: node1
gather_facts: True
tasks:
- name: Print Facts
ansible.builtin.debug:
var: ansible_facts
'Engineering > Ansible' 카테고리의 다른 글
[Ansible] 9. 핸들러 및 작업 실패 처리 (2) | 2024.10.02 |
---|---|
[Ansible] 8. 반복문과 조건문을 이용한 제어문 구현 (0) | 2024.09.04 |
[Ansible] 6. Ansible Vault (0) | 2024.08.29 |
[Ansible] 5. 변수 (1) | 2024.08.28 |
[Ansible] 4. Playbook 살펴보기 (0) | 2024.08.28 |