[ 1. Jinja2 Template 활용법 기본]
{1. 기본적 filter 활용}
# default
imsi: "{{ imsi | default([]}}"
# length alist = [ a,b,c]
imsi: "{{ alist | length }}"
# map, select amap = { "key": value}
imsi: "{{ amap | map(attribute = 'key') | list}}"
{ 2. if, for 문}
# if 문
- name: debug
debug:
msg: >-
{% if a >= 90 %}
A
{% elif a >= 80 %}
B
{% else %}
C
{% endif %}
{3. 복잡한 기본 변수 hostvars, groups, inventory_hostname }
# ex
- name: debug
debug:
msg: >-
{% for ii in hostvars.keys() %}
{{ii}}
{% endfor % }
# groups와 hostvars 차이:
groups: 인벤토리 내에 있는 모든 그룹이 key값 그리고 value는 hostname
hostvars: 인벤토리 내의 모든 host의 기본적인 vars값 fact 변수
[2. handler와 when 조건문]
hander: notify에 handler의 name을 적으면 task가 changed 시 handler가 실행되는 형식.
listen: 중복 방지를 위해 notify에 handler의 listen을 적으면 여러개 중 하나의 notify에서 trigger 시 딱 한번 실행되는 구조
( handler를 묶을 때, 이름을 재사용할 때 유용)
when: ansible의 기본적인 조건문, 기본적으로 jinja2 문법을 따라가며, is defined, ==, in 등의 boolean 구조와
필터를 활용한 when: inventory_hostname | length >= 10 이런식으로도 활용 가능
[3. Loop문과 다중 Loop, loop control ]
loop: list 형태로 된 자료구조를 item이라는 변수를 통해서 task를 여러번 진행하는 형태
loop_control: loop를 더욱 세밀하게 다루는 구조,
- label: loop의 item을 debug할 때 쓰는 parameter
- index_var: loop가 돌때, 리스트의 index를 표현하는 구조.
dict2items : dictionary를 [{"key": [] , "value" :[]}] 형태의 dictionary 형태의 변수값으로 변형
"{{ imsi_dict | dict2items }}"
combine: 두 dictionary를 하나의 dictionary로 합쳐 반환하는 형태, 중복 시 뒤의 dict가 우선시 됨
with_nested: 이중 루프 구조 이중 리스트 를 값으로 받으며, item[0], item[1] 형태로 값을 받음
[4. copy와 template 모듈 과 그 외]
1. copy 모듈: local에서 원격으로 정적파일을 전송할때 쓰이는 모듈 반대는 fetch
2. template 모듈: local에서 원격으로 동적파일을 전송할때 쓰이는 모듈
파라미터
- src: local의 경로 (template의 경우에는 j2 확장자 필 기입)
- dest: host의 경로
- owner: 주인
- group: 그룹
- mode: '777' 등 실행 읽기 수정 권한 등 부여
3. check_mode: template 등 수정이 되는 파일일 시 변경 전 변경되는지 사전 파악 모드
4. changed_when : when: nginx_config is changed 등으로 수동적으로 결과로 변경했는지 확인 가능
5. validate: 복사 전 파일 문법 검사 기능
6. lineinfile, blockinfile: regex, mode에 따라 이미 있는 파일의 문장을 생성하거나 수정 또는, 파일이 없다면 새로 생성기능
'공부 > Ansible' 카테고리의 다른 글
25 04 17 공부 (0) | 2025.04.17 |
---|---|
25 04 10 ansible 학습 (0) | 2025.04.10 |
5. Ansible의 playbook 형식 (0) | 2025.03.31 |
4. Ansible의 기본 명령어 (0) | 2025.03.28 |
3. 에이전트리스 방식이란? (0) | 2025.03.27 |