Tags?
만약 플레이북이 너무 커진다면 플레이북 안에서 특정 플레이만 실행하고 나머지는 실행하지 않고 싶을 수 있다. 이때 이를 가능하게 해주는 것이 ansible tag이다. 이는 개별 task에 다르게 설정할 수 있고 여러 태스크에 동일한 tag를 설정할 수도 있다.
tasks:
- name:
ping:
tags:
- ping_hosts
기본적으로 위의 형식으로 적게된다.
예시를 위해 known_hosts를 등록하는 task와 ping task를 한 play에 적고 tag를 지정해주었다.
ansible-playbook [playbook file] --list-tags
위 코드는 플레이북에 작성된 태그를 리스트화 해준다.
또한 아래 명령어를 통해 해당 태그가 어떤 task에 할당되어 있는지도 확인할 수 있다.
ansible-playbook [playbook file] --tags "[tag1],[tag2]" --list-tasks
위와 같이 플레이북에 존재하는 tag들을 보여준다. 이렇게 tag로 분할된 task를 실행하는 방법은 -t 또는 —tags를 이용하면된다.
ansible-playbook -v [playbook file] -i [inventory file] -t tag
위와 같이 말이다. 아래의 사진을 보면 known_hosts로 지정된 task외에는 실행되지 않은 것을 볼 수 있다. tag가 없는 플레이북에서는 핑 모듈도 같이 실행됐을텐데 말이다.
하나 더,, 여러개의 태그를 지정하고 싶다면 아래의 코드 처럼 작성하면 된다.
ansible-playbook [playbook file] -i [inventory file] --tags "[task1],[task2]"
skip-tags
앞에서는 tag를 이용하여 특정 task만 실행했다면 tag를 이용하여 특정 task 이외의 task들이 실행되도록 지정할 수도 있다.
ansible-playbook [playbook file] -i [inventory file] --skip-tags [tag]
knwon_hosts 태그를 무시하도록 설정했는데 정상적으로 무시하고 ping 모듈만 실행한 모습을 볼 수 있다.
always or never
어떤 상황이 생기더라도 항상 무조건 실행되어야 하는 task들이 있다. 예를 들어 패키지를 설치하는 task라고 했을 때 패키지 설치 전 apt update가 무조건 필요하다. 이럴 때 다른 태그를 지정하더라도 always 태그가 지정된 task는 항상 실행되도록 설정할 수 있다.
플레이북 안에 하위 태스크로 apt update를 실행하는 task를 추가한다.
- name: generally apt updates
apt:
update_cache: yes
tags:
- always
이번엔 ping_hosts 태그만 실행되도록 명령어를 구성하여 실행했는데 always 태그가 작동하여 함께 실행되는 것을 확인할 수 있다. 물론 always 태그도 skip-tags를 이용하여 무시할 수 있다.
반면에 always가 항상 실행되도록 한다면 nerver는 태그를 지정하지 않는다면 절대 실행되지 않는 설정이다. 현재 플레이북에서 아래와 같이 known_hosts task와 apt update task를 never로 설정했다.
- hosts: all
connection: local
serial: 1
gather_facts: no
tasks:
- command: /usr/bin/ssh-keyscan -t ecdsa {{ ansible_host }}
register: keyscan
tags:
- known_hosts
- never
- lineinfile:
name=~/.ssh/known_hosts
create=yes
line={{ item }}
with_items:
- "{{ keyscan.stdout_lines }}"
tags:
- known_hosts
- never
- name: ping pong to know what is alive server
ping:
tags:
- ping_hosts
- name: generally apt updates
apt:
update_cache: yes
tags:
- update_hosts
- never
이론대로라면 실행 시 ping task만 실행되어야 한다.
일반 전역 실행 명령어로 실행했을 때 ping task 이외의 never로 설정된 모든 task가 실행되지 않은 것을 확인할 수 있다. 이 때 never로 설정된 task의 태그를 직접 지정해줬을 때 실행되는지 확인해보도록 하겠다.
정상적으로 실행되는 것을 확인할 수 있다.
'네트워크 > 네트워크 가상화, 자동화' 카테고리의 다른 글
Anycast Gateway (0) | 2024.04.29 |
---|---|
SPB(Shortest Path Bridging) (0) | 2024.04.14 |
Ansible facts (0) | 2023.09.13 |
Ansible known hosts 자동 등록 & 무시 방법 (0) | 2023.09.12 |
Ansible Overview(config, inventory, dynamic inventory, playbook) (0) | 2023.09.11 |