Infra & DevOps/Ansible

[Ansible] ansible_facts์™€ gather_facts ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

hyeyeonismm 2024. 3. 26. 21:47

 

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๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ž˜ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.