Cloud Engineering/Ansible

[Ansible] Fact (팩트 변수) 란?

minjiwoo 2023. 3. 2. 14:51
728x90

Fact (팩트 변수) 란? 

관리하는 노드의 정보를 가지고 있는 변수이다. 이 정보에는 운영체제, 로컬 변수, IP 주소, NIC 등의 정보가 포함된다. fact 변수는 setup 모듈을 이용해서 정보를 확인할 수 있다. Adhoc 과 플레이북을 통해 setup 모듈을 실행할 수 있다. 

모든 노드들에 대한 팩트변수 내용 확인하기 

ansible all -m setup

 

팩트 변수 이름 참조하기

setup 모듈을 이용해서 ansible_ 접두사가 붙은 지정된 변수 이름으로 참조하면 원하는 팩트변수의 정보를 얻을 수 있다.

 

Adhoc 명령어로 팩트 변수 참조하는 예시

$ ansible ansi-node1 -m setup -a "filter=ansible_distribution”

-m 옵션으로 모듈을 지정하고, -a 옵션으로 argument를 지정한다. filter= 뒤에 참조하고자 하는 변수를 쓴다. (참고로 ansible_distribution 이란, 배포버전 정보를 담고 있는 변수이다. )

 

Playbook 으로 팩트 변수 사용하기 

- hosts: ansi-node1                        
  tasks:                        
  - debug:                      
      msg: "{{ ansible_facts }}"

 

팩트 변수 비활성화 하기 

- hosts: ansi-node1             
  gather_facts: no              
  tasks:                        
  - debug:                      
      msg: "{{ ansible_facts }}"

gather_facts 라는 필드에 false/False/no/0 값을 넣으면 팩트변수에 의한 정보를 수집하지 않는다. 따라서 위의 플레이북을 실행하면, fact 변수가 비활성화 되어서 ansible_facts 라는 변수에는 아무런 값도 담기지 않게 된다. 

다시 팩트 변수를 활성화 하고 싶다면 setup 필드를 추가해주면 된다. 

- hosts: ansi-node1             
  gather_facts: no       # fact 변수 비활성화         
  tasks:                        
  - debug:                      
      msg: "{{ ansible_facts }}"
  - setup:   # fact 변수 활성화                   
  - debug:                      
      msg: "{{ ansible_facts }}"

 

팩트 변수로 local variable  참조하기 

/etc/ansible/facts.d/ 디렉토리에 .fact 확장자로 끝나는 파일을 만들고, 파일 내에 사용할 local variable를 작성한다 

- hosts: ansi-node2
  tasks:
  - file:
      dest: "/etc/ansible/facts.d/"
      state: "directory"
      recurse: 1
  - copy:
      content: "[test2_section] \ntest3_var1=100\ntest3_var2=200\n"
      dest: "/etc/ansible/facts.d/local.fact"

플레이북에서 참조하여 사용할 수 있다. 

- hosts: ansi-node2
  gather_facts: yes
  tasks:           
  - debug:         
      msg: "{{ ansible_local }}"

ansible-playbook 을 실행하면 ansible_local 이 잘 찍히는 것을 확인할 수 있다. 

 

팩트 변수 종류 

NIC 인터페이스

{{ ansible_interfaces }}

 

host이름

다음의 방법 모두 호스트 이름을 참조하는 변수이다.

  • {{ ansible_hostname }}
  • {{ ansible_facts.hostname }}
  • {{ ansible_facts[’hostname’] }}

 

IPv4 주소

{{ ansible_all_ipv4_addresses }}

 

728x90