如何在一个完整的剧本中只运行一个任务?
有没有办法只在一个完整的剧本中运行一个任务?
例如,在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 
	
 您应该使用tags:如http://docs.ansible.com/playbooks_tags.html中所述; 
如果你有一个大的手册,可以运行一个特定的configuration部分,而不需要运行整个手册。
出于这个原因,剧本和任务都支持“tags:”属性。
例:
 tasks: - yum: name={{ item }} state=installed with_items: - httpd - memcached tags: - packages - template: src=templates/src.j2 dest=/etc/foo.conf tags: - configuration 
如果你想运行一个很长的剧本的“configuration”和“包”部分,你可以这样做:
 ansible-playbook example.yml --tags "configuration,packages" 
另一方面,如果你想运行一个没有特定任务的剧本,你可以这样做:
 ansible-playbook example.yml --skip-tags "notification" 
您也可以将标签应用于angular色:
 roles: - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] } 
你也可以标记基本的include语句:
 - include: foo.yml tags=web,foo 
这两个函数都具有标记include语句中的每个任务的function。
有一种方法,虽然不是很优雅:
-  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
 你熟悉处理程序吗? 我想这是你在找什么。 将hadoop_master.yml重新启动到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 
 我喜欢将angular色作为一个任务集合的能力,在我的手册中,我可以select运行哪个任务子集。 不幸的是,剧本只能载入它们,然后你必须使用cmdline上的--tags选项来select要运行的任务。 这个问题是所有的任务都会运行,除非你记得设置--tags或--skip-tags 。 
 但是,我已经设置了一些任务,只有在设置了var时才会触发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}