참고
Ansible - 태그
NOTE
Ansible의 태그는 플레이북에서 특정 작업을 그룹화하거나 필터링하여 실행할 수 있게 해줍니다. 태그를 사용하면 플레이북을 실행할 때 원하는 작업만 선택적으로 실행할 수 있습니다.
# 정의된 태그 나열
ansible-playbook playbook.yml --list-tags
# 태그 설정
ansible-playbook playbook.yml --tags "hello,host"
# 생략할 태그 설정
ansible-playbook playbook.yml --skip-tags "host"
Bash
복사
tag CLI
- name: 모든 호스트에 인사하기
hosts: servers
gather_facts: yes
become: no
tasks:
# hello 태그
- name: 인사 메시지 출력
shell:
cmd: echo "안녕하세요!"
tags:
- hello
# hello, host 태그
- name: 호스트 이름 출력
command:
cmd: hostname
tags:
- hello
- host
# hello, time 태그
- name: 현재 시간 출력
command:
cmd: date
tags:
- hello
- time
YAML
복사
Ansible tag 예제 1
- name: 모든 호스트에 인사하기
hosts: servers
gather_facts: yes
become: no
tasks:
# hello 태그
- name: 인사 메시지 출력
shell:
cmd: echo "안녕하세요!"
tags:
- hello
# hello, host 태그
- name: 호스트 이름 출력
command:
cmd: hostname
tags:
- hello
- host
# hello, time 태그
- name: 현재 시간 출력
command:
cmd: date
tags:
- hello
- time
YAML
복사
Ansible tag 예제 1
Ansible - import, incude
NOTE
Ansilbe에서 inclue와 import는 플레이북과 Role의 코드 재사용성을 높이고 구조를 개선하는데 사용되는 중요한 기능입니다.
import
import는 플레이북에 정적으로 삽입되며, 처음 구문분석할 때 읽어들인 파일이나 role 등을 최상위 플레이북에서 작업을 실행하기 전에 사전 처리한다.
- name: 주 플레이북
import_playbook: playbook-children.yaml
YAML
복사
import_playbook 예제
- name: import 플레이북
hosts: all
tasks:
- name: 첫 번째 태스크
debug:
msg: "이것은 첫 번째 태스크입니다."
- name: 두 번째 태스크
debug:
msg: "이것은 두 번째 태스크입니다."
YAML
복사
- name: 주 플레이북
hosts: servers
tasks:
- import_tasks: task.yaml
YAML
복사
import_tasks 예제
- name: 첫 번째 태스크
debug:
msg: "이것은 첫 번째 태스크입니다."
- name: 두 번째 태스크
debug:
msg: "이것은 두 번째 태스크입니다."
YAML
복사
- name: 주 플레이북
hosts: all
tasks:
- name: 역할 가져오기
import_role:
name: common
YAML
복사
import_rolet 예제
Include
include는 플레이북이 실행되는 동안 조건문에 따라 동적으로 파일을 포함할 수 있습니다.
import와 마찬가지로 include_role, include_task등이 있습니다.
import/incude 연습
NOTE
웹 서버, 방화벽, 웹 페이지를 생성하고 테스트하는 작업을 tasks import를 통해서 진행합니다.
/my_ansible_project
│
├── playbook.yml # 메인 마스터 플레이북 파일
├── tasks
│ ├── environment.yml # 패키지 설치 및 서비스 시작, enable 수행
│ ├── firewall.yml # 방화벽 소프트웨어 설치 및 구성
│ ├── placeholder.yml # 웹사이트 파일 생성
│ └── cleanup.yml # 제거 파일
└── test.yml # 웹사이트 연결 테스트
YAML
복사
파일구조
# 메인 마스터 플레이북 파일
---
- name: 웹 서버 구성
hosts: localhost
become: yes
tasks:
- name: 환경 설정 태스크 파일 가져오기 및 변수 설정
import_tasks: tasks/environment.yml
vars:
package: apache2
service: apache2
- name: 방화벽 설정 태스크 파일 가져오기 및 변수 설정
import_tasks: tasks/firewall.yml
vars:
firewall_pkg: firewalld
firewall_svc: firewalld
rule: http
- name: 플레이스홀더 파일 생성 태스크 파일 가져오기 및 변수 설정
import_tasks: tasks/placeholder.yml
vars:
file: /var/www/html/index.html
- name: 웹 서버 테스트 플레이북 가져오기 및 변수 설정
import_playbook: test.yml
vars:
url: 'http://localhost'
- name: 서비스 삭제 및 정리 태스크 가져오기
hosts: localhost
become: yes
tasks:
- name: 서비스 삭제 태스크 파일 가져오기 및 변수 설정
import_tasks: tasks/cleanup.yml
vars:
package: apache2
service: apache2
firewall_pkg: firewalld
firewall_svc: firewalld
YAML
복사
- name: "{{ package }} 패키지 설치"
package:
name: "{{ package }}"
state: latest
- name: "{{ service }} 서비스 시작 및 활성화"
systemd:
name: "{{ service }}"
enabled: true
state: started
YAML
복사
- name: 방화벽 소프트웨어 설치
package:
name: "{{ firewall_pkg }}"
state: latest
- name: 방화벽 서비스 시작 및 활성화
systemd:
name: "{{ firewall_svc }}"
enabled: true
state: started
- name: "{{ rule}} 포트 열기"
firewalld:
service: "{{ rule }}"
immediate: yes
permanent: yes
state: enabled
zone: public
YAML
복사
- name: 웹사이트 플레이스홀더 파일 생성
copy:
content: "{{ ansible_facts['fqdn'] }} has been customized using Ansible. \n"
dest: "{{ file }}"
YAML
복사
---
- name: "{{ service }} 서비스 중지 및 비활성화"
systemd:
name: "{{ service }}"
enabled: false
state: stopped
- name: "{{ package }} 패키지 삭제"
package:
name: "{{ package }}"
state: absent
- name: 방화벽 서비스 중지 및 비활성화
systemd:
name: "{{ firewall_svc }}"
enabled: false
state: stopped
- name: 방화벽 패키지 삭제
package:
name: "{{ firewall_pkg }}"
state: absent
YAML
복사
---
- name: 웹 서버 테스트
hosts: localhost
become: no
tasks:
- name: 인터넷 웹 서버 연결 테스트
uri:
url: "{{ url }}"
status_code: 200
YAML
복사