有没有办法在一个可行的剧本中只运行一个任务?
例如,“roles/hadoop_primary/tasks/hadoop_master.yml”。我有“启动hadoop作业跟踪服务”任务。我能只运行一个任务吗?
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
请看我的回答:只运行ansible playbook中的一个任务和处理程序
可以运行单独的role (from roles/ dir):
ansible -i stage.yml -m include_role -a name=create-os-user localhost
和单独的任务文件:
ansible -i stage.yml -m include_tasks -a file=tasks/create-os-user.yml localhost
如果将任务从role外部化到根tasks/目录(通过import_tasks: ../../tasks/create-os-user.yml实现重用),则可以独立于playbook/role运行它。
请看我的回答:只运行ansible playbook中的一个任务和处理程序
可以运行单独的role (from roles/ dir):
ansible -i stage.yml -m include_role -a name=create-os-user localhost
和单独的任务文件:
ansible -i stage.yml -m include_tasks -a file=tasks/create-os-user.yml localhost
如果将任务从role外部化到根tasks/目录(通过import_tasks: ../../tasks/create-os-user.yml实现重用),则可以独立于playbook/role运行它。
我希望能够将角色用作任务的集合,这样,在我的剧本中,我可以选择要运行哪个任务子集。不幸的是,playbook只能将它们全部加载进去,然后您必须使用cmdline上的——tags选项来选择要运行哪些任务。这样做的问题是,除非您记得设置——tags或——skip-tags,否则所有任务都将运行。
我已经设置了一些任务,然而,当:子句,只会触发如果一个变量被设置。
如。
# 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移动重启。到roles/hadoop_primary/handlers/main.yml:
- name: start hadoop jobtracker services
service: name=hadoop-0.20-mapreduce-jobtracker state=started
现在在hadoop_master.yml中调用use notify:
- 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