Ansible - 在远程机器上重做一个任务

Ansible - Redoing a task in a remote machine

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

我有疑问。

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

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

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

Now, can I make it, so that Ansible knows the hosts have the first 3 files, and in the second time I run the playbook, it knows it, and therefore, it only copies the remaining files into the hosts?

您无需执行任何操作。使用 Ansible,您可以定义所需的状态。

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

幂等性,正如此功能所称,允许您多次 运行 相同的剧本,并且状态将始终与所需的保持一致。

这也意味着如果某些任务失败,根据定义"continue"将从失败的地方重新运行执行剧本。

有一小组 Ansible 模块清楚地标记为 "non-idempotent", 其中不提供此功能,但大多数都提供。

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

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