有没有办法在一个可行的剧本中只运行一个任务?

例如,“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运行它。

有一种方法,虽然不是很优雅:

ansible-playbook角色/ hadoop_primary /任务/ hadoop_master。Yml——step——start-at-task='启动hadoop jobtracker服务' 你会得到一个提示:Perform task: start hadoop jobtracker services (y/n/c) 回答y 您将看到下一个提示,按Ctrl-C

我希望能够将角色用作任务的集合,这样,在我的剧本中,我可以选择要运行哪个任务子集。不幸的是,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}

使用标签可以很容易地做到这一点

标签的例子定义如下:

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

你熟悉教练吗?我觉得这就是你想要的。从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