Ubuntu

僅在發生更改時執行複制和設置

  • October 9, 2015

對於 Ansible,我的角色是設置時區並填充(Ubuntu)基本系統的設置,

- name: set timezone
 copy: content='Europe/Berlin'
       dest=/etc/timezone
       owner=root
       group=root
       mode=0644
       backup=yes

- name: update timezone
 command: dpkg-reconfigure --frontend noninteractive tzdata

這兩個命令無論如何都會執行。這意味著當 Ansible 為同一個目標執行兩次時,仍然會changed=2在結果摘要中得到一個,

default                    : ok=41   changed=2    unreachable=0    failed=0

理想情況下,一切都應該ok在第二次執行。

雖然我猜測update timezone應該對 有某種依賴set timezone,但我不太確定如何最好地實現這一點。

您可以使用registerand來做到這一點when changed

通過使用register命令的結果copy被保存到一個變數中。然後可以使用此變數在更新時區任務中創建when條件。

另外,請確保\n在時區內容的末尾添加換行符,否則 Ansible 將始終執行 copy

- name: set timezone
 copy: content='Europe/Berlin\n'
       dest=/etc/timezone
       owner=root
       group=root
       mode=0644
       backup=yes
 register: timezone

- name: update timezone
 command: dpkg-reconfigure --frontend noninteractive tzdata
 when: timezone.changed

handler但是您也可以通過為dpkg-reconfigure命令創建一個如下所述來解決此問題:

tasks:
 - name: Set timezone variables
   copy: content='Europe/Berlin\n'
         dest=/etc/timezone
         owner=root
         group=root
         mode=0644
         backup=yes
   notify:
     - update timezone
handlers:
- name: update timezone
  command: dpkg-reconfigure --frontend noninteractive tzdata

引用自:https://serverfault.com/questions/720598