如何在多个主机上运行单个角色任务(多个任务)?

时间:2019-12-20 21:11:37

标签: ansible ansible-2.x

我在一个角色/测试/任务中有一个main.YAML文件。即/roles/test/tasks/main.yaml。在main.yaml中,我定义了多个任务,并希望在多个主机上运行这些任务。说-前两个任务应该在hostA上运行,接下来的两个任务应该在hostB上运行,依此类推...我该怎么做..?

我尝试过为角色中的多个任务分配标签,然后在主剧本中调用它们:

- hosts: A
  tags:
    - master
  role:
    test

- hosts: B
  tags:
    - slave
  role: 
    test

但是在角色中定义的任务正在所有主机而不是指定主机上运行。

我正在跑步:ansible-playbook -i hosts mail.yaml

请帮助!!!

1 个答案:

答案 0 :(得分:0)

  

Q:“前两个任务应在主机A上运行,下两个任务应在主机B上运行,依此类推。”

A:在main.yml中有几个任务

$ cat roles/test/tasks/main.yaml
- debug:
    msg: Task1
  tags: t1
- debug:
    msg: Task2
  tags: t2
- debug:
    msg: Task3
  tags: t3
- debug:
    msg: Task4
  tags: t4

此剧本应运行“主机A上的前两个任务”

$ cat playbookA.yml
- hosts: A
  roles:
    - test

$ ansible-playbook playbookA.yml -t t1,t2

此剧本应运行“主机B上的下两个任务”

$ cat playbookB.yml
- hosts: B
  roles:
    - test

$ ansible-playbook playbookB.yml -t t3,t4

  

问:“我不想在运行剧本时使用标签标记。还有其他方法吗?”

A:不。“ ansible-playbook”没有其他方法。

   -t, --tags
      only run plays and tasks tagged with these values
  • 可以在 tags ini部分中设置环境变量 ANSIBLE_RUN_TAGS 或配置ini键 run 。参见TAGS_RUN。例如,以下命令将给出相同的结果
    $ ansible-playbook playbookB.yml -t t3,t4
    $ export ANSIBLE_RUN_TAGS='t3,t4'
    $ ansible-playbook playbookB.yml
  

-标记一个,两个--skip-标记三个-u ansible-成为