Search
Duplicate
📒

[Ansible] 03-2. 태그, import/include

상태
완료
수업
Ansible
주제
4 more properties
참고

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
복사