๋๋ ๋ค๋ฅธ ์ฌ๋์ Ansible ์ฝ๋์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ๋ง์ด ํ๊ณ , ์ง์ ์์ฑ๋ ๋ง์ด ํฉ๋๋ค. ์ค์(๋ค๋ฅธ ์ฌ๋์ ์ค์์ ๋ด ์ค์ ๋ชจ๋)์ ์ฌ๋ฌ ์ธํฐ๋ทฐ๋ฅผ ๋ถ์ํ๋ ๊ณผ์ ์์ ๋๋ Ansible ์ฌ์ฉ์๊ฐ ์ ์ง๋ฅด๋ ์ฃผ์ ์ค์๋ฅผ ๊นจ๋ฌ์์ต๋๋ค. ๊ทธ๋ค์ ๊ธฐ๋ณธ์ ๋ง์คํฐํ์ง ๋ชปํ ์ฑ ๋ณต์กํ ์ผ์ ๋น ์ ธ๋ ๋ค๋ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ๋ณดํธ์ ์ธ ๋ถ์๋ฅผ ๋ฐ๋ก์ก๊ธฐ ์ํด ๋๋ ์ด๋ฏธ Ansible์ ์๊ณ ์๋ ์ฌ๋๋ค์ ์ํด Ansible์ ๋ํ ์๊ฐ๋ฅผ ์์ฑํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋๋ ๊ฒฝ๊ณ ํฉ๋๋ค. ์ด๊ฒ์ ์ฌ๋์ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ ํ ๊ฒ์ด ์๋๋๋ค. ์ด๊ฒ์ ๋ง์ ๊ธ์์ ๊ทธ๋ฆผ์ด ์๋ ์ฅ๋ฌธ์ ์ฑ ์ ๋๋ค.
๋ ์๊ฐ ๊ธฐ๋ํ๋ ์์ค์ ์ด๋ฏธ ์์ฒ ์ค์ ์๋ผ๊ฐ ์์ฑ๋์๊ณ , ๋ฌด์ธ๊ฐ๊ฐ ์ด๋ฏธ ์ ์ ์ค์ด์ง๋ง "์ด์ฉ์ง ๋ชจ๋ ๊ฒ์ด ๋น๋ค์ด์ ธ ์๋ค"๋ ๊ฒ์ ๋๋ค.
์ ๋ชฉ
Ansible ์ฌ์ฉ์๊ฐ ์ ์ง๋ฅด๋ ๊ฐ์ฅ ํฐ ์ค์๋ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๋ ๊ฒ์ ๋๋ค. ์ด๋ฆ์ ๋ชจ๋ฅด๋ฉด ์ค๋ช ์์ ๋ด์ฉ์ ์ดํดํ ์ ์์ต๋๋ค. ์ด์์๋ ์: ์ธํฐ๋ทฐ ์ค์ Ansible์์ ๋ง์ ๊ธ์ ์ผ๋ค๊ณ ๋งํ๋ ๋ฏํ ์ฌ๋์ด โํ๋ ์ด๋ถ์ ์ด๋ค ์์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๊น?โ๋ผ๋ ์ง๋ฌธ์ ๋๋ตํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ โ๋๋ต์ ํ๋ ์ด๋ถ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒ์ผ๋ก ์์๋๋คโ๊ณ ์ ์ํ์ โ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๋๋คโ๋ ์์ค์ด ๋ค๋ฐ๋๋ค. ์ฌ๋๋ค์ ๋์ ์ํด Ansible์ ์์ฑํ๊ณ ๋์ด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ์ค์ ๋ก ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง๋ง ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๋ชจ๋ฆ ๋๋ค.
๊ทธ๋ผ ๊ฐ๋จํ ๊ฒ๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฆ์ด ๋ฌด์์ธ๊ฐ์? ์๋ง๋ ๋น์ ์ ์ด๊ฒ์ ์๊ณ ์์ ์๋ ์๊ณ , ๋ฌธ์๋ฅผ ์ฝ์ ๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ฅผ ์๋ ์์ต๋๋ค.
ansible-playbook์ ํ๋ ์ด๋ถ์ ์คํํฉ๋๋ค. ํ๋ ์ด๋ถ์ yml/yaml ํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ๋ก, ๊ทธ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ์์ต๋๋ค.
---
- hosts: group1
roles:
- role1
- hosts: group2,group3
tasks:
- debug:
์ฐ๋ฆฌ๋ ์ด ์ ์ฒด ํ์ผ์ด ํ๋ ์ด๋ถ์ด๋ผ๋ ๊ฒ์ ์ด๋ฏธ ๊นจ๋ฌ์์ต๋๋ค. ์ญํ ์ด ์ด๋์ ์๊ณ ์์ ์ด ์ด๋์ ์๋์ง ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋์ด๋ ์ด๋์ ์๋์? ๊ทธ๋ฆฌ๊ณ ๋์ด์ ์ญํ ๋๋ ํ๋ ์ด๋ถ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๊ทธ๊ฒ์ ๋ชจ๋ ๋ฌธ์์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ๊ทธ๊ฒ์ ๊ทธ๋ฆฌ์ํฉ๋๋ค. ์ด๋ณด์ - ๋๋ฌด ๋ง์์ ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ๊ธฐ์ตํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฒฝํ์ด ํ๋ถํ - "์ฌ์ํ ๊ฒ" ๋๋ฌธ์ ๋๋ค. ๊ฒฝํ์ด ์๋ ๊ฒฝ์ฐ ์ด ํ์ด์ง๋ฅผ ์ต์ํ XNUMX๊ฐ์์ ํ ๋ฒ์ฉ ๋ค์ ์ฝ์ผ๋ฉด ๊ทํ์ ์ฝ๋๊ฐ ๋๊ธ ์ต๊ณ ์ ์ฝ๋๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ๊ธฐ์ตํ์ธ์. ํ๋ ์ด๋ถ์ ํ๋ ์ด์ ํ๋ ์ด๋ก ๊ตฌ์ฑ๋ ๋ชฉ๋ก์
๋๋ค. import_playbook
.
์ด๊ฒ์ ํ๋์ ์ฐ๊ทน์
๋๋ค:
- hosts: group1
roles:
- role1
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ ๋ค๋ฅธ ์ฐ๊ทน์ด๊ธฐ๋ ํฉ๋๋ค:
- hosts: group2,group3
tasks:
- debug:
๋์ด๋ ๋ฌด์์ธ๊ฐ? ๊ทธ๋ ๋ ์์?
ํ๋ ์ด๋ ํ๋ ์ด๋ถ์ ํต์ฌ ์์์
๋๋ค. ์๋ํ๋ฉด ํ๋ ์ด ์ค ํ๋ ์ด๋ ์ญํ ๋ฐ/๋๋ ์์
๋ชฉ๋ก์ ์คํํด์ผ ํ๋ ํธ์คํธ ๋ชฉ๋ก๊ณผ ์ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฌธ์์ ๊น์ ๊ณณ์์ ๋ค์ ์ฌํญ์ ๋ํ ์ธ๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. delegate_to
, ๋ก์ปฌ ์กฐํ ํ๋ฌ๊ทธ์ธ, ๋คํธ์ํฌ CLI๋ณ ์ค์ , ์ ํ ํธ์คํธ ๋ฑ ์์
์ด ์ํ๋๋ ์ฅ์๋ฅผ ์ฝ๊ฐ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ํ์ง๋ง ์์ด๋ฒ๋ฆฌ์ธ์. ์ด๋ฌํ ์๋ฆฌํ ์ต์
์ ๊ฐ๊ฐ ๋งค์ฐ ํน์ ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ ํ์คํ ๋ณดํธ์ ์ด์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋๊ฐ ์๊ณ ํ์ฉํด์ผ ํ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
"๋ญ๊ฐ" "์ด๋๊ฐ"๋ฅผ ์ํํ๊ณ ์ถ๋ค๋ฉด ์ฐ๊ทน์ ์๋๋ค. ์ญํ ์ด ์๋๋๋ค. ๋ชจ๋๊ณผ ๋๋ฆฌ์ธ์ด ์๋ ์ญํ ์ด ์๋๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์ฐ๊ทน์ ์๋๋ค. ํธ์คํธ ํ๋์๋ ์คํํ ์์น๋ฅผ ๋์ดํ๊ณ ์ญํ /์์ ์๋ ์คํํ ํญ๋ชฉ์ ๋์ดํฉ๋๋ค.
๊ฐ๋จํ์ฃ ? ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ์ ์์ต๋๊น?
๋์ด๋ฅผ ํตํด์๊ฐ ์๋๋ผ ์ด๋ฅผ ํ๊ณ ์ถ์ ์๊ตฌ๊ฐ ์๊ธฐ๋ ํน์ง์ ์ธ ์๊ฐ ์ค ํ๋๋ '๋ชจ๋ ๊ฒ์ ์ค์ ํ๋ ์ญํ '์ ๋๋ค. ์ฒซ ๋ฒ์งธ ์ ํ์ ์๋ฒ์ ๋ ๋ฒ์งธ ์ ํ์ ์๋ฒ๋ฅผ ๋ชจ๋ ๊ตฌ์ฑํ๋ ์ญํ ์ ๊ฐ๊ณ ์ถ์ต๋๋ค.
์ ํ์ ์ธ ์๋ ๋ชจ๋ํฐ๋ง์
๋๋ค. ๋ชจ๋ํฐ๋ง์ ๊ตฌ์ฑํ๋ ๋ชจ๋ํฐ๋ง ์ญํ ์ ๊ฐ๊ณ ์ถ์ต๋๋ค. ๋ชจ๋ํฐ๋ง ์ญํ ์ ํ๋ ์ด์ ๋ฐ๋ผ ๋ชจ๋ํฐ๋ง ํธ์คํธ์ ํ ๋น๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ํฐ๋ง์ ์ํด์๋ ๋ชจ๋ํฐ๋ง ์ค์ธ ํธ์คํธ์ ํจํค์ง๋ฅผ ์ ๋ฌํด์ผ ํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ๋๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? iptables๋ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ๋๋ฆฌ์? ๋ํ ๋ชจ๋ํฐ๋ง์ ํ์ฑํํ๋ ค๋ฉด DBMS์ ๋ํ ๊ตฌ์ฑ์ ์์ฑ/์์ ํด์ผ ํฉ๋๋ค. ๋๋ฆฌ์! ๊ทธ๋ฆฌ๊ณ ์ฐฝ์๋ ฅ์ด ๋ถ์กฑํ๋ฉด ๋ํ๋จ์ ๋ง๋ค ์๋ ์์ด์ include_role
๊ทธ๋ฃน ๋ชฉ๋ก ๋ฐ ๋ด๋ถ์์ ๊น๋ค๋ก์ด ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฒฉ ๋ฃจํ์์ include_role
๋น์ ์ ๋ ๋ง์ ๊ฒ์ ํ ์ ์์ต๋๋ค delegate_to
๋ค์. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ฐ๋ค...
"๋ชจ๋ ๊ฒ์ ์ํํ๋" ํ๋์ ๋ชจ๋ํฐ๋ง ์ญํ ์ ๊ฐ๊ณ ์ ํ๋ ์ข์ ์๋ง์ ์ฐ๋ฆฌ๋ฅผ ์์ ํ ์ง์ฅ์ผ๋ก ์ด๋๋ค. ์ฌ๊ธฐ์ ํ์ถ๊ตฌ๋ ๋จ ํ๋๋ฟ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ชจ๋ ๊ฒ์ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ค์๋ ์ด๋์ ๋ฐ์ํ๋์? ํธ์คํธ X์์ ์์ "x"๋ฅผ ์ํํ๋ ค๋ฉด ํธ์คํธ Y๋ก ๊ฐ์ ๊ฑฐ๊ธฐ์ "y"๋ฅผ ์ํํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ ์๊ฐ ๊ฐ๋จํ ์ฐ์ต์ ์ํํด์ผ ํ์ต๋๋ค. ๊ฐ์ ํธ์คํธ Y์์ y๋ฅผ ์ํํ๋ play๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. "x"์ ๋ญ๊ฐ๋ฅผ ์ถ๊ฐํ์ง ๋ง๊ณ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํ์ธ์. ํ๋์ฝ๋ฉ๋ ๋ณ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
์ ๋ฌธ๋จ์ ๋ด์ฉ์ ๋ชจ๋ ๋ง๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ์ ๋น์ ์ ๊ฒฝ์ฐ๊ฐ ์๋๋๋ค! DRY ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ๊ณ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ์ฌ๊ฐํ ์ค์๊ฐ ์จ์ด ์์ต๋๋ค. ๋ง์ ํ๋ก์ ํธ๋ฅผ ๊ฒฌ๋ ์ ์๊ฒ ์์ฑ๋ ๊ฒ(๋ ๋์ ์ ์์ง๋ง ๋ชจ๋ ๊ฒ์ด ์๋ํ๊ณ ์๋ฃํ๊ธฐ ์ฝ์ต๋๋ค)์ ์์ฑ์์กฐ์ฐจ๋ ์ดํดํ ์ ์๋ ์์ ํ ๊ณตํฌ๋ก ๋ง๋ ์ค๋ฅ์ ๋๋ค. ๊ทธ๊ฒ์ ํจ๊ณผ๊ฐ ์์ง๋ง ํ๋๋๊ป์๋ ๋น์ ์ด ์๋ฌด๊ฒ๋ ๋ฐ๊พธ๋ ๊ฒ์ ๊ธ์งํ์ จ์ต๋๋ค.
์ค๋ฅ: ์ญํ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ๋๋ค. ์ด ๋น์ ๋ ์ข์ ์์์ ๋๋ฌด ๋ง์ด ๋ง์ณค๊ธฐ ๋๋ฌธ์ ๋ณด๊ธฐ๋ง ํด๋ ์ฌํ๋ค. ์ญํ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ์ด ์๋๋๋ค. ๊ทธ๋ ๋ ๊ณ์ฐ์ ํ ์ ์๊ณ ํ๋ ์ด ์์ค์ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ๋์ด๊ฐ ์ด๋ค ๊ฒฐ์ ์ ๋ด๋ฆฌ๋์ง ์๋ ค์ฃผ์ธ์.
๊ณ ๋ง์์, ๋น์ ๋ง์ด ๋ง์์. Play๋ ์ด๋ค ํธ์คํธ์์ ์ด๋ค ์์ ๊ณผ ์ญํ ์ ์ํํ ์ง ๊ฒฐ์ ํฉ๋๋ค(๋ณด๋ค ์ ํํ๊ฒ๋ ์ ๋ณด ํฌํจ).
์ด ๊ฒฐ์ ์ ์ญํ ์ ์์ํ๊ณ ์ฌ์ง์ด ๊ณ์ฐ์ ์ํํ๋๋ผ๋ ์์ (๋ฐ ์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ ์ฌ๋)์ ๋น์ฐธํ ์กด์ฌ๋ก ํ๋ฉธ์ํค๋ ๊ฒ์ ๋๋ค. ์ญํ ์ ์ํ๋๋ ์์น๋ฅผ ๊ฒฐ์ ํ์ง ์์ต๋๋ค. ์ด ๊ฒฐ์ ์ ํ๋ ์ด๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ญํ ์ ๋งํ ๋๋ก, ๋งํ ๊ณณ์์ ์ํ๋ฉ๋๋ค.
Ansible๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ด ์ ์ํํ์ง, ๊ทธ๋ฆฌ๊ณ ์ COBOL์ด Ansible๋ณด๋ค ๋์์ง ์ด ์ฅ์์ ๋ณ์์ ์ง์์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ์ง๊ธ์ ํ ๊ฐ์ง๋ง ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ ๊ณ์ฐ์ ์ ์ญ ๋ณ์์ ์ง์ธ ์ ์๋ ๋ณ๊ฒฝ ํ์ ์ ๋จ๊ธฐ๋ฉฐ ์ด์ ๋ํด ์๋ฌด๊ฒ๋ ํ ์ ์์ต๋๋ค. ๋ ๊ฐ์ "ํ์ "์ด ๊ต์ฐจํ์๋ง์ ๋ชจ๋ ๊ฒ์ด ์ฌ๋ผ์ก์ต๋๋ค.
๋น๊ผฌ๋ ์ฌ๋์ ๋ํ ์ฐธ๊ณ ์ฌํญ: ์ญํ ์ ํ์คํ ์ ์ด ํ๋ฆ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋จน๋ค delegate_to
ํฉ๋ฆฌ์ ์ธ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋จน๋ค meta: end host/play
. ํ์ง๋ง! ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ๊ฐ๋ฅด์น๋ ๊ฒ์ ๊ธฐ์ตํ์๋์? ์์ด๋ฒ๋ฆฐ ๊ฒ delegate_to
. ์ฐ๋ฆฌ๋ ๊ฐ์ฅ ๋จ์ํ๊ณ ์๋ฆ๋ค์ด Ansible ์ฝ๋์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ์ฝ๊ธฐ ์ฝ๊ณ , ์ฐ๊ธฐ ์ฝ๊ณ , ๋๋ฒ๊ทธํ๊ธฐ ์ฝ๊ณ , ํ
์คํธํ๊ธฐ ์ฝ๊ณ , ์๋ฃํ๊ธฐ ์ฝ์ต๋๋ค. ๋ค์ ํ ๋ฒ:
ํ๋ ์ดํ๊ณ ํ๋ ์ด๋ง์ด ์ด๋ค ํธ์คํธ์์ ๋ฌด์์ ์คํํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
์ด ์น์ ์์๋ ๋์ด์ ์ญํ ์ฌ์ด์ ๋๋ฆฝ์ ๋ค๋ฃจ์์ต๋๋ค. ์ด์ ์์ ๊ณผ ์ญํ ์ ๊ด๊ณ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค.
์๋ฌด์ ์ญํ
๋์ด๋ฅผ ๊ณ ๋ คํด๋ณด์ธ์:
- hosts: somegroup
pre_tasks:
- some_tasks1:
roles:
- role1
- role2
post_tasks:
- some_task2:
- some_task3:
foo๋ฅผ ์ํํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค foo: name=foobar state=present
. ์ด๊ฑด ์ด๋์ ์จ์ผ ํ๋์? ๋ฏธ๋ฆฌ? ์ฐํธ? ์ญํ ์ ๋ง๋์๊ฒ ์ต๋๊น?
...๊ทธ๋ฆฌ๊ณ ์์ ์ ์ด๋๋ก ๊ฐ๋์?
์ฐ๋ฆฌ๋ ๋ค์ ๊ธฐ๋ณธ, ์ฆ ํ๋ ์ด ์ฅ์น๋ถํฐ ์์ํฉ๋๋ค. ์ด ๋ฌธ์ ์ ์ฝ๋งค์ด๋ฉด ๋์ด๋ฅผ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ๊ธฐ์ด๋ก ์ผ์ ์ ์์ผ๋ฉฐ ๊ฒฐ๊ณผ๋ "๋ถํ์ค"ํ ๊ฒ์ ๋๋ค.
์ฌ์ ์ฅ์น: ํธ์คํธ ์ง์์ด, ์ฌ์ ์์ฒด ๋ฐ pre_tasks ์ค์ , ์์ , ์ญํ , post_tasks ์น์ . ํ๋ ์ด๋ฅผ ์ํ ๋๋จธ์ง ๋งค๊ฐ๋ณ์๋ ์ด์ ์ฐ๋ฆฌ์๊ฒ ์ค์ํ์ง ์์ต๋๋ค.
์์
๋ฐ ์ญํ ์ด ํฌํจ๋ ์น์
์ ์์: pre_tasks
, roles
, tasks
, post_tasks
. ์๋ฏธ์ ์คํ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. tasks
ะธ roles
๋ช
ํํ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ฐ๋ฅด๋ฉด ์น์
์ ์ถ๊ฐํ๋ค๊ณ ํฉ๋๋ค. tasks
, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ง roles
. ์์ ๊ฒฝ์ฐ roles
, ์ฒจ๋ถ๋ ๋ชจ๋ ์์
์ ์น์
์ ๋ฐฐ์น๋ฉ๋๋ค. pre_tasks
/post_tasks
.
๋จ์ ๊ฒ์ ๋ชจ๋ ๊ฒ์ด ์๋ฏธ์ ์ผ๋ก ๋ช
ํํ๋ค๋ ๊ฒ์
๋๋ค. pre_tasks
, ๊ทธ ๋ค์์ roles
, ๊ทธ ๋ค์์ post_tasks
.
ํ์ง๋ง ์ฐ๋ฆฌ๋ ์์ง ์ง๋ฌธ์ ๋๋ตํ์ง ์์์ต๋๋ค. ๋ชจ๋ ํธ์ถ์ ์ด๋์ ์์ต๋๊น? foo
์ฐ๋ค? ๊ฐ ๋ชจ๋์ ๋ํ ์ ์ฒด ์ญํ ์ ์์ฑํด์ผ ํฉ๋๊น? ์๋๋ฉด ๋ชจ๋ ๋ฉด์์ ๋๊บผ์ด ์ญํ ์ ๋งก๋ ๊ฒ์ด ์ข์๊น์? ์ญํ ์ด ์๋๋ผ๋ฉด ์ฌ์ ๋๋ ์ฌํ ์ด๋์ ์์ฑํด์ผ ํฉ๋๊น?
์ด๋ฌํ ์ง๋ฌธ์ ๋ํ ํฉ๋ฆฌ์ ์ธ ๋๋ต์ด ์๋ค๋ฉด ์ด๋ ์ง๊ด์ด ๋ถ์กฑํ๋ค๋ ์ ํธ, ์ฆ ๋์ผํ "ํ๋ค๋ฆฌ๋ ๊ธฐ์ด"์
๋๋ค. ๊ทธ๊ฒ์ ์์ ๋ด
์๋ค. ์ฒซ์งธ, ๋ณด์ ์ง๋ฌธ์
๋๋ค. ํ๋ ์ด๊ฐ pre_tasks
ะธ post_tasks
(๊ทธ๋ฆฌ๊ณ ์์
์ด๋ ์ญํ ์ด ์์ต๋๋ค.) ๋ค์์์ ์ฒซ ๋ฒ์งธ ์์
์ ์ํํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. post_tasks
๋๊น์ง ์ฎ๊ธธ๊ฒ์ pre_tasks
?
๋ฌผ๋ก , ์ง๋ฌธ์ ํํ์ ๊ทธ๊ฒ์ด ๊นจ์ง ๊ฒ์์ ์์ํฉ๋๋ค. ํ์ง๋ง ์ ํํ ๋ฌด์์ ๋๊น?
... ํธ๋ค๋ฌ. ๊ธฐ๋ณธ ์ฌํญ์ ์ฝ์ผ๋ฉด ์ค์ํ ์ฌ์ค์ ์ ์ ์์ต๋๋ค. ๋ชจ๋ ํธ๋ค๋ฌ๋ ๊ฐ ์น์
ํ์ ์๋์ผ๋ก ํ๋ฌ์๋ฉ๋๋ค. ์ ๊ฒ๋ค. ๋ชจ๋ ์์
pre_tasks
, ์๋ฆผ์ ๋ฐ์ ๋ชจ๋ ํธ๋ค๋ฌ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ชจ๋ ์ญํ ๊ณผ ํด๋น ์ญํ ์์ ์๋ฆผ์ ๋ฐ์ ๋ชจ๋ ํธ๋ค๋ฌ๊ฐ ์คํ๋ฉ๋๋ค. ํ์ post_tasks
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ํธ๋ค๋ฌ.
๋ฐ๋ผ์ ์์
์ ๋ค์์์ ๋๋๊ทธํ๋ฉด post_tasks
ะฒ pre_tasks
, ๊ทธ๋ฌ๋ฉด ์ ์ฌ์ ์ผ๋ก ํธ๋ค๋ฌ๊ฐ ์คํ๋๊ธฐ ์ ์ ์คํํ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ์ pre_tasks
์น ์๋ฒ๊ฐ ์ค์น ๋ฐ ๊ตฌ์ฑ๋์์ผ๋ฉฐ post_tasks
๋ฌด์ธ๊ฐ๊ฐ ์ ์ก๋ ๋ค์ ์ด ์์
์ ์น์
์ผ๋ก ์ ์กํฉ๋๋ค. pre_tasks
"์ ์ก" ์ ์๋ฒ๊ฐ ์์ง ์คํ๋์ง ์๊ณ ๋ชจ๋ ๊ฒ์ด ์ค๋จ๋๋ค๋ ์ฌ์ค๋ก ์ด์ด์ง๋๋ค.
์ด์ ๋ค์ ์๊ฐํด ๋ด
์๋ค. ์ ํ์ํ๊ฐ์? pre_tasks
ะธ post_tasks
? ์๋ฅผ ๋ค์ด, ์ญํ ์ ์ํํ๊ธฐ ์ ์ ํ์ํ ๋ชจ๋ ๊ฒ(ํธ๋ค๋ฌ ํฌํจ)์ ์๋ฃํ๊ธฐ ์ํด. ใ
post_tasks
์ญํ (ํธ๋ค๋ฌ ํฌํจ) ์คํ ๊ฒฐ๊ณผ๋ก ์์
ํ ์ ์์ต๋๋ค.
๊ธฐ๋ฏผํ Ansible ์ ๋ฌธ๊ฐ๊ฐ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ์๋ ค์ค ๊ฒ์
๋๋ค. meta: flush_handlers
, ๊ทธ๋ฌ๋ ์ฌ์ ์ค์ธ ์น์
์ ์คํ ์์์ ์์กดํ ์ ์๋ค๋ฉด ์ ํ๋ฌ์_handler๊ฐ ํ์ํ๊ฐ์? ๊ฒ๋ค๊ฐ, ๋ฉํ: ํ๋ฌ์_ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ณต ํธ๋ค๋ฌ๋ก ์ธํด ์์์น ๋ชปํ ์ผ์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉํ ๋ ์ด์ํ ๊ฒฝ๊ณ ๊ฐ ํ์๋ ์ ์์ต๋๋ค. when
ั block
๋ฑ. ์ค์๋ธ์ ๋ ์ ์์๋ก "๊น๋ค๋ก์ด" ์๋ฃจ์
์ ๋ํด ๋ ๋ง์ ๋์์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ /์ญํ /์ฌํ ๊ฐ์ ์์ฐ์ค๋ฌ์ด ๊ตฌ๋ถ์ ์ฌ์ฉํ๋ ๊ฐ๋จํ ์๋ฃจ์
์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ ๋ฐํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ 'foo'๋ก ๋์๊ฐ๋๋ค. ์ด๋์ ๋ฃ์ด์ผ ํ๋์? ์ฌ์ , ๊ฒ์๋ฌผ ๋๋ ์ญํ ์์? ๋ถ๋ช ํ ์ด๋ foo์ ๋ํ ํธ๋ค๋ฌ ๊ฒฐ๊ณผ๊ฐ ํ์ํ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๊ฑฐ๊ธฐ์ ์์ผ๋ฉด foo๋ฅผ pre๋ post์ ๋ฐฐ์นํ ํ์๊ฐ ์์ต๋๋ค. ์ด ์น์ ์ ์ฝ๋ ๋ณธ์ฒด ์๊ณผ ๋ค์ ์์ ์ ์คํํ๋ค๋ ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค.
์ด์ "์ญํ ๋๋ ์์ "์ด๋ผ๋ ์ง๋ฌธ์ ๋ํ ๋๋ต์ ์ด๋ฏธ ์งํ ์ค์ธ ์์ ์ผ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. ์์ ์ด ์์ผ๋ฉด ์์ ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ญํ ์ด ์๋ ๊ฒฝ์ฐ ์ญํ ์ ์์ฑํด์ผ ํฉ๋๋ค(ํ๋์ ์์ ์์๋). ์์ ๊ณผ ์ญํ ์ ๋์์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ์ ์ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
Ansible์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํ๋ฉด ๊ฒ๋ณด๊ธฐ์ ์ทจํฅ์ ๋ํ ์ง๋ฌธ์ ๋ํ ํฉ๋ฆฌ์ ์ธ ๋ต๋ณ์ ์ป์ ์ ์์ต๋๋ค.
์์ ๋ฐ ์ญํ (XNUMX๋ถ)
์ด์ ๋ง ํ๋ ์ด๋ถ์ ์์ฑํ๊ธฐ ์์ํ ๋์ ์ํฉ์ ๋ํด ๋ ผ์ํด ๋ณด๊ฒ ์ต๋๋ค. foo, bar, baz๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด ์ธ ๊ฐ์ง ์๋ฌด๋ ํ๋์ ์ญํ ์ ๋๊น, ์๋๋ฉด ์ธ ๊ฐ์ง ์ญํ ์ ๋๊น? ์ง๋ฌธ์ ์์ฝํ์๋ฉด, ์ด๋ ์์ ๋ถํฐ ์ญํ ์์ฑ์ ์์ํด์ผ ํฉ๋๊น? ํ์คํฌ๋ฅผ ์์ฑํ ์ ์๋๋ฐ ์ญํ ์์ฑ์ ์์ ์ ๋ฌด์์ ๋๊น?... ์ญํ ์ด๋ ๋ฌด์์ ๋๊น?
๊ฐ์ฅ ํฐ ์ค์ ์ค ํ๋(์ด์ ๋ํด์๋ ์ด๋ฏธ ์ด์ผ๊ธฐํ์ต๋๋ค)๋ ์ญํ ์ ํ๋ก๊ทธ๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์์ ๊ฐ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ํจ์ ์ค๋ช ์ ์ด๋ค ๋ชจ์ต์ธ๊ฐ์? ์ ๋ ฅ ์ธ์๋ฅผ ๋ฐ์๋ค์ด๊ณ , ๋ถ์์ฉ๊ณผ ์ํธ ์์ฉํ๊ณ , ๋ถ์์ฉ์ ์ํํ๊ณ , ๊ฐ์ ๋ฐํํฉ๋๋ค.
์, ์ฃผ๋ชฉํ์ธ์. ์ด ์ญํ ์์ ๋ฌด์์ ํ ์ ์์ต๋๊น? ๋ถ์์ฉ์ ํธ์ถํ๋ ๊ฒ์ ์ธ์ ๋ ์ง ํ์ํฉ๋๋ค. ์ด๊ฒ์ด ์ ์ฒด Ansible์ ๋ณธ์ง์
๋๋ค. ์ฆ, ๋ถ์์ฉ์ ์์ฑํ๋ ๊ฒ์
๋๋ค. ๋ถ์์ฉ์ด ์์ต๋๊น? ์ด๋ฑํ๊ต. ๊ทธ๋ฌ๋ "๊ฐ์ ์ ๋ฌํ๊ณ ๋ฐํํ๋" ๋ฐฉ๋ฒ์ ์๋ํ์ง ์์ต๋๋ค. ์ฒซ์งธ, ์ญํ ์ ๊ฐ์ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ญํ ์ vars ์น์
์์ ํ๋ ์ด์ ์๋ช
ํฌ๊ธฐ๋ฅผ ํฌํจํ ์ ์ญ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ์ญํ ๋ด์์ ์๋ช
์ด ๋คํ ์ ์ญ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ๋๋ ํ๋ ์ด๋ถ์ ์๋ช
์ด ๋คํ๋๋ผ๋(set_fact
/register
). ๊ทธ๋ฌ๋ "์ง์ญ ๋ณ์"๋ ๊ฐ์ง ์ ์์ต๋๋ค. "๊ฐ์ ๊ฐ์ ธ์ค๊ณ " "๋ฐํ"ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ค์ํ ์ ์ ๋ถ์์ฉ์ ์ผ์ผํค์ง ์๊ณ Ansible์์ ๋ฌด์ธ๊ฐ๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ ์ญ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ํญ์ ํจ์์ ๋ถ์์ฉ์
๋๋ค. ์๋ฅผ ๋ค์ด Rust์์ ์ ์ญ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. unsafe
. ๊ทธ๋ฆฌ๊ณ Ansible์์๋ ์ญํ ์ ๊ฐ์น์ ์ํฅ์ ๋ฏธ์น๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค. ์ฌ์ฉ๋ ๋จ์ด์ ์ฃผ๋ชฉํ์ธ์: "์ญํ ์ ๊ฐ์ ์ ๋ฌ"ํ๋ ๊ฒ์ด ์๋๋ผ "์ญํ ์ด ์ฌ์ฉํ๋ ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค". ์ญํ ๊ฐ์๋ ๋ถ๋ฆฌ๊ฐ ์์ต๋๋ค. ์์
๊ณผ ์ญํ ์ฌ์ด์๋ ๋ถ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ด๊ณ : ์ญํ ์ ๊ธฐ๋ฅ์ด ์๋๋ค.
์ญํ ์ ์ด๋ค ์ ์ด ์ข์๊ฐ์? ๋จผ์ , ์ญํ ์๋ ๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๋ค./default/main.yaml
), ๋์งธ, ์ญํ ์๋ ํ์ผ์ ์ ์ฅํ๊ธฐ ์ํ ์ถ๊ฐ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค.
๊ธฐ๋ณธ๊ฐ์ ์ด์ ์ ๋ฌด์์
๋๊น? Ansible์ ๋ค์ ์๊ณก๋ ๊ฐ๋ณ ์ฐ์ ์์ ํ
์ด๋ธ์ธ Maslow์ ํผ๋ผ๋ฏธ๋์์๋ ์ญํ ๊ธฐ๋ณธ๊ฐ์ด ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์(Ansible ๋ช
๋ น์ค ๋งค๊ฐ๋ณ์ ์ ์ธ)์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฆ, ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํด์ผ ํ๊ณ ๊ธฐ๋ณธ๊ฐ์ด ์ธ๋ฒคํ ๋ฆฌ ๋๋ ๊ทธ๋ฃน ๋ณ์์ ๊ฐ์ ์ฌ์ ์ํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ์ง ์์ผ๋ ค๋ฉด ์ญํ ๊ธฐ๋ณธ๊ฐ์ด ์ ์ผํ๊ฒ ์ ํฉํ ์์น์์ ์๋ฏธํฉ๋๋ค. (์กฐ๊ธ ๊ฑฐ์ง๋งํ๊ณ ์์ด์. ๋ ์์ด์ |d(your_default_here)
, ๊ทธ๋ฌ๋ ๊ณ ์ ๋ ์ฅ์์ ๋ํด ์ด์ผ๊ธฐํ๋ฉด ์ญํ ๊ธฐ๋ณธ๊ฐ๋ง ์ฌ์ฉ๋ฉ๋๋ค).
์ญํ ์ ๋ ๋ค๋ฅธ ์ฅ์ ์ ๋ฌด์์
๋๊น? ์๋ํ๋ฉด ๊ทธ๋ค์ ์์ ์ ์นดํ๋ก๊ทธ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ ์์(์: ์ญํ ์ ๋ํด ๊ณ์ฐ๋จ) ๋ฐ ๋์ (ํจํด ๋๋ ์ํฐํจํด์ด ์์) ๋ณ์์ ๋ํ ๋๋ ํ ๋ฆฌ์
๋๋ค. include_vars
ํจ๊ป {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml
.). ๋ค์์ ๋๋ ํ ๋ฆฌ์
๋๋ค. files/
, templates/
. ๋ํ, ์์ ๋ง์ ๋ชจ๋๊ณผ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ง ์ ์์ต๋๋ค(library/
). ๊ทธ๋ฌ๋ ํ๋ ์ด๋ถ์ ์์
(์ด ๋ชจ๋ ๊ฒ์ ํฌํจํ ์๋ ์์)๊ณผ ๋น๊ตํ ๋ ์ฌ๊ธฐ์ ์ ์ผํ ์ด์ ์ ํ์ผ์ด ํ๋์ ๋๋ฏธ์ ๋คํ๋์ง ์๊ณ ์ฌ๋ฌ ๊ฐ์ ๋ณ๋ ๋๋ฏธ์ ๋คํ๋๋ค๋ ๊ฒ์
๋๋ค.
ํ ๊ฐ์ง ๋ ์์ธํ ๋ด์ฉ์ ๊ฐค๋ญ์๋ฅผ ํตํด ์ฌ์ฌ์ฉํ ์ ์๋ ์ญํ ์ ์์ฑํด ๋ณผ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ปฌ๋ ์ ์ ์ถํ์ผ๋ก ์ญํ ๋ถ๋ฐฐ๋ ๊ฑฐ์ ์ํ์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ญํ ์๋ ๋ ๊ฐ์ง ์ค์ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ฆ, ๊ธฐ๋ณธ๊ฐ(๊ณ ์ ํ ๊ธฐ๋ฅ)์ด ์๊ณ ์ฝ๋๋ฅผ ๊ตฌ์กฐํํ ์ ์๊ฒ ํด์ค๋๋ค.
์๋ ์ง๋ฌธ์ผ๋ก ๋์๊ฐ์: ์ธ์ ์์ ์ ์ํํ๊ณ ์ธ์ ์ญํ ์ ์ํํฉ๋๊น? ํ๋ ์ด๋ถ์ ์์ ์ ์ญํ ์ /ํ์ "์ ์ฐฉ์ "๋ก ์ฌ์ฉ๋๊ฑฐ๋ ๋ ๋ฆฝ์ ์ธ ๊ตฌ์ฑ ์์๋ก ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค(๊ทธ๋ฌ๋ฉด ์ฝ๋์ ์ญํ ์ด ์์ด์ผ ํฉ๋๋ค). ์ญํ ๊ณผ ํผํฉ๋ ์ผ๋ฐ์ ์ธ ์์ ๋๋ฏธ๋ ๋ชจํธํ์ง ์์ ์์ฑํจ์ ๋๋ค. ์ ๋ฌด๋ ์ญํ ๋ฑ ํน์ ์คํ์ผ์ ๊ณ ์ํด์ผ ํฉ๋๋ค. ์ญํ ์ ์ํฐํฐ์ ๊ธฐ๋ณธ๊ฐ์ ๋ถ๋ฆฌํ๊ณ ์์ ์ ํตํด ์ฝ๋๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ฝ์ ์ ์๋๋ก ํด์ค๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ณด๋ค "์ ์ ์ธ"(์ค์ํ๊ณ ๋ณต์กํ) ์ฝ๋๊ฐ ์ญํ ์ ๋ฐฐ์น๋๊ณ ๋ณด์กฐ ์คํฌ๋ฆฝํธ๋ ์์ ์คํ์ผ๋ก ์์ฑ๋ฉ๋๋ค.
import_role์ ์์ ์ผ๋ก ์ํํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ์ด ๊ธ์ ์ด๋ค๋ฉด ์ ์ด ์ผ์ ํ๊ณ ์ถ์์ง ์์ ์ ๋ฏธ์์์ ์ค๋ช ํ ์ค๋น๋ฅผ ํ์ธ์.
๊ธฐ๋ฏผํ ๋
์๋ ์ญํ ์ด ์ญํ ์ ๊ฐ์ ธ์ฌ ์ ์๊ณ ์ญํ ์ด galaxy.yml์ ํตํด ์ข
์์ฑ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๋์ฐํ๊ณ ๋์ฐํ ์ผ๋ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. include_role
โ ์ฐ๋ฆฌ๋ ์ฒด์กฐ๊ฐ ์๋ ๊ธฐ๋ณธ์ ์ธ Ansible์ ์ค๋ ฅ์ ํฅ์์ํค๊ณ ์์์ ์๊ธฐ์์ผ๋๋ฆฝ๋๋ค.
ํธ๋ค๋ฌ ๋ฐ ์์
๋ ๋ค๋ฅธ ๋ถ๋ช ํ ์ฌ์ค์ธ ํธ๋ค๋ฌ์ ๋ํด ๋ ผ์ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ ๊ฑฐ์ ์์ ์ ๋๋ค. ํธ๋ค๋ฌ์ ๋๋๊ทธ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๊ธฐ๋ณธ ์ฌํญ์ ๊ธฐ์ตํ๊ณ ์์ผ๋ฏ๋ก ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- hosts: group1
tasks:
- foo:
notify: handler1
handlers:
- name: handler1
bar:
์ญํ ์ ํธ๋ค๋ฌ๋ rolename/handlers/main.yaml์ ์์ต๋๋ค. ํธ๋ค๋ฌ๋ ๋ชจ๋ ํ๋ ์ด ์ฐธ๊ฐ์ ์ฌ์ด๋ฅผ ๋ค์ง๋๋ค. pre/post_tasks๋ ์ญํ ํธ๋ค๋ฌ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ ์ญํ ์ ํ๋ ์ด์์ ํธ๋ค๋ฌ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํธ๋ค๋ฌ์ ๋ํ "๊ต์ฐจ ์ญํ " ํธ์ถ์ ์ฌ์ํ ํธ๋ค๋ฌ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํต๋๋ค. (๋ชจ๋ฒ ์ฌ๋ก์ ๋ ๋ค๋ฅธ ์์๋ ํธ๋ค๋ฌ ์ด๋ฆ์ ๋ฐ๋ณตํ์ง ์๋ ๊ฒ์ ๋๋ค.)
์ฃผ์ ์ฐจ์ด์ ์ ์์
์ด ํญ์ (๋ฉฑ๋ฑ์ ์ผ๋ก) ์คํ๋๋ค๋ ์ ์
๋๋ค(๋ํ๊ธฐ/๋นผ๊ธฐ ํ๊ทธ ๋ฐ when
) ๋ฐ ํธ๋ค๋ฌ - ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ผ(๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง ์๋ฆผ์ด ์คํ๋จ) ์ด๊ฒ์ ๋ฌด์์ ์๋ฏธ ํ๋๊ฐ? ์๋ฅผ ๋ค์ด ๋ค์ ์์ํ ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ํธ๋ค๋ฌ๊ฐ ์๋ค๋ ์ฌ์ค์
๋๋ค. ์์ฑ ์์
์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋๋ฐ ํธ๋ค๋ฌ๋ฅผ ์คํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์๋ฅผ ๋ค์ด, ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ๋ณ๊ฒฝ๋์์ง๋ง ์คํ์ด ํธ๋ค๋ฌ์ ๋๋ฌํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋คํธ์ํฌ๊ฐ ์ผ์์ ์ผ๋ก ์ค๋จ๋์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋์์ง๋ง ์๋น์ค๊ฐ ๋ค์ ์์๋์ง ์์์ต๋๋ค. ๋ค์์ ์์ํ ๋ ๊ตฌ์ฑ์ ๋ ์ด์ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ์๋น์ค๋ ์ด์ ๋ฒ์ ์ ๊ตฌ์ฑ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
๊ตฌ์ฑ ์ํฉ์ ํด๊ฒฐ๋ ์ ์์ต๋๋ค(๋ณด๋ค ์ ํํ๊ฒ๋ ํ์ผ ํ๋๊ทธ ๋ฑ์ ์ฌ์ฉํ์ฌ ํน๋ณํ ์ฌ์์ ํ๋กํ ์ฝ์ ๋ง๋ค ์ ์์ง๋ง ์ด๋ ๋ ์ด์ ์ด๋ค ํํ๋ก๋ '๊ธฐ๋ณธ ์ค์๋ธ'์ด ์๋๋๋ค). ํ์ง๋ง ๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์ด์ผ๊ธฐ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์นํ๊ณ ๊ธฐ๋กํ์ต๋๋ค. .service
-file, ์ด์ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ํฉ๋๋ค daemon_reload
ะธ state=started
. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ํ ์์ฐ์ค๋ฌ์ด ์ฅ์๋ ํธ๋ค๋ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ํธ๋ค๋ฌ๊ฐ ์๋๋ผ ์์
๋ชฉ๋ก์ด๋ ์ญํ ์ ๋์ ์์
์ผ๋ก ๋ง๋ค๋ฉด ๋งค๋ฒ ๋ฉฑ๋ฑ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ํ๋ ์ด๋ถ์ด ์ค๊ฐ์ ๊นจ์ก๋๋ผ๋ ๋ง์ด์ฃ . ์ด๊ฒ์ ๋ค์ ์์๋ ๋ฌธ์ ๋ฅผ ์ ํ ํด๊ฒฐํ์ง ๋ชปํ์ง๋ง(๋ฉฑ๋ฑ์ฑ์ด ์์ค๋์๊ธฐ ๋๋ฌธ์ ๋ค์ ์์ ์์ฑ์ผ๋ก ์์
์ ์ํํ ์ ์์ต๋๋ค), ํ์คํ state=started๋ฅผ ์ํํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํ๋ ์ด๋ถ์ ์ ๋ฐ์ ์ธ ์์ ์ฑ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฐ๊ฒฐ ์์ ๋์ ์ํ๊ฐ ๊ฐ์ํฉ๋๋ค.
ํธ๋ค๋ฌ์ ๋ ๋ค๋ฅธ ๊ธ์ ์ ์ธ ํน์ฑ์ ์ถ๋ ฅ์ ๋ง์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ์์์ต๋๋ค. ์ถ๊ฐ๋ก ๊ฑด๋๋ฐ๊ฑฐ๋ ์ถ๋ ฅ์ ๋ฌธ์ ๊ฐ ์์์ผ๋ฏ๋ก ์ฝ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ด๋ ๋ถ์ ์ ์ธ ์์ฑ์ด๊ธฐ๋ ํฉ๋๋ค. ์ ํ์ ์ผ๋ก ์คํ๋๋ ์์ ์ ์ฒซ ๋ฒ์งธ ์คํ์์ ์คํ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ํธ๋ค๋ฌ๋ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง ์คํ๋ฉ๋๋ค. ์ผ๋ถ ์กฐ๊ฑด์์๋ ๋งค์ฐ ๋๋ฌผ๊ฒ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, XNUMX๋ ํ ๋ด ์์ ์ฒ์์ผ๋ก. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ์ด๋ฆ์ ์คํ๊ฐ ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ๊นจ์ง ๊ฒ์ ๋๋ค. ๋ ๋ฒ์งธ๋ก ์คํํ์ง ์์ผ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค.
์ด์ ๋ณ๋๋ก ๋ณ์์ ๊ฐ์ฉ์ฑ์ ๋ํด ์ด์ผ๊ธฐํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฃจํ๊ฐ ํฌํจ๋ ์์ ์ ์๋ฆฌ๋ฉด ๋ณ์์๋ ๋ฌด์์ด ํฌํจ๋๋์? ๋ถ์์ ์ผ๋ก ์ถ์ธกํ ์ ์์ง๋ง ํญ์ ์ฌ์ํ ๊ฒ์ ์๋๋๋ค. ํนํ ๋ณ์๊ฐ ๋ค๋ฅธ ์์น์์ ์ค๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
... ๋ฐ๋ผ์ ํธ๋ค๋ฌ๋ ๋ณด์ด๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ ์ฉํ๊ณ ํจ์ฌ ๋ ๋ฌธ์ ๊ฐ ๋ง์ต๋๋ค. ํธ๋ค๋ฌ ์์ด๋(์ฅ์ ์์ด) ์๋ฆ๋ต๊ฒ ์์ฑํ ์ ์๋ค๋ฉด ํธ๋ค๋ฌ ์์ด ์์ฑํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ์๋ฆ๋ต๊ฒ ํ๋ฆฌ์ง ์๋๋ค๋ฉด ๊ทธ๋ค๊ณผ ํจ๊ปํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
๋ถ์์ฑ ๋
์๋ ์ฐ๋ฆฌ๊ฐ ๋
ผ์ํ์ง ์์๋ค๋ ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ง์ ํฉ๋๋ค. listen
ํธ๋ค๋ฌ๋ ๋ค๋ฅธ ํธ๋ค๋ฌ์ ๋ํด ์๋ฆผ์ ํธ์ถํ ์ ์๊ณ , ํธ๋ค๋ฌ๋ import_tasks(with_items๋ก include_role์ ์ํํ ์ ์์)๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, Ansible์ ํธ๋ค๋ฌ ์์คํ
์ Turing-complete์ด๊ณ , include_role์ ํธ๋ค๋ฌ๋ ํ๋ ์ด์ ํธ๋ค๋ฌ์ ํฅ๋ฏธ๋ก์ด ๋ฐฉ์์ผ๋ก ๊ต์ฐจํฉ๋๋ค. ๋ฑ๋ฑ. .d. -์ด ๋ชจ๋ ๊ฒ์ด ๋ถ๋ช
ํ "๊ธฐ๋ณธ"์ด ์๋๋๋ค).
์ค์ ๋ก ๋ช
์ฌํด์ผ ํ ๊ธฐ๋ฅ์ธ ํน์ WTF๊ฐ ํ๋ ์์ง๋ง. ์์
์ด ๋ค์๊ณผ ๊ฐ์ด ์คํ๋๋ ๊ฒฝ์ฐ delegate_to
ํต์ง๊ฐ ์์ผ๋ฉด ํด๋น ํธ๋ค๋ฌ๊ฐ ์์ด ์คํ๋ฉ๋๋ค. delegate_to
, ์ฆ. ํ๋ ์ด๊ฐ ํ ๋น๋ ํธ์คํธ์์. (๋ฌผ๋ก ํธ๋ค๋ฌ๊ฐ delegate_to
๊ฐ์).
์ด์ ๋ณ๋๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ญํ ์ ๋ํด ๋ช ๋ง๋ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ์ปฌ๋ ์
์ด ๋ฑ์ฅํ๊ธฐ ์ ์๋ ๋ณดํธ์ ์ธ ์ญํ ์ ๋ง๋ค ์ ์๋ค๋ ์๊ฐ์ด ์์์ต๋๋ค. ansible-galaxy install
๊ทธ๋ฆฌ๊ณ ๊ฐ๋ค. ๋ชจ๋ ์ํฉ์์ ๋ชจ๋ ๋ณํ์ ๋ชจ๋ OS์์ ์๋ํฉ๋๋ค. ๊ทธ๋์ ์ ์๊ฐ์๋ ์๋ํ์ง ์์ต๋๋ค. ์ง๋์ด ์๋ ๋ชจ๋ ์ญํ include_vars
, 100500๊ฐ์ ์ผ์ด์ค๋ฅผ ์ง์ํ๋ ๊ฒ์ ์ฝ๋ ์ผ์ด์ค ๋ฒ๊ทธ์ ์ฌ์ฐ์ ์ฒํด ์์ต๋๋ค. ๋๊ท๋ชจ ํ
์คํธ๋ก ๋ค๋ฃฐ ์ ์์ง๋ง ๋ชจ๋ ํ
์คํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์
๋ ฅ ๊ฐ๊ณผ ์ ์ฒด ํจ์์ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ด ์๊ฑฐ๋ "๊ฐ๋ณ ์๋๋ฆฌ์ค๊ฐ ํฌํจ"๋์ด ์์ต๋๋ค. ๋ด ์๊ฒฌ์ ์ญํ ์ด ์ ํ(์ํ์ ๋ณต์ก์ฑ 1)์ด๋ฉด ํจ์ฌ ๋ ๋ซ๋ค๋ ๊ฒ์
๋๋ค.
์ ์ ์์ if(๋ช
์์ ๋๋ ์ ์ธ์ - ํ์) when
๋๋ ์์ include_vars
๋ณ์ ์ธํธ์ ๋ฐ๋ผ) ์ญํ ์ด ๋ ์ข์ต๋๋ค. ๋๋ก๋ ๊ฐ์ง๋ฅผ ๋ง๋ค์ด์ผ ํ ๋๋ ์์ง๋ง ๋ฐ๋ณตํด์ ๋งํ์ง๋ง ๊ฐ์ง๊ฐ ์ ์์๋ก ์ข์ต๋๋ค. ๊ทธ๋์ ์ํ๊ณ์์๋ ์ข์ ์ญํ ์ธ ๊ฒ ๊ฐ์์. (์๋ํด์!) when
๋ค์ฏ ๊ฐ์ง ๊ณผ์ ์ค '์์ ์' ์ญํ ๋ณด๋ค ๋ ์ ํธ๋ ์ ์์ต๋๋ค. ๊ฐค๋ญ์์์ ์ญํ ์ด ๋ ์ข์์ง๋ ์๊ฐ์ ๋ญ๊ฐ๋ฅผ ์ฐ๊ธฐ ์์ํ ๋๋ค. ์ํฉ์ด ๋ ์
ํ๋๋ ์๊ฐ์ ๋ฌด์์ธ๊ฐ๊ฐ ๊นจ์ง๋ ์๊ฐ, '์ํ์์ ์ญํ ' ๋๋ฌธ์ด๋ผ๋ ์์ฌ์ด ๋ค ๋๋ค. ์ด์ด๋ณด๋ฉด XNUMX๊ฐ์ ํฌํจ์ฌํญ, XNUMX๊ฐ์ ์์
์ํธ ๋ฐ ์คํ์ด ์์ต๋๋ค. when
'ov... ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์์๋ด์ผ ํฉ๋๋ค. 5๊ฐ์ ์์
๋์ ๊นจ๋จ๋ฆด ๊ฒ์ด ์๋ ์ ํ ๋ชฉ๋ก์
๋๋ค.
๋ค์ ๋ถ๋ถ์์
- ์ธ๋ฒคํ ๋ฆฌ, ๊ทธ๋ฃน ๋ณ์, Host_group_vars ํ๋ฌ๊ทธ์ธ, Hostvars์ ๋ํด ์กฐ๊ธ ์ค๋ช ํฉ๋๋ค. ๊ณ ๋ฅด๋์ฐ์ค ๋งค๋ญ์ ์คํ๊ฒํฐ๋ก ๋ฌถ๋ ๋ฐฉ๋ฒ. ๋ฒ์ ๋ฐ ์ฐ์ ์์ ๋ณ์, Ansible ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ. "๊ทธ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ด๋์ ์ ์ฅํ๋์?"
jinja: {{ jinja }}
โ nosql notype nosense ๋ถ๋๋ฌ์ด ํ๋ผ์คํฑ. ๊ทธ๊ฒ์ ์ด๋์๋ ์๊ณ , ์ฌ์ง์ด ๋น์ ์ด ๊ธฐ๋ํ์ง ์๋ ๊ณณ์๋ ์์ต๋๋ค. ์กฐ๊ธ!!unsafe
๊ทธ๋ฆฌ๊ณ ๋ง์๋ ์.
์ถ์ฒ : habr.com