Как запустить только одну задачу в ansible playbook?


есть ли способ выполнить только одну задачу в ansible playbook?

например,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
5 100

5 ответов:

вы должны использовать tags: как описано в http://docs.ansible.com/playbooks_tags.html


если у вас есть большой playbook может оказаться полезным, чтобы иметь возможность запускать определенную часть конфигурации без запуска всего playbook.

обе игры и задачи поддерживают атрибут "tags:" по этой причине.

пример:

tasks:

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

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

если вы хотите просто запустить "конфигурацию " и" пакеты " часть очень долго playbook, вы могли бы сделать это:

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

С другой стороны, если вы хотите запустить playbook без определенных задач, вы можете сделать это:

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

вы также можете применить теги к ролям:

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

и вы также можете пометить основные операторы include:

- include: foo.yml tags=web,foo

оба они имеют функцию пометки каждой отдельной задачи внутри инструкции include.

есть способ, хотя и не очень элегантно:

  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

Я хотел бы иметь возможность использовать роль в качестве набора задач, таких что, в моем playbook, я могу выбрать, какой подмножество задач для запуска. К сожалению, playbook может только загрузить их все, а затем вы должны использовать --tags опция на cmdline, чтобы выбрать, какие задачи для запуска. Проблема в том, что все задач будет работать, если вы не забудьте установить --tags или --skip-tags.

я поставил некоторые задачи, однако, с when: пункт, что будет только если переменная определена.

например

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

теперь эта задача не будет стрелять по умолчанию, но только если я поставил stuff=true

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

или в пьес:

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

вы знакомы с обработчики? Я думаю, что это то, что вы ищете. Переместите перезапуск из hadoop_master.yml до roles/hadoop_primary/handlers/main.yml:

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

а теперь вызовите use notify на 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

FWIW с Ansible 2.2 можно использовать include_role:

playbook 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"

и вызвать playbook с: ansible-playbook test.yml для:

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