ansible_facts๋?
ansible_facts
๋ Ansible์ด ์๊ฒฉ ํธ์คํธ์์ ์๋์ผ๋ก ์์งํ๋ OS ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋์
๋๋ฆฌ ํํ์ ๋ฐ์ดํฐ์ด๋ค. ๊ฐ๋จํ ๋งํ์๋ฉด Ansible์ playbook์ด ์คํ๋ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก gather_facts
๋ฅผ ํตํด ํธ์คํธ์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์์งํ๊ณ , ์ด๋ฅผ ansible_facts
์ ๋์
๋๋ฆฌ๋ก ์ ์ฅํ๋ค.
1. Gather Facts ์ ๋ณด ์ถ๋ ฅ ํ ์คํธ
---
- name: Gather facts ํ
์คํธ
hosts: all
tasks:
- name: ์์ง ์ ๋ณด ์ถ๋ ฅ
debug:
var: ansible_facts['distribution']
var: ansible_facts['default_ipv4']['address']
์ฒ์์๋ ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ์งฐ๋๋ฐ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค.
debug ๋ชจ๋์์๋ ํ ๋ฒ์ ๋ ๊ฐ ์ด์์ ๋ณ์๋ฅผ var ์ต์
์ผ๋ก ์ถ๋ ฅํ ์ ์๋ค. ๋ ๊ฐ ์ด์์ ๋ณ์๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด ๊ฐ ๋ณ์๋ฅผ ๋ณ๋์ debug ํ์คํฌ๋ก ๋๋์ด ์ฌ์ฉํด์ผ ํ๋ค.
๋ํ, ๊ธฐ๋ณธ์ ์ผ๋ก gather_facts
๋ yes๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ช
์์ ์ผ๋ก ์ค์ ํ์ง ์์๋ Ansible์ด ํธ์คํธ์ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ์์งํ๋ค. ๊ทธ๋ฌ๋ gather_facts: no
๋ก ์ค์ ํ๋ฉด, ์ ๋ณด๊ฐ ์์ง๋์ง ์์ ansible_facts
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ๊ฐ ๋ณ์๋ฅผ ๋ณ๋์ ํ์คํฌ๋ก ๋๋ ๋ค์ ์ถ๋ ฅํด๋ณด์๋ค.
---
- name: Gather Facts ํ
์คํธ
hosts: all
tasks:
- name: Distribution ์ ๋ณด ์ถ๋ ฅ
debug:
var: ansible_facts['distribution']
- name: IPv4 ์ฃผ์ ์ถ๋ ฅ
debug:
var: ansible_facts['default_ipv4']['address']
ํธ์คํธ์์ ์ฌ์ฉํ๋ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ ์ ๋ณด์ IP ์ ๋ณด๊ฐ ์ถ๋ ฅ๋์๋ค.
2. Gather Facts ๊ฒฐ๊ณผ๋ฅผ JSON ํ์ผ๋ก ์ ์ฅํ๊ธฐ
์์ง๋ ansible_facts์ ๋ชจ๋ ์ ๋ณด๋ฅผ jsonํ์ผ๋ก ์ ์ฅํ๊ณ ๋ฏ์ด๋ณด๊ณ ์ถ์ด JSON ํ์ผ๋ก ์ ์ฅํ๋ ๋ฒ์ ์ฐพ์๋ณด์๋ค.
---
- name: ansible_facts test
hosts: all
gather_facts: yes
tasks:
- name: ํ์ผ ์ ์ฅ ๋ณ์
set_fact:
file_dest: "/home/ansible/projects/result.json"
dir_dest: "/home/ansible/projects"
- name: ๋๋ ํ ๋ฆฌ ์์ฑ
file:
path: "{{ dir_dest }}"
state: directory
delegate_to: localhost
- name: ๊ฒฐ๊ณผ ์ ์ฅ
copy:
content: "{{ ansible_facts | to_json }}"
dest: "{{ file_dest }}"
delegate_to: localhost
- set_fact
- set_fact๋ Ansible์์ ์์ ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ชจ๋์ด๋ค. Playbook ๋ด์์ ํน์ ๊ฐ์ ๋ณ์๋ก ์ ์ฅํ์ฌ ์ดํ์ ํ์คํฌ์์ ์ฌ์ฉํ ์ ์๋ค. set_fact๋ก ์ค์ ๋ ๋ณ์๋ playbook์ด ์คํ๋๋ ๋์๋ง ์ฐธ์กฐ ๊ฐ๋ฅํ๋ค.
- file_dest๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ํ์ผ์ ๊ฒฝ๋ก์ด๋ค.
- dir_dest๋ ๊ฒฐ๊ณผ ํ์ผ์ ์ ์ฅํ ๋๋ ํ ๋ฆฌ์ ๊ฒฝ๋ก์ด๋ค.
- file
- file ๋ชจ๋์ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ์์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- path๋ฅผ ํตํด ๊ด๋ฆฌํ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ์ ์๋ค.
- state๋ ๊ฒฝ๋ก์ ์ํ๋ฅผ ์ง์ ํ๋ค. ์์ ๊ฐ์ด state๋ฅผ directory๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ, ์ง์ ๋ ๊ฒฝ๋ก๊ฐ ๋๋ ํ ๋ฆฌ๋ก ์์ฑ๋๋ค.
- delegate_to
- ํน์ ์์ ์ ๋ค๋ฅธ host์์ ์คํํ ์ ์๋๋ก ํ๋ Ansible ๊ธฐ๋ฅ
- ๋ณดํต playbook์ hosts์ ์ ์๋ ํธ์คํธ์์ ์คํ๋์ง๋ง, ํน์ ์์ ๋ง ๋ก์ปฌ์์ ์คํํ๊ฑฐ๋ ๋ค๋ฅธ ํธ์คํธ์์ ์คํํ ๋ ์ฌ์ฉ๋๋ค.
- ํด๋น ์ฝ๋๋ ํ์ผ์ ๋ก์ปฌ ์๋ฒ์ ์ ์ฅํด์ผ ๋๋ฏ๋ก localhost๋ก ์ค์ ํ๋ค.
- copy
- copy ๋ชจ๋์ ์๋ณธ ํ์ผ์ ๋ด์ฉ์ ๋ค๋ฅธ ์์น์ ๋ณต์ฌํ๊ฑฐ๋, ํ ์คํธ ๋ด์ฉ์ ์ง์ ๋ ํ์ผ์ ์ ์ฅํ ๋ ์ฌ์ฉ๋๋ค.
- content๋ ํ์ผ์ ๋ณต์ฌํ ๋ด์ฉ ํน์ ํ์ผ ๋ด์ฉ์ ์ ์ํ ๋ ์ฌ์ฉ๋๋ค.
- dest๋ ๋ชฉ์ ์ง ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ธ๋ค.
๊ฒฐ๊ณผ๊ฐ ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋์๊ณ , ๋ง๋ค์ด์ง jsonํ์ผ์ ํ์ธํด๋ณด๋ฉด
์ ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด jsonํ์ผ๋ก ๋ณํํ๊ณ ์ถ์ด to_nice_json์ ์ฌ์ฉํด์ ๋ค์ ๋๋ ค๋ดค๋ค.
gather_facts๋ฅผ ํตํด ์ป์ ์ ์๋ ๋ชจ๋ ์ ๋ณด๊ฐ ์ ๋ด๊ฒจ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Infra & DevOps > Ansible' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Ansible] ansible.cfg ํ์ผ ์์ฑ ๋ฐ ์ค์ (0) | 2024.03.29 |
---|---|
[Ansible] Shell, Command, Raw ๋ชจ๋์ ์ฐจ์ด์ (0) | 2024.03.28 |
[Ansible] Playbook ์์ํ๊ธฐ & ํ ํ ์คํธ (1) | 2024.03.26 |
[Ansible] Ansible๊ณผ EC2 ์๋ฒ ์ฐ๊ฒฐ ํธ๋ฌ๋ธ์ํ (0) | 2024.03.25 |
[Ansible] Rocky Linux 9์ Ansible ์ค์นํ๊ธฐ (0) | 2024.03.23 |