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