templates vs files and jinja2

ansible directory structure

ansible ํด๋”์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํด๋”๊ฐ€ ๊ฐ๊ฐ์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” files์™€ templates ํด๋”์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํŒŒ์ผ์ด ๋ณ€๊ฒฝ์ด ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ (static) files ํด๋”์— ํŒŒ์ผ์„ ๋„ฃ์–ด๋‘๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  2. ํŒŒ์ผ์ด ๋ณ€๊ฒฝ์ด ๋  ๊ฒฝ์šฐ (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.21

IDC_B datacenter

server 172.21.1.20
server 172.21.1.21

jinjaํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค.

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 %}
EOF
  • inventory_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?