가능 : 태그가 지정된 경우에만 작업 실행 실행하는 데 사용할 수있는 태그를 사용할 수

작업 / 역할의 하위 집합 만 실행하는 데 사용할 수있는 태그를 사용할 수 있습니다. 이는 기본적으로 모든 작업이 실행되며 일부 작업이 실행되는 것을 막을 수 있음을 의미합니다.

“foo”태그가 지정된 경우 에만 작업 실행을 제한 할 수 있습니까 ? when작업 섹션 에서 현재 태그를 사용할 수 있습니까 ?



답변

Ansible 2.5에는 특수 태그 never와가 포함되어 always있습니다. never이 목적으로 태그 를 정확하게 사용할 수 있습니다. 예 :

tasks:
  - debug: msg='{{ showmevar}}'
    tags: [ 'never', 'debug' ]

이 예에서 작업은 debug(또는 never) 태그가 명시 적으로 요청 된 경우에만 실행됩니다 . [확실한 문서에 대한 참조]


답변

이것은 로터리 솔루션이지만 작동합니다.

작업 목록 안에 정상적인 실행이 실행될 때 변수를 등록합니다. 그런 다음 태그가 지정된 작업에 해당 변수를 확인하는 when 조건을 추가하십시오.

- shell: /bin/true
  register: normal_task_list

- name: Only run when tag is specified
  shell: /bin/echo "Only running because of specified tag"
  when: normal_task_list is not defined
  tags: specified


답변

커맨드 라인 변수 ( --extra-vars) 사용을 제안하는 답변에 대해 찬성하거나 의견을 제시 할만큼 평판이 좋지 않지만 추가해야 할 내용이 있습니다.

이 방법의주의 사항은 추가 변수를 정의하지 않으면 재생이 오류가 발생하고 실패한다는 것입니다.

--extra-vars플레이 북 자체에서 기본값을 정의 하여 정의가 없는 경우 재생 실패를 방지 할 수 있습니다 .

---
- hosts: ...
# ↓↓↓
  vars:
    thorough: false
# ↑↑↑
  tasks:
  - name: apt - install nfs-common only when thorough is true
    when: thorough | bool
    apt:
      cache_valid_time: 86400
      force: yes
      pkg:
        - nfs-common

--extra-vars명령 행에 정의 된 변수가 다른 모든 정의보다 우선하므로 via 를 대체 해도 여전히 작동합니다.

결과는 명령 행에서로 thorough변경되지 않은 경우 오류없이 재생이 실행됩니다 true.


답변

태그를 지정하지 않으면 달리 실행되는 실수로 실행되는 작업으로부터 보호하기 위해 조건 을 사용할 수 있습니다 . 이 방법의주의 사항은 추가 변수를 정의하지 않으면 재생이 오류가 발생하고 실패한다는 것입니다.

extra-vars 인수를 사용하면 조건부 실행을 트리거 할 수 있습니다.

플레이 북 –help :

 -e EXTRA_VARS, --extra-vars=EXTRA_VARS
    set additional variables as key=value or YAML/JSON

예:

ansible-playbook test.yaml -e "thorough=true"

test.yaml :

...
- name: apt - install nfs-common only when thorough is true
  apt:
    cache_valid_time: 86400
    force: yes
    pkg:
    - nfs-common
  when: thorough | default(False)
...


답변

Ansible 2.1.1.0에서는 ‘tags’변수 확인이 작동하지 않습니다. 테스트는 아래를 참조하십시오. Ansible 1.9.X 및 2.XY 모두에서 작동하는 태그가 정의 된 경우에만 작업을 실행하는 다른 아이디어가 있습니다.

- set_fact: foo=true
  tags: bar
- set_fact: foo=false
- name: do something when 'bar' tag is defined
  debug: var=foo
  when: foo
  tags: bar

이를 통해 태그없이 플레이 북을 실행할 때 ‘foo’변수는 true로 설정되고 false로 설정되므로 아무 것도 실행되지 않습니다. ‘bar’태그를 추가하면 첫 번째 설정 만 적용되므로 ‘foo’변수가 true가되면 작업이 실행됩니다. 즐겨!


Ansible 2.1.1.0의 ‘tags’변수에 대한 테스트는 다음과 같습니다.

플레이 북은 다음과 같습니다.

- hosts: localhost
  connection: local
  tasks:
    - name: display tags variable
      debug: var=tags
      tags: foo

    - name: do something only when tag 'foo' is provided
      debug: var=tag
      when: tags is defined
      tags: foo

그리고 출력은 다음과 같습니다.

$ ansible-playbook --version ; ansible-playbook ./test.yml -t foo
ansible-playbook 2.1.1.0
  config file = /home/nootal/projects/ivy/src/ansible/ansible.cfg
  configured module search path = Default w/o overrides

PLAY [localhost] ***************************************************************

TASK [display tags variable] ***************************************************
ok: [localhost] => {
    "tags": "VARIABLE IS NOT DEFINED!"
}

TASK [do something only when tag 'foo' is provided] ****************************

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0


답변

예. --tags foo플래그가 있는 재생 가능한 플레이 북을 실행하면 태그가 지정된 작업 만 foo실행됩니다. 예를 들어 example.yml이라는 플레이 북이 있다고 가정합니다.

tasks:

  - yum: name={{ item }} state=installed
    with_items:
       - httpd
       - memcached
    tags:
       - packages

  - name: some other task
    ..
    tags:
      - some other tag

달리는:

ansible-playbook example.yml --tags "packages"

yum 작업 만 실행되도록합니다.

따라서 실제로 섹션에서 조건부로 작업을 실행하기 위해 태그를 사용할 필요는 없습니다. 플레이 북 / 역할의 복잡성에 따라 –tags 및 –skip-tags 조합을 사용하여 실행할 작업을 제어해야 할 수도 있습니다. 예를 들어 포함 작업에 ‘foo’태그가 있고 포함 된 플레이 북 내의 일부 작업에 ‘bar’태그가 있고

ansible-playbook --tags "foo"

내부 작업 ( ‘bar’로만 태그 지정됨)이 실행됩니다. ‘bar’로 태그가 지정된 모든 내부 작업이 실행되지 않도록하려면 다음 명령을 실행해야합니다.

ansible-playbook --tags foo --skip-tags bar


답변

특별한 태그 “never” 가 있는데, 태그가 특별히 요청되지 않으면 작업이 실행되지 않습니다.

tasks:
  - debug: msg='{{ showmevar}}'
    tags: [ 'never', 'debug' ]