Как запустить только одну задачу в 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 ответов
вы должны использовать 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' ] }
и вы также можете пометить basic Include операторы:
- include: foo.yml tags=web,foo
оба они имеют функцию пометки каждой отдельной задачи внутри оператора include.
есть способ, хотя и не очень элегантно:
ansible-playbook roles/hadoop_primary/tasks/hadoop_master.yml --step --start-at-task='start hadoop jobtracker services'
- вы получите подсказку:
Perform task: start hadoop jobtracker services (y/n/c)
- ответ
y
- вы получите следующее приглашение, нажмите клавишу
Ctrl-C
Я хотел бы иметь возможность использовать роль как набор задач, таких, что в моем учебнике я могу выбрать, какое подмножество задач для запуска. К сожалению, 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
to 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]