Ansible - tags 활용 > Ansible 자료실

본문 바로가기
사이트 내 전체검색

Ansible 자료실

운영 Ansible - tags 활용

페이지 정보

profile_image
작성자 AnsibleM
댓글 0건 조회 15,725회 작성일 21-01-28 16:30

본문

전체 플레이북을 실행하는 대신 특정 부분만 실행하는 것이 유용할 경우, Ansible tag를 활용하여 작업을 수행할 수 있습니다.

1. 개별 task에 tag 추가

개별 task에 하나 이상의 태그를 적용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tasks:
- name: Install the servers
  yum:
    name:
    - httpd
    - memcached
    state: present
  tags:
  - packages
  - webservers
 
- name: Configure the service
  template:
    src: templates/src.j2
    dest: /etc/foo.conf
  tags:
  - configuration
cs
> 두 개의 작업에 서로 다른 태그를 지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
---
# file: roles/common/tasks/main.yml
 
- name: Install ntp
  yum:
    name: ntp
    state: present
  tags: ntp
 
- name: Configure ntp
  template:
    src: ntp.conf.j2
    dest: /etc/ntp.conf
  notify:
  - restart ntpd
  tags: ntp
 
- name: Enable and run ntpd
  service:
    name: ntpd
    state: started
    enabled: yes
  tags: ntp
cs
>둘 이상의 개별 작업에 동일한 태그 적용

2. include task에 tag 추가

include_* 작업의 태그는 포함된 task 또는 role 내의 모든 작업이 아니라 include 자체에만 적용됩니다.

1
2
3
4
5
6
7
- hosts: webservers
  tasks:
    - name: Include the bar role
      include_role:
        name: bar
      tags:
        - foo
cs
> foo 태그는 bar 라는 이름의 role 내부 작업에는 적용되지 않음

* 이와 관련된 내용은 4번에서 자세히 다룰 예정 *

3. play 전체에 tag 추가

play 내의 모든 task가 동일한 tag를 가져야 하는 경우, play 전체에 tag 지정이 가능합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- hosts: all
  tags: ntp
  tasks:
  - name: Install ntp
    yum:
      name: ntp
      state: present
 
  - name: Configure ntp
    template:
      src: ntp.conf.j2
      dest: /etc/ntp.conf
    notify:
    - restart ntpd
 
  - name: Enable and run ntpd
    service:
      name: ntpd
      state: started
      enabled: yes
 
- hosts: fileservers
  tags: filesharing
  tasks:
  ...
cs


4. role 에 tag 추가

role 에 tag 를 추가하는 방법은 다음과 같습니다.

1) roles 내에 tag 지정
1
2
3
4
5
roles:
  - role: webserver
    vars:
      port: 5000
    tags: [ web, foo ]
cs


2) import_role 을 활용하여 tag 지정
1
2
3
4
5
6
7
8
9
10
11
12
- hosts: webservers
  tasks:
    - name: Import the foo role
      import_role:
        name: foo
      tags:
        - bar
        - baz
 
    - name: Import tasks from foo.yml
      import_tasks: foo.yml
      tags: [ web, foo ]
cs


3) role 내의 개별 task에 tag 지정
role 내에서 일부 task만 실행하거나 건너뛰어야 할 때 사용되는 유일한 방법입니다.
include_role 을 활용하여 해당 작업에 tag를 지정해야 합니다.
하지만 Ansible은 include_role, include_task 와 같은 동적 작업에서는 tag 상속이 불가능합니다.
즉, include를 통해 포함된 파일이나 role 내의 task가 아닌 '포함' 자체에만 tag가 적용됩니다.

이를 해결하기 위해 apply 키워드 또는 block 을 활용할 수 있습니다.

1
2
3
4
5
6
7
8
- name: Apply the db tag to the include and to all tasks in db.yaml
  include_tasks:
    file: db.yml
    # adds 'db' tag to tasks within db.yml
    apply:
      tags: db
  # adds 'db' tag to this 'include_tasks' itself
  tags: db
cs
> apply 키워드 활용

1
2
3
4
- block:
   - name: Include tasks from db.yml
     include_tasks: db.yml
  tags: db
cs
> block 활용

5. 특수 태그(Special Tags)

Ansible은 always와 never 라는 특수한 태그를 갖고 있습니다.

- always : 별도로 skip 명령을 실행하지 않는 한, 해당 태그로 지정된 작업을 무조건 수행.
- never : 별도로 tag 실행 명령을 실행하지 않는 한, 해당 태그로 지정된 작업을 무조건 skip.

1
2
3
4
5
6
7
8
9
10
11
12
tasks:
- name: Print a message
  ansible.builtin.debug:
    msg: "Always runs"
  tags:
  - always
 
- name: Print a message
  ansible.builtin.debug:
    msg: "runs when you use tag1"
  tags:
  - tag1
cs
> always 태그 활용

1
2
3
4
5
tasks:
  - name: Run the rarely-used debug task
    debug:
     msg: '{{ showmevar }}'
    tags: [ never, debug ]
cs
> never 태그 활용

6. tag 실행 관련 command

--tags all : 모든 작업 실행, tag 무시 (default)
--tags [tag1,tag2] : 해당 tag가 있는 작업만 실행
--skip-tags [tag3,tag4] : 해당 tag가 있는 작업을 제외한 모든 작업을 실행
--tags tagged : 하나 이상의 tag가 있는 작업만 실행
--tags untagged : tag가 없는 작업만 실행

1
ansible-playbook example.yml --tags "configuration,packages"
cs
> configuration, packages 태그 작업만 실행

1
ansible-playbook example.yml --skip-tags "packages"
cs
> packages 태그가 지정된 작업을 제외한 모든 작업 실행

7. tag 사용 결과 미리보기

role이나 playbook 을 실행할 때, 어떤 task에 어떤 tag가 있는지 모르거나 기억하지 못할 수 있습니다.
이러한 상황에 tag 사용 결과를 미리 확인 할 수 있는 command가 있습니다.

--list-tags : 사용 가능한 tag 목록 생성
--list-tasks : --tags / --skip-tags 명령 실행 시 수행될 task를 미리 확인 가능

1
ansible-playbook example.yml --list-tags
cs
> 적용 가능한 모든 tag 확인 가능

1
ansible-playbook example.yml --tags "configuration,packages" --list-tasks
cs
> 실행하고자 하는 tag를 어떤 task가 가지고 있는지 불확실할 경우, 해당 tag가 포함된 task 나열 가능

* 주의 : 이러한 command는 동적으로 포함된 파일 또는 role 내의 tag나 task를 확인할 수 없습니다.

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : (주)리눅스데이타시스템
대표이사 : 정정모
본사 : 강남구 봉은사로 114길 40 홍선빌딩 2층
- tel : 02-6207-1160
대전지사 : 유성구 노은로174 도원프라자 5층
- tel : 042-331-1161

접속자집계

오늘
1,798
어제
1,766
최대
3,935
전체
1,090,266
Copyright © www.linuxdata.org All rights reserved.