Linux
Ansible - 任務file.yml中鍵“run_once”的目的是什麼?
在一個任務文件中,其作用是在遠端伺服器上安裝 php
有人使用此模組(在專用於安裝的模組之後)更新全新安裝:
command: php update.php --quick run_once: yes delegate_to: "{{item}}" with_items: "{{servernetwork.nodes}}"
所以我不明白的是,afaik,Ansible 腳本化任務在解析時(當腳本啟動到遠端伺服器時)本機有 3 個結果:類似於
-好的(在該呼叫之前已經完成),
-改變(這是一個新要求,所以它剛剛完成),
或者我不記得第三個狀態。
但無論如何,因為基本上 Ansible 將僅執行目前伺服器狀態中缺少的配方步驟。文件和人們喜歡使用 << indempotent >> 這個詞來表示這種類似 delta 的行為。
那麼為什麼我們需要精確化
run_once
呢?我錯過了它的關鍵概念嗎?
run_once
通過文件如下:在某些情況下,可能只需要為一批主機執行**一次任務。**這可以通過配置
run_once
任務來實現。$$ Bolding is mine. $$
- command: /opt/application/upgrade_db.py run_once: true delegate_to: web01.example.org
它有廣泛的案例。
- 應用數據庫遷移。(在每台主機上應用遷移沒有任何意義。一個就足夠了)
- 創建數據庫備份。在一批主機上執行劇本,在其中一個上進行備份是很有價值的。
- 進行這種需要從特定主機執行的 API 呼叫。(做一次……)
- $$ … $$
它經常與
local_action
or一起使用delegate_to
。在這種情況下,您在一批主機上執行操作,但在locally
其他地方執行或完全執行它。冪等性是完全不直接相關的東西
run_once
根據定義,冪等性就是這樣一種運算
f(x)
,即如果f(x)=y
,那麼f(f(x))=y
。根據人類的理解,我們可以說在同一個參數上應用這個函式兩次,它不會改變結果。你可以把函式想像成一個角色,y
是你的程式碼的結果。