사용 가능한 플레이 북에서 하나의 작업 만 실행하는 방법은 무엇입니까?


172

사용 가능한 플레이 북에서 하나의 작업 만 실행할 수있는 방법이 있습니까?

예를 들어에서 roles/hadoop_primary/tasks/hadoop_master.yml. 나는이 "start hadoop job tracker services"작업을. 하나의 작업을 실행할 수 있습니까?

hadoop_master.yml 파일 :

---
# Playbook for  Hadoop master servers

- name: Install the namenode and jobtracker packages
  apt: name={{item}} force=yes state=latest
  with_items: 
   - hadoop-0.20-mapreduce-jobtracker
   - hadoop-hdfs-namenode
   - hadoop-doc
   - hue-plugins

- name: start hadoop jobtracker services
  service: name=hadoop-0.20-mapreduce-jobtracker state=started
  tags:
   debug

답변:


248

http://docs.ansible.com/playbooks_tags.html에tags: 설명 된대로 사용해야합니다.


큰 플레이 북이있는 경우 전체 플레이 북을 실행하지 않고 구성의 특정 부분을 실행하는 것이 유용 할 수 있습니다.

이러한 이유로 놀이와 작업 모두 "tags :"속성을 지원합니다.

예:

tasks:

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

    - template: src=templates/src.j2 dest=/etc/foo.conf
      tags:
         - configuration

매우 긴 플레이 북의 "구성"및 "패키지"부분 만 실행하려면 다음과 같이하십시오.

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

반면에 특정 작업없이 플레이 북을 실행하려면 다음을 수행하십시오.

ansible-playbook example.yml --skip-tags "notification"

역할에 태그를 적용 할 수도 있습니다.

roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

또한 기본 include 문에 태그를 지정할 수도 있습니다.

- include: foo.yml tags=web,foo

이 두 가지 모두 include 문 내의 모든 단일 작업에 태그를 지정하는 기능이 있습니다.


이 답변을보십시오 : stackoverflow.com/a/52888274/2834918 . 여기에 허용 된 답변은 Google과 duckduckgo에서 맨 위에 나타나지만 2.7과 함께 도입 된 최신 인터페이스를 숨 깁니다.
bixel

84

매우 우아하지는 않지만 방법이 있습니다.

  1. ansible-playbook roles/hadoop_primary/tasks/hadoop_master.yml --step --start-at-task='start hadoop jobtracker services'
  2. 프롬프트가 나타납니다. Perform task: start hadoop jobtracker services (y/n/c)
  3. 대답 y
  4. 다음 프롬프트가 나타납니다. Ctrl-C

4
이것을 --checkand -vvv옵션 과 결합하는 것도 매우 유용합니다. 실제로 명령을 수행하지는 않지만 발생한 결과를 매우 상세하게 출력합니다.
lanoxx

10

Ansible 2.2가있는 FWIW는 include_role 을 사용할 수 있습니다 :

플레이 북 test.yml:

- name: test
  hosts:
    - 127.0.0.1
  connection: local
  tasks:
    - include_role:
        name: test
        tasks_from: other

그런 다음에 roles/test/tasks/other.yml:

- name: say something else
  shell: echo "I'm the other guy"

그리고 다음을 사용하여 플레이 북을 호출하십시오 ansible-playbook test.yml.

TASK [test : say something else] *************
changed: [127.0.0.1]

6

내 플레이 북에서 실행할 작업 하위 집합을 선택할 수 있도록 작업 모음으로 역할을 사용할 수있는 기능을 원합니다. 불행하게도, 플레이 북은 그것들을 모두로드 할 수 --tags있으며 cmdline 의 옵션 을 사용하여 실행할 작업을 선택해야합니다. 이 문제는 있다는 것입니다 모든 사용자가 설정을 기억하지 않는 한 작업이 실행됩니다 --tags--skip-tags.

그러나 when:var가 설정된 경우에만 실행 되는 절을 사용하여 일부 작업을 설정했습니다.

예 :

# role/stuff/tasks/main.yml
- name: do stuff
  when: stuff|default(false)

이제이 작업은 기본적으로 실행되지 않지만 설정 한 경우에만 stuff=true

$ ansible-playbook -e '{"stuff":true}'

또는 플레이 북에서 :

roles:
- {"role":"stuff", "stuff":true}

나는 단지 초보자 일 뿐이고, 당신이하는 말을 듣습니다 ... 그러나 왜 당신이 전체 플레이 북을 실행하는 데 반대 하는지를 탐구 할 것입니다. 적절한 Ansible 놀이는 일반적으로 dem 등성이며, 주 기준에 부합하면 사실을 수집하고 "아무것도하지 않습니다". 본인은 본인의 연극 대부분이 "이것이 상태인지 확인하고 필요한 경우 무언가를하는 것"이 ​​아니라 "무언가를"하는 것으로이 우려를 공유합니다. 전자는 한 번만 실행할 수 있으며 후자는 언제든지 실행할 수 있으며 무해합니다.
Scott Prive

나는 보통 디버그 작업에 이것을 사용합니다. 일반적으로 디버그 정보를 실행하고 싶지 않지만 때로는 수행합니다. 그러나 다른 응답을 살펴보면 지금 더 나은 방법이있을 수 있습니다.
ChePazzo

그렇습니다. 구체적으로, 현재 재생을 선택적으로 실행하는 한 가지 방법은 재생에 "태깅"하는 것입니다. 연극을 제한하는 다른 방법이있을 수도 있습니다. 나는 아직도 배우고 있습니다 ...
Scott Prive 1

4

핸들러에 익숙 하십니까? 나는 그것이 당신이 찾고있는 것이라고 생각합니다. 다시 시작을에서 hadoop_master.yml로 이동하십시오 roles/hadoop_primary/handlers/main.yml.

- name: start hadoop jobtracker services
  service: name=hadoop-0.20-mapreduce-jobtracker state=started

이제 다음 notify에서 use 를 호출하십시오 hadoop_master.yml.

- name: Install the namenode and jobtracker packages
  apt: name={{item}} force=yes state=latest
  with_items: 
   - hadoop-0.20-mapreduce-jobtracker
   - hadoop-hdfs-namenode
   - hadoop-doc
   - hue-plugins
  notify: start hadoop jobtracker services

3

태그를 사용하여 쉽게 수행 할 수 있습니다

태그의 예는 아래에 정의되어 있습니다.

---
hosts: localhost
tasks:
 - name: Creating s3Bucket
   s3_bucket:
        name: ansiblebucket1234567890
   tags: 
       - createbucket

 - name: Simple PUT operation
   aws_s3:
       bucket: ansiblebucket1234567890
       object: /my/desired/key.txt
       src: /etc/ansible/myfile.txt
       mode: put
   tags:
      - putfile

 - name: Create an empty bucket
   aws_s3:
       bucket: ansiblebucket12345678901234
       mode: create
       permission: private
   tags:
       - emptybucket

태그를 실행하기 위해 우리는 명령을 사용합니다

ansible-playbook creates3bucket.yml --tags "createbucket,putfile"

작동하지 않습니다-오류! 각본은 재생 목록이어야합니다, 대신에 <클래스 'ansible.parsing.yaml.objects.AnsibleMapping'> 도착
알렉산더 Skwar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.