Infra & DevOps/Ansible

[Ansible] Managed Node์— ํŒŒ์ผ ์ƒ์„ฑํ•˜๋Š” Playbook ์ž‘์„ฑ

hyeyeonismm 2024. 3. 30. 19:09
Managed Node์— ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” playbook ์‹ค์Šต ์ง„ํ–‰ ๊ณผ์ •์„ ๊ธฐ๋กํ–ˆ๋‹ค.

 

1. Playbook ์ž‘์„ฑ

---
- name: ํŒŒ์ผ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
  hosts: all
  tasks:
    - name: touch file
      file:
        path: /home/test/test.txt
        state: touch

 

file ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ Managed Node์ธ ec2 ์„œ๋ฒ„์— ํŒŒ์ผ์„ ๋งŒ๋“œ๋ ค๊ณ  ํ–ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ permission ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ..

 

ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ root๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์˜€์œผ๋ฉฐ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

---
- name: ํŒŒ์ผ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
  hosts: all
  become: true  # root ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰
  tasks:
    - name: touch file
      file:
        path: /home/test/test.txt
        state: touch

 

playbook์„ ์ˆ˜์ •ํ•˜๊ณ  ๋Œ๋ ค๋ณด๋ฉด test.txt ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

file ๋ชจ๋“ˆ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜

  • path: ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ ์ง€์ • (ํ•„์ˆ˜)
  • state: ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ ์ƒํƒœ ์„ค์ •
    • absent: ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ์‚ญ์ œ
    • directory: ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
    • file: ํŒŒ์ผ ์ƒ์„ฑ
    • link: ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑ
    • touch: ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ -> ๋นˆ ํŒŒ์ผ ์ƒ์„ฑ, ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ -> ํŒŒ์ผ ์ˆ˜์ • ์‹œ๊ฐ„ ๊ฐฑ์‹ 
  • owner: ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ์†Œ์œ ์ž ์ง€์ •
  • group: ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ๊ทธ๋ฃน ์ง€์ •
  • mode: ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ์„ค์ •

 

๋ณ€์ˆ˜ ์„ค์ •

๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‹ค์Šตํ•ด๋ณด๋ฉฐ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋ณด๊ฒ ๋‹ค.

 

1. playbook ๋‚ด์—์„œ ๋ณ€์ˆ˜ ์„ค์ •

vars ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

---
- name: ํŒŒ์ผ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
  hosts: all
  become: true
  vars:
    file_name: honggildong.txt
  tasks:
    - name: touch file
      file:
        path: /home/test/{{ file_name }}
        state: touch

๋ณ€์ˆ˜๋ฅผ {{ vars }} ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ Jinja2 ํ…œํ”Œ๋ฆฟ ๋ฐฉ์‹์ด๋‹ค.


2. ์™ธ๋ถ€ ๋ณ€์ˆ˜ ํŒŒ์ผ ์‚ฌ์šฉ

vars.yml ํŒŒ์ผ์— ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , playbook์—์„œ ์ด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ๋ณ€์ˆ˜ ์ •์˜

 

  • ๋ณ€์ˆ˜ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
---
- name: ํŒŒ์ผ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
  hosts: all
  become: true
  vars_files:
    - /home/ansible/vars/vars.yml
  tasks:
    - name: touch file
      file:
        path: /home/test/{{ file_name }}
        state: touch

 

3. CLI์—์„œ ๋ณ€์ˆ˜ ์„ค์ •

CLI์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด playbook์„ ์‹คํ–‰ํ•  ๋•Œ ๋™์ ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฆ‰์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”Œ๋ ˆ์ด๋ถ ์ž‘์„ฑ
---
- name: ํŒŒ์ผ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
  hosts: all
  become: true
  tasks:
    - name: touch file
      file:
        path: /home/test/{{ file_name }}
        state: touch

 

  • CLI ์ž‘์„ฑ
    --extra-vars ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด file_name์„ ์ „๋‹ฌํ•œ๋‹ค.

 

cli_test.txt ํŒŒ์ผ์ด ์ƒ๊ธด ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.