📜  ansible 总是在最后运行任务 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:39:15.150000             🧑  作者: Mango

Ansible 总是在最后运行任务 - Shell-Bash

Ansible 是一款自动化IT工具,它能够自动化部署、配置、管理IT环境。在使用 Ansible 时,你可能会遇到一个问题:Ansible 总是在最后运行任务。

什么是"Ansible 总是在最后运行任务"?

"Ansible 总是在最后运行任务"是指,当 Ansible 执行任务时,无论你指定的任务顺序是什么,Ansible 都会最后运行一个 Shell/Bash 任务。这个任务通常被称为 "Gathering Facts" 任务。它会收集有关目标远程主机的信息,并将其返回给 Ansible。

为什么 Ansible 总是在最后运行任务?

"Ansible 总是在最后运行任务"的原因是 Ansible 的执行模型。Ansible 采用模块化设计,每个任务都由一个模块来执行。当你运行一个任务时,Ansible 首先会加载要使用的模块,并将其传递给目标主机。在传递模块之前,Ansible 首先需要收集一些有关目标主机的信息,这就是 "Gathering Facts" 任务要做的事情。因此,这个任务总是运行在最后。

如何禁用 "Gathering Facts" 任务?

如果你不希望 Ansible 运行 "Gathering Facts" 任务,可以采取以下两种方法:

1. 使用命令行参数禁用

你可以在使用 ansible 命令时使用 -f 参数指定 0,来禁用 "Gathering Facts" 任务,例如:

ansible -i inventory.ini -m ping all -f 0

这个命令将不会运行 "Gathering Facts" 任务。

2. 在 playbook 中禁用

如果你想在 playbook 中禁用 "Gathering Facts" 任务,可以在 playbook 中设置 gather_facts 参数为 no,例如:

- name: Example playbook
  hosts: all
  gather_facts: no
  tasks:
    - name: Task 1
      debug:
        msg: "Hello World!"

这个 playbook 不会运行 "Gathering Facts" 任务。

结论

"Ansible 总是在最后运行任务"可以说是 Ansible 的一个特征,是由于其模块化执行模型所致。如果你想禁用 "Gathering Facts" 任务,可以使用命令行参数或在 playbook 中设置 gather_facts 参数为 no