ansible忽略任务上的run_once配置

Rob*_*ert 17 task idempotent ansible ansible-playbook

我正在使用Ansible,我只想运行一次任务.我按照有关如何配置和运行任务一次的文档

- name: apt update
  shell: apt-get update
  run_once: true
Run Code Online (Sandbox Code Playgroud)

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

小智 29

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

- name: apt update
  shell: apt-get update && touch /root/.aptupdated
  args:
    creates: /root/.aptupdated
Run Code Online (Sandbox Code Playgroud)

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

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

- name: apt update
  apt: update_cache=yes cache_valid_time=86400
Run Code Online (Sandbox Code Playgroud)

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