0

我是 ansible/ansible 塔的新手,我已经尝试了几天并尝试复制文件,将软件安装到其他机器以及其他事情。

我有个疑问。

假设我有 1 台控制机和 10 台主机。例如,我想将 5 个文件复制到每个主机中。

我运行我的剧本。我的 ansible 只能访问 3 个文件(例如 - 由于某些未知错误),因此它仅将 3 个文件复制到所有主机中。现在我看这个,在第一个工作完成后,我让所有文件都可用。我再次运行我的剧本,这一次它将所有 5 个文件复制到所有主机中。现在我可以做到吗,以便 Ansible 知道主机有前 3 个文件,并且在我第二次运行 playbook 时,它知道它,因此它只将剩余的文件复制到主机中?剩下的2个文件。

如果主机无法访问,同样的事情是第一次不可用。在第二个作业中,它应该只将所有文件复制到该主机中。剩下的主机有 3 个文件,它应该只复制剩余的文件。

4

1 回答 1

1

现在,我可以做到吗,以便 Ansible 知道主机具有前 3 个文件,并且在我第二次运行 playbook 时,它知道它,因此它只将剩余的文件复制到主机中?

您无需做任何事情。使用 Ansible,您可以定义所需的状态。

例如对于copy模块,您不会告诉 Ansible 复制文件。相反,您要求 Ansible 确保目标机器上的某个文件具有所需的内容。如果它已经这样做了,Ansible 不会执行任何操作。如果该文件不存在,或者目标上的文件具有不同的内容,Ansible 会复制该文件。

幂等性,因为这个特性被称为,允许你多次运行同一个剧本,并且状态将始终保持与期望的一致。

这也意味着,如果某些任务失败,重新运行 playbook 将根据定义从失败的地方“继续”。

有一小部分 Ansible 模块明确标记为“非幂等”,它们不提供此功能,但大多数都提供。

Ansible 不是万无一失的,可以编写非幂等的剧本,但这是程序员的权力和责任。

除此之外,Ansible 具有用于优化目的的“重试”机制。

于 2017-11-21T22:23:04.450 回答