為什麼通過 Ansible 進行升級通常被認為是“冪等的”?
我知道冪等函式返回的結果可以多次返回而無需本質上更改應用程序(例如將零添加到數字或將該數字乘以 1)。
從這個意義上說,通過
some_package_manager upgrade X -y
Ansible 的state=latest
+ 一個 cron 計劃並不是冪等的,因為結果確實會從本質上改變應用程序;每個新升級都有新功能。那麼“Idempotent Ansible ad-hok 命令/劇本”的概念是在哪裡、為什麼以及何時出現的呢?
“冪等性”是配置管理系統的一種屬性,Ansible 只是其中一個例子。Puppet也將自己描述為冪等的;像 Ansible 一樣,說“準冪等”會更準確,因為它們都提供了打破嚴格冪等性的方法。
我認為您的問題部分是由於對冪等性的更正式含義的誤解,這是一種無論您應用多少次都會給出相同結果的操作。
儘管加零或乘以一都滿足冪等性的定義,但它們就是我們所說的平凡冪等。它們是無操作的,一般來說,冪等性不一定是無操作的。
一些範例可能有助於您了解冪等性的更一般直覺:
- 將一個數除以自身。
- 從自身中減去一個數字。
- 將 3D 對象展平到表面上:一旦展平,再展平它不會進一步改變其形狀。
- 燃燒原木:一旦完全燃燒,再施加更多火焰將不會進一步燃燒。
- 用勺子將咖啡溶解到熱水中:一旦咖啡溶解,進一步攪拌不會使其“更溶解”。
- 告訴狗“坐下”:第一次會有效果,但後續的命令坐下不會產生變化。
- 將配置文件從一台電腦複製到另一台電腦:第一次複製後,再次複製該文件不會進一步更改目標文件。
最後兩個範例最接近於配置管理系統上下文中的冪等性的含義。最簡單的是,它們是通過複製文件或發出命令將遠端機器置於所需狀態。一旦遙控器處於該狀態,它應該/不會復製文件或再次發出命令。
冪等性作為 Ansible 或 Puppet 等配置管理系統的理想屬性被推向市場的原因是,在管理大量伺服器時,如果盡可能多的伺服器彼此具有相同的配置,則最為方便。為了強制統一,您複製所需的配置文件,以相同的方式設置它們的防火牆,等等。但希望能夠重複執行此操作,因為在執行大型伺服器場時,您不想浪費時間計算哪些由於一些維護或升級而略有偏差。您只想能夠一次告訴所有伺服器:“採用首選配置”。
就像您要管理一屋子的狗,並且希望它們都坐下:其中一些已經坐著,而另一些則站著。發出“坐下”命令不會影響已經就座的人,但它會使整個房間進入所需的統一配置。