【问题标题】:Ansible - Redoing a task in a remote machineAnsible - 在远程机器上重做任务
【发布时间】:2017-11-21 19:28:01
【问题描述】:

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

我有疑问。

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

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

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

【问题讨论】:

  • 是的。我想知道如何做到这一点,以便在从控制主机复制文件时它不会覆盖任何内容。
  • 我已经检查过了,事情就是这样。将文件从控制机器复制到主机不会覆盖,除非在控制机器中更改了文件。但是如果我使用 get_url 它会覆盖所有内容......

标签: ansible ansible-tower


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 谢谢。我明白为什么我有这个问题。我正在将文件下载并取消归档到主机中(使用取消归档模块),然后我将一些文件从控制机器复制到主机中(使用复制模块)(全部在一个剧本中)。发生的事情是,每次我使用 unarchive 模块时,尽管每个文件都是相同的,但 ansible 正在覆盖主机中的文件。如果内容相同,我该怎么做才能不覆盖?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 2015-04-13
相关资源
最近更新 更多