task - ansible 忽略任务上的 run_once 配置

标签 task ansible ansible-playbook idempotent

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

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

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

最佳答案

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

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

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

在相关说明中,如果您尝试运行的任务是 apt-get 更新,您可能需要使用 native apt 模块。然后你可以做这样的事情 -
- name: apt update
  apt: update_cache=yes cache_valid_time=86400

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

关于task - ansible 忽略任务上的 run_once 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409164/

相关文章:

c++ - C++中是否有可等待的队列?

c# - 循环等待两件事?

project-management - 团队领导和成员可以使用哪些工具来管理任务(敏捷编程)

Ansible get_url 无法下载受基本身份验证保护的

Ansible 初学者 - 列表对象没有属性 'name'

Ansible playbook 在串行执行中的最后一个节点上跳过任务

Ansible ufw 模块错误 : Could not find a profile matching 'xxxxx'

如果未找到文件,则 Ansible include_vars 继续

android - 无法从其他任务运行gradle任务

ansible - 角色和任务可以存在于同一个剧本中吗?