[英]With Ansible what is the best way of remembering a command has executed successfully previously?
使用命令模塊 ,如果命令創建了文件,則可以檢查該文件是否存在。 如果這樣做,將阻止命令再次執行。
- command: touch ~/myfile
args:
creates: ~/myfile
但是,如果該命令未創建文件,則在重新運行時它將再次執行。
為了避免再次執行,我在更改時創建了一些隨機文件(通知),如下所示:
- command: dothisonceonly # this does not create a file
args:
creates: ~/somefile
notify: done
然后處理程序:
- name: done
command: touch ~/somefile
這種方法有效,但是有點難看。 任何人都可以放棄最佳實踐嗎? 也許設置一些事實? 也許是全新的方法?
理想情況下,使用Ansible,請檢查第一個命令已更改的狀態,而不是使用文件作為代理。 原因是檢查某事物的實際狀態會提供更好的不變性,因為每次通過都會對其進行測試。
如果有理由不使用該方法。 然后注冊命令的結果,並使用它而不是通知程序來觸發文件的創建。
- command: dothisonceonly # this does not create a file
creates: ~/somefile
register: result
- file:
path: ~/somefile
state: touch
when: result|succeeded
如果您想看看這里發生了什么,請添加:
- debug: var=result
注意通知者,它們在播放結束時運行。 這意味着,如果通知程序是由任務觸發的,但是隨后播放無法完成,則通知程序將不會運行。 相反,有Ansible選項可以使通知程序運行,即使未由任務觸發也是如此。
這是我基於@techraf的答案的實際實現
- command: echo 'phew'
register: itworks
notify: Done itworks
when: ansible_local.itworks | d(0) == 0
和處理程序:
- name: Done itworks
copy:
content: '{{ itworks }}'
dest: /etc/ansible/facts.d/itworks.fact
文件:
http://docs.ansible.com/ansible/playbooks_variables.html#local-facts-facts-d
謝謝@techraf,這很有效,並且可以保留事實。
編輯
在@techraf的注釋中應用了默認值邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.