2014-10-16 92 views
16

上的run_once配置我正在使用Ansible,我只想运行一次任务。我按照有关如何配置文件和run a task only onceansible忽略任务

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

但是当我运行Ansible,它始终运行任务。我怎样才能只运行一次我的任务。

回答

27

run_once选项将在您每次运行Playbook /任务时运行,但在特定运行期间只运行一次。所以每次运行播放时,它都会运行,但只能在列表中的第一个主机上运行。如果您正在寻找一种只运行一次命令的方法,那么您需要使用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 

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

+1

是的 - 如果是'apt',则使用apt模块。 'shell'和'command'很好,但在使用时应该受到更多的限制。 – tedder42 2014-10-16 22:48:56