templates vs files and jinja2
ansible directory structure
ansible ํด๋์๋ ์ฌ๋ฌ๊ฐ์ง ํด๋๊ฐ ๊ฐ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ ์กด์ฌํฉ๋๋ค.
์ฌ๊ธฐ์๋ files์ templates ํด๋์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.

ํ์ผ์ด ๋ณ๊ฒฝ์ด ๋์ง ์์ ๊ฒฝ์ฐ (static) files ํด๋์ ํ์ผ์ ๋ฃ์ด๋๊ณ ์ฌ์ฉํฉ๋๋ค.
ํ์ผ์ด ๋ณ๊ฒฝ์ด ๋ ๊ฒฝ์ฐ (dynamic) templates ํด๋์ ํ์ผ์ ๋ฃ์ด๋๊ณ ์ฌ์ฉํฉ๋๋ค.
jinja template
๋ณ๊ฒฝ๋๋ ํ์ผ์ ๊ฒฝ์ฐ jinja template์ ์ฌ์ฉํฉ๋๋ค.
https://jinja.palletsprojects.com/en/3.1.x/
์ฌ๊ธฐ์ ํ์ธํ ์ ์์ต๋๋ค.
์ํ
์์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ์ผํฐ๋ง๋ค ntp์๋ฒ๊ฐ ๋ฌ๋ผ์ ์ค์ ์ด ๋ฌ๋ผ์ ธ์ผํฉ๋๋ค.
IDC_A datacenter
server 172.21.1.20
server 172.21.1.21IDC_B datacenter
server 172.21.1.20
server 172.21.1.21jinjaํ์ผ์ ๋ง๋ค์ด๋ด ๋๋ค.
cat << EOF > ./templates/ntp.conf.j2
{% if inventory_hostname.find('IDC_A') != -1 %}
server 172.21.1.20
server 172.21.1.21
{% elif inventory_hostname.find('IDC_B') != -1 %}
server 172.22.1.20
server 172.22.1.21
{% elif inventory_hostname.find('IDC_C') != -1 %}
server 172.23.1.20
server 172.23.1.21
{% elif inventory_hostname.find('IDC_D') != -1 %}
server 172.24.1.20
server 172.24.1.21
{% else %}
server 172.22.1.20
server 172.22.1.21
{% endif %}
EOFinventory_hostname: ์ธ๋ฒคํ ๋ฆฌ์ ์๋ ํ์ผ์ด๋ฆ์ idc์ด๋ฆ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.python find ํจ์๋ ์คํธ๋ง์ ํน์ ๋ฌธ์์ด์ด ์๋์ง ํ์ธํฉ๋๋ค. ์์ผ๋ฉด -1์ ๋ฆฌํดํฉ๋๋ค.
์ด์ ansible playbook์ ๋ง๋ค์ด ๋ด ๋๋ค.
- name: replace ntp.conf
template:
src: ./templates/ntp.conf.j2
dest: /etc/ntp.conf
tags:
- ntpd์คํ
ansible-playbook ntp.yaml --limit=mytest-IDC_B --tags=ntpd๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

Last updated
Was this helpful?