티스토리 뷰
▶ .j2 로 하면 jinja2로 인식한다
▷ 템플릿은 playbook 으로 실행해야 하며
▷ template 모듈로 실행한다
▷ copy 모듈과 비슷하나 template 은 .j2를 해석이 가능하다
▷ 해석한 파일을 for_result.txt 로 저장하라
▶ for 구문
>> for.j2 파일로 생성
>>> 변수를 {{ }} 로 생성한다
{% for x in range(10) %}
{{x}}
{% endfor %}
>> for.yml 로 playbook 생성
- hosts: localhost
tasks:
- template:
src: ./for.j2
dest: /tmp/for_result.txt
register: jinja_result
- debug:
msg: "{{jinja_result}}"
>> 0부터 대입해서 변수 x를 10번 출력
[vagrant@control test]$ cat /tmp/for_result.txt
0
1
2
3
4
5
6
7
8
9
▶if 구문
>> 한글 쓸 수 있다
>> {% ~ %} 안에 있는변수는 이미 변수로 취급한다
>> 조건문 내부에서는 변수 이름만을 사용한다
>>> 넣으니까 오류남
{% if a == b %}
{{a}} 가 {{b}} 와 같다
{% elif a > b %}
{{a}}가 {{b}} 보다 크다
{% else %}
{{a}}가 {{b}} 보다 작다
{% endif %}
- hosts: localhost
vars:
a: 10
b: 20
tasks:
- template:
src: ./if.j2
dest: /tmp/if_result.txt
register: jinja_result
- debug:
msg: "{{jinja_result}}.stdout"
[vagrant@control test]$ cat /tmp/if_result.txt
10가 20 보다 작다
▶ 재확인
[vagrant@control test]$ cat users.j2
{% for user in users %}
{{user}}
{% endfor %}
[vagrant@control test]$ cat package.j2
{% if package %}
{{result}}
{% endif %}
>> playbook
- hosts: localhost
vars:
users: ["sunhee","younghee","chulsoo"]
package: httpd
result: installed
tasks:
- name: create users
template:
src: users.j2
dest: ./users.txt
- name: create package
template:
src: package.j2
dest: ./pkg.txt
>> 결과
[vagrant@control test]$ cat users.txt
sunhee
younghee
chulsoo
[vagrant@control test]$ cat pkg.txt
installed
## 추가로 핸들러 사용해봄
>> stdout 은 {{ }} 안에 넣어야 출력됨
>> 안 넣고 밖에 넣으면 다른게 나온다
>> 같은 notify name 으로 여러 모듈을 같이 돌리면 제대로 실행이 안된다
- hosts: localhost
vars:
users: ["sunhee","younghee","chulsoo"]
package: httpd
result: installed
tasks:
- name: create users
template:
src: users.j2
dest: ./users.txt
notify:
- us
- uscat
- name: create package
template:
src: package.j2
dest: ./pkg.txt
handlers:
- name: us
command: cat ./users.txt
register: uss
- name: uscat
debug:
msg: "{{uss.stdout}}"
◆ 활용
## /etc/motd 는 리눅스 실행시 나오는 글
>> copy 로는 해석하지 못한다 탬플릿 사용해야 한다
[vagrant@control work]$ cat host.yml
- hosts: all
tasks:
- name: info {{ansible_host}}
template:
src: ./src/nodeinfo.j2
dest: /etc/motd
[vagrant@control work]$ cat src/nodeinfo.j2
nodename: {{ansible_host}}
OS info : {{ansible_os_family}}
ip addr : {{ansible_all_ipv4_addresses}}
[vagrant@control work]$ ssh node1
Last login: Tue Feb 20 16:52:08 2024 from 192.168.110.10
nodename: node1
OS info : RedHat
ip addr : [u'10.0.2.15', u'192.168.110.20']
'Ansible' 카테고리의 다른 글
command 와 shell 의 차이 (0) | 2024.02.21 |
---|---|
Role (0) | 2024.02.20 |
Handlers 추가내용 (0) | 2024.02.20 |
fact 변수 활용 (0) | 2024.02.20 |
Ansible playbook 의 암호화 (0) | 2024.02.20 |