2017년 11월 23일 목요일

[Ansible] Template의 용도는? (2/2)



아~ 아~ 저번에 Template이 아무래도 너무 부족한게 많았던거 같아요

그래서 본질적으로 돌아가서 cfg를 생성하는걸 할까? 하다가..
그건...아무래도 적절한 예시가 없어서 두개를 해 보려고 합니다.

이 예제를 통하면 Template의 사용법이 이제는 이해가 되실꺼에요

1) yml을 template으로 만들기

이상하게 들리시겠지만, template의 output은 어떤 것이라도 만들수 있어요.
물론...binary는...안된다는게 함정이지만 -_-
그래서 yml은 어떻게 보면 plain text이기 때문에 확장자를 지정해 주고 만들수 있답니다.

예시를 볼까요?

여기서 만들었던 동적으로 변수를 할당해 보아요~ 라는 yml파일을 template를 통해서 생성해 보겠습니다.

[ nginx_template.yml ]
1
2
3
4
5
6
7
8
---
- name: Create yml by template
  hosts: localhost

  tasks:
  - template:
      src: which_lnx.j2
      dest: /home/vagrant/template/which_lnx.yml

[ which_lnx.j2 ]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#Create by Template at {{ ansible_date_time.date }}
---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes
  vars:
    lnx_name: "{{ "{{'Ubuntu' if ansible_distribution == 'Ubuntu' else 'CentOS' if ansible_distribution == 'CentOS' else 'Just Linux'"}} }}"

  tasks:
  - name: nginx for Any Linux
    include_tasks: "{{ '{{ lnx_name }}' }}.yml"


어떻게 결과가 나올까요~?


해당 내용을 보면 이전 작성한 내용과 동일하게 작성되는 것을 볼 수 있습니다.


template을 이렇게도 쓸수 있구나~? 정도로 보시고 다음껄 볼까요?


2) 두번째는 hosts 파일을 생성
 - template을 통해서 /etc/hosts 파일을 생성해 주는 예제~ 예제입니다~!

[ hosts_template.yml ]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
---
- name: Create hosts file by template
  hosts: localhost
  become: yes

  vars:
    Node_Number: 8

  tasks:
  - template:
      src: hosts.j2
      dest: /etc/hosts

[ hosts.j2 ]
1
2
3
4
5
6
7
#Create by Template at {{  ansible_date_time.iso8601 }}

127.0.0.1 {{ ansible_hostname }}
192.168.1.10 ansible-server
{% for ip in range(Node_Number) %}
192.168.1.{{ip+101}} ansible-node0{{ip+1}}
{% endfor %}


길지 않은 줄로 어떤 결과가 나오는지 볼까요?


짜잔~~! for loop를 사용해서 해당 내용을 자동으로 생성해 준 것입니다.
template을 사용하면 장점이 짧은 줄로...결국 프로그래밍...이라고 생각해야 겠지만...여하튼 간단하게 여러가지의 내용들을 기입할 수가 있습니다. 그리구 중요한 것은 변수들이 Pre-defined 되어 있으니 그걸 이용하기도 좋죠 :)



여기서 끝일까요~?


로컬에 /etc/hosts에만 생성하면 무슨 의미가 있겠습니까~
전체 노드 (i.e. HPC나 web server farms이나..여러가지 목적으로~?) 배포를 해야 겠죠 
한줄만 수정합니다. 

host : nodes 로요~!
그러면 nodes에 해당 내용을 배포하고 적용해 버립니다 :) 

한번 볼까요~?



확인 확인~!!! 노드 01번에 접속해서 확인하니 잘 되네요 !!!



jinja2 template을 사용하면, 재사용성도 높이고, plain text 가공도 쉬워지고, 메인 코드를 줄일수 있고. 활용하기 나름이랍니다 :)


뿌잉뿌잉 :)  빠잉 입니다~!


0 개의 댓글:

댓글 쓰기

 
Copyright © . 엔지니어를 위한 파이썬 및 기술 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger