becool

20210804 (수) ansible 탬플릿, 역할 본문

ansible

20210804 (수) ansible 탬플릿, 역할

gusalstm 2021. 8. 4. 15:37
반응형

Jinja2 Template 

 - Python 기반의 template 모듈로 동적인 컨텐츠를 템플릿을 통해 생성할 수 있음

 

Jinja2 문법

  {{ 변수 or 표현식 }}

  {% 제어문 %}

  {# 주석(comment) #}

 

 

##### jinja2 탬플릿 예제 #####
파일명 : template_exercise1.yaml
템플릿 : exercise1.j2

출력 파일 형태
Date : 2021-08-04 xx:xx:xx
Title : Jinja2 Template test
Author : Hong gildong
--------
Hello Jinja2 Template
This host is ansible-node01 (xxx.xxx.xxx.xxx)
system user: ansible_user


[user@ansible-server 20210804]$ cat template_exercise1.yaml
---
- name: jinja2 template exam
  hosts: all
#  become:
  vars:
    remote_dir: /etc/ansible/facts.d/
    Author : Hong gildong

  tasks:
  - name:
    template:
      src: exercise1.j2
      dest: /tmp/jinja2_test.txt
      owner: ansible_user
      group: ansible_user
      mode: "0644"
  - name:
    command: cat /tmp/jinja2_test.txt
    register: jinja2
  - name:
    debug:
      msg: "{{ jinja2 }}"
[user@ansible-server 20210804]$ cat exercise1.j2
Date: {{ ansible_facts['date_time']['date'] }} {{ ansible_facts['date_time']['time'] }}
Title: Jinja2 Template test
Author : "{{ Author }}"
----------
Hello Jinja2 Template
This host is {{ ansible_facts['hostname'] }} {{ ansible_facts['enp0s8']['ipv4']['address'] }}
system user: {{ ansible_facts['env']['USER'] }}

[user@ansible-server 20210804]$ ansible all -m command -a "cat /tmp/jinja2_test.txt"
192.168.56.11 | CHANGED | rc=0 >>
Date: 2021-08-04 15:32:39
Title: Jinja2 Template test
Author : "Hong gildong"
----------
Hello Jinja2 Template
This host is ansible-node01 192.168.56.11
system user: ansible_user

 

728x90

 

역할 (Role)

 

Role 디렉터리 구조

├── defaults  → Role 의 변수 중 초기 값이 지정되야 하는 기본 변수
│   └── main.yaml
├── files       → Role에서 파일 배포 시 파일이 위치하는 경로
│   └── main.yaml
├── handlers → Role의 handler가 저장되는 경로
│   └── main.yaml
├── meta     → Role의 meta data가 저장되는 경로
│   └── main.yaml
├── tasks     → Role의 task가 위치하는 경로
│   └── main.yaml
├── templates → Role이 배포하는 template 이 위치하는 경로
│   └── main.yaml
└── vars     → Role의 변수가 저장되는 경로
    └── main.yaml

 

meta 디렉터리에는 종속성 (dependency)이 정의되게 됨

 

 

##### role 예제 #####
##### role과 task가 같은 playbook안에 있으면 role이 먼저 실행됨. #####

[user@ansible-server 20210804]$ cat roles/test_role/tasks/main.yaml
---
- name: test_role first task
  debug:
    msg: test_role first task

- name: request hostname
  command: cat /etc/hostname
  register: result_hostname
- name: print hostname
  debug:
    msg: "{{ result_hostname.stdout }}"

[user@ansible-server 20210804]$ cat 0804_test_role_playbook2.yaml
---
- name: "test_role playbook 2"
  hosts: all

  tasks:
  - name: Playbook Initial task
    debug:
      msg: Playbook Initial task
  - name: Playbook Second task
    command: date
    register: result_date
  - name: Playbook final task
    debug:
      msg: "{{ result_date.stdout }}"

  roles:
  - role: test_role

[user@ansible-server 20210804]$ ansible-playbook 0804_test_role_playbook2.yaml

PLAY [test_role playbook 2] ********************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [192.168.56.12]
ok: [192.168.56.13]
ok: [192.168.56.11]

TASK [test_role first task] ********************************************************************************************
ok: [192.168.56.11] => {
    "msg": "test_role first task"
}
ok: [192.168.56.12] => {
    "msg": "test_role first task"
}
ok: [192.168.56.13] => {
    "msg": "test_role first task"
}

TASK [test_role : request hostname] ************************************************************************************
changed: [192.168.56.13]
changed: [192.168.56.12]
changed: [192.168.56.11]

TASK [test_role : print hostname] **************************************************************************************
ok: [192.168.56.11] => {
    "msg": "ansible-node01"
}
ok: [192.168.56.12] => {
    "msg": "ansible-node02"
}
ok: [192.168.56.13] => {
    "msg": "ansible-node03"
}

TASK [Playbook Initial task] *******************************************************************************************
ok: [192.168.56.11] => {
    "msg": "Playbook Initial task"
}
ok: [192.168.56.12] => {
    "msg": "Playbook Initial task"
}
ok: [192.168.56.13] => {
    "msg": "Playbook Initial task"
}

TASK [Playbook Second task] ********************************************************************************************
changed: [192.168.56.11]
changed: [192.168.56.12]
changed: [192.168.56.13]

TASK [Playbook final task] *********************************************************************************************
ok: [192.168.56.11] => {
    "msg": "Wed Aug  4 17:58:26 KST 2021"
}
ok: [192.168.56.12] => {
    "msg": "Wed Aug  4 17:58:26 KST 2021"
}
ok: [192.168.56.13] => {
    "msg": "Wed Aug  4 17:58:26 KST 2021"
}

PLAY RECAP *************************************************************************************************************
192.168.56.11              : ok=7    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.56.12              : ok=7    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.56.13              : ok=7    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

 

first_role 생성

 

[first_role]

task

 - first task : firtst task 라고 출력

 - second task: file 모듈을 사용하여 /tmp/20210804_first_task/ 디렉터리 생성

 - third task: command 모듈을 사용하여 " cat /etc/hostname" 실행

   & 핸들러 hello_handler 호출

 

handler

 - hello_handler - run hello_handler 메시지 출력

 

##### 과제1 #####
first_role 생성
task
 - first task : firtst task 라고 출력
 - second task: file 모듈을 사용하여 /tmp/20210804_first_task/ 디렉터리 생성
 - third task: command 모듈을 사용하여 " cat /etc/hostname" 실행
   & 핸들러 hello_handler 호출

handler
 - hello_handler - run hello_handler 메시지 출력


[user@ansible-server 20210804]$ cat roles/first_role/tasks/main.yaml
---
- name: first task
  debug:
    msg: first task
- name: second task
  file:
    dest: /tmp/20210804_first_task/
    state: directory
    mode: "0644"
- name: third task
  command: cat /etc/hostname
  notify: hello_handler

[user@ansible-server 20210804]$ cat roles/first_role/handlers/main.yaml
---
- name: hello_handler
  debug:
    msg: run hello_handler
[user@ansible-server 20210804]$ cat 0804_test_role_playbook4.yaml
---
- name: role examination
  hosts: all

  roles:
  - role: first_role

[user@ansible-server 20210804]$ ansible-playbook 0804_test_role_playbook4.yaml

PLAY [role examination] ************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [192.168.56.12]
ok: [192.168.56.13]
ok: [192.168.56.11]

TASK [first_role : first task] *****************************************************************************************
ok: [192.168.56.11] => {
    "msg": "first task"
}
ok: [192.168.56.12] => {
    "msg": "first task"
}
ok: [192.168.56.13] => {
    "msg": "first task"

}

TASK [first_role : second task] ****************************************************************************************
changed: [192.168.56.11]
changed: [192.168.56.13]
changed: [192.168.56.12]

TASK [first_role : third task] *****************************************************************************************
changed: [192.168.56.11]
changed: [192.168.56.12]
changed: [192.168.56.13]

RUNNING HANDLER [first_role : hello_handler] ***************************************************************************
ok: [192.168.56.11] => {
    "msg": "run hello_handler"
}
ok: [192.168.56.12] => {
    "msg": "run hello_handler"
}
ok: [192.168.56.13] => {
    "msg": "run hello_handler"
}

PLAY RECAP *************************************************************************************************************
192.168.56.11              : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.56.12              : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.56.13              : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0


[user@ansible-server 20210804]$ ansible all -m command -a "ls -d /tmp/20210804_first_task"
192.168.56.12 | CHANGED | rc=0 >>
/tmp/20210804_first_task
192.168.56.13 | CHANGED | rc=0 >>
/tmp/20210804_first_task
192.168.56.11 | CHANGED | rc=0 >>
/tmp/20210804_first_task

 

 

 

 

 

 

728x90
Comments