首页 > 解决方案 > Ansible import_task 并使用串行语法执行任务主机一一

问题描述

我有一个角色任务,我希望 ansible 为每个服务器一个一个地执行所有任务。我找到了油门指令,但它与 2.9.0 ansible 版本兼容,我有 2.8.6 ansible 版本。例如,对 host1 执行 name1、name2,然后对 host2 执行 name1、name2 ...

主要的.yml

- name: Configure
  import_tasks: "task_role.yml"
  tags:
    - task_role

任务角色.yml

---
- name: name1
  ---

- name: name2
  ---

库存文件

[serveur]
host1
host2
host3

问题是语法,我无法在 task_role.yml 上添加任务指令,所以我如何使用没有任务指令的串行指令。

标签: ansibletask

解决方案


您可以使用串行模块使其一次在一台服务器上运行

- name: test play
  hosts: webservers
  serial: 3
  gather_facts: False

  tasks:
    - name: first task
      command: hostname
    - name: second task
      command: hostname

在此示例中,您可以看到数字设置为 3,因此它将一次在 3 个服务器中运行 playbook。输出将如下所示:

PLAY [webservers] ****************************************

TASK [first task] ****************************************
changed: [web3]
changed: [web2]
changed: [web1]

TASK [second task] ***************************************
changed: [web1]
changed: [web2]
changed: [web3]

PLAY [webservers] ****************************************

TASK [first task] ****************************************
changed: [web4]
changed: [web5]
changed: [web6]

TASK [second task] ***************************************
changed: [web4]
changed: [web5]
changed: [web2]

PLAY RECAP ***********************************************
web1      : ok=2    changed=2    unreachable=0    failed=0
web2      : ok=2    changed=2    unreachable=0    failed=0
web3      : ok=2    changed=2    unreachable=0    failed=0
web4      : ok=2    changed=2    unreachable=0    failed=0
web5      : ok=2    changed=2    unreachable=0    failed=0
web6      : ok=2    changed=2    unreachable=0    failed=0

在您的情况下,我了解您希望将其设置为“1”,以便一次在一台服务器上运行。有关更多信息,您还可以查看此链接,该链接会将您重定向到我从中获取信息的官方 Ansible 页面。


推荐阅读