파일이 넘어갈때 상대에 맞춰서 바꿔주는 것
일반적인 파일 복사와는 다르게 관리 호스트의 시스템 환경에 맞춰 파일 배포 가능
jinja2
확장자 .j2를 주로 사용
jinja를 쓰는 이유는 파일 배포
[user@master ~]$ mkdir jinja-test
[user@master ~]$ cd jinja-test/
[user@master jinja-test]$ vim inventory
>> inventory 파일 안에 작성
192.168.56.101
[user@master jinja-test]$ vim ansible.cfg
>> ansible.cfg 파일 안에 작성
[defaults]
inventory = ./inventory
[user@master jinja-test]$ mkdir templates
[user@master jinja-test]$ vim templates/template.j2
>> template.j2 파일 안에 작성
Web package: {{ web_package }}
DB package: {{ db_package }}
[user@master jinja-test]$ mkdir vars
[user@master jinja-test]$ vim vars/vars.yml # 변수 파일 작성
>> vars.yml 파일 안에 작성
web_package: httpd
db_package: mariadb-server
[user@master jinja-test]$ vim playbook.yml # template 진자템플릿과 변수 파일 이용해서 작성!
>> playbook.yml 파일 안에 작성
---
- name: jinja2 test
hosts: 192.168.56.101
vars_files:
- vars/vars.yml
tasks:
- name: render jinja2 template
template:
src: templates/template.j2 # 위에서 vars_files로 가져온 변수 파일 안의 변수 내용 읽어와서 결합함
dest: rendered_template.txt # 경로를 명시하지 않았기 때문에 user의 홈디렉토리에 생길 것
[user@master jinja-test]$ ansible-playbook playbook.yml
PLAY [jinja2 test] *************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************
ok: [192.168.56.101]
TASK [render jinja2 template] **************************************************************************************************************
changed: [192.168.56.101]
PLAY RECAP *********************************************************************************************************************************
192.168.56.101 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[user@master jinja-test]$ vim playbook.yml
>> playbook.yml 파일 수정
Web package: {{ web_package }}
DB package: {{ db_package }}
ipv4 address: {{ ansible_facts['default_ipv4']['address'] }} # 변수 아니고 facts를 이용!
worker에 작성된 파일
[user@master ~]$ mkdir jinja-for
[user@master ~]$ cd jinja-for/
[user@master jinja-for]$ vim inventory
[user@master jinja-for]$ vim ansible.cfg
[user@master jinja-for]$ mkdir templates
[user@master jinja-for]$ vim templates/template.j2
>> template.j2 파일 안에 작성
{% for item in my_list %}
ITEM: {{ item }}
{% endfor %}
[user@master jinja-for]$ vim playbook.yml
>> playbook.yml 파일 안에 작성
---
- name: jinja2 test
hosts: 192.168.56.101
gather_facts: no
tasks:
- name: render jinja template with loop
template:
src: templates/template.j2
dest: render_template_loop.txt
vars:
my_list:
- item_1
- item_2
- item_3
[user@master ~]$ mkdir jinja-if
[user@master ~]$ cd jinja-if/
[user@master jinja-if]$ vim inventory
[user@master jinja-if]$ vim ansible.cfg
[user@master jinja-if]$ mkdir templates
[user@master jinja-if]$ vim templates/template.j2
>> template.j2 파일 안에 작성
{% if my_variable == "condition" %}
This is the true branch
{% else %}
This is the false branch
{% endif %}
[user@master jinja-if]$ vim playbook.yml
>> playbook.yml 파일 안에 작성
---
- name: jinja2 test
hosts: 192.168.56.101
gather_facts: no
tasks:
- name: render template with if
template:
src: templates/template.j2
dest: rendered_template_if.txt
vars:
my_variable: "condition"