ansible忽略任务上的run_once配置

时间:2014-10-16 16:13:23

标签: task ansible ansible-playbook idempotent

我正在使用Ansible,我只想运行一次任务。我按照有关如何配置和run a task only once

的文档进行操作
- name: apt update
  shell: apt-get update
  run_once: true

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

1 个答案:

答案 0 :(得分:28)

run_once选项将在每次Playbook / tasks运行时运行,但仅在特定运行期间运行一次。因此,每次运行游戏时,它都会运行,但只能在列表中的第一个主机上运行。如果您正在寻找一种只运行该命令一次的方法,那么您需要使用creates参数。使用您的示例,可以使用以下命令实现 -

- 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

现在只有在缓存超过一天时才会运行。