18

我正在使用 Ansible,我只想运行一次任务。我只遵循一次关于如何配置和运行任务的文档

- name: apt update
  shell: apt-get update
  run_once: true

但是当我运行 Ansible 时,它​​总是运行这个任务。我怎样才能只运行一次我的任务。

4

1 回答 1

31

run_once 选项将在您的 Playbook/tasks 每次运行时运行,但只会在特定运行期间运行一次。所以每次你运行 play 时,它都会运行,但只在列表中的第一个主机上运行。如果您正在寻找一种只运行该命令一次的方法,则需要使用 created 参数。使用您的示例,这可以通过使用以下方法来实现 -

- name: apt update
  shell: apt-get update && touch /root/.aptupdated
  args:
    creates: /root/.aptupdated

在这种情况下,文件 /root/.aptupdated 被创建。该任务现在将检查它是否存在,如果存在,它将不会运行。

在相关说明中,如果您尝试运行的任务是 apt-get 更新,您可能需要使用本机 apt 模块。然后你可以做这样的事情 -

- name: apt update
  apt: update_cache=yes cache_valid_time=86400

现在这只会在缓存超过一天的情况下运行。

于 2014-10-16T16:38:10.303 回答