티스토리 뷰

Ansible

Template ( 템플릿 )

looeon 2024. 2. 20. 17:04

▶ .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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함