아~ 아~ 저번에 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 가공도 쉬워지고, 메인 코드를 줄일수 있고. 활용하기 나름이랍니다 :)
뿌잉뿌잉 :) 빠잉 입니다~!