[英]What is the proper way to read an option in INI-file on remote node with Ansible?
我正在編寫一個安裝和更新某些特定企業軟件的Ansible角色。 我想將安裝的版本(如果已安裝)與我嘗試安裝的版本進行比較,原因有多種,但主要是為了能夠在實際執行安裝程序之前驗證安裝是否必要且允許。 安裝程序包和安裝都包含一個INI文件,其中包含組件版本作為選項( component_name=version
)。
Ansible從遠程節點上的某些INI文件中讀取某些選項的正確方法是什么? 據我所理解:
ini_file
-module用於修改目標文件,這不是我想要做的。 我可以在這看到兩種可能性:
fetch
-module從遠程節點獲取文件到控制器機器,然后使用ini查找。 command
或shell
-module,使用grep / sed / awk解析INI文件並注冊輸出。 第一種選擇似乎不必要地笨拙(盡管我確實意識到我可能會以錯誤的方式思考它)。 從另一個角度來看,第二個看起來有點笨拙(另一個INI文件解析方法),但我也可能在這里錯了。 現在我依靠后者,但我不禁想到必須有一種更簡單,更優雅的方式。
看起來像facts.d的用例。
編寫一個shell或Python腳本來檢查這些ini文件,並將所需字段作為JSON對象轉儲到stdout。
將此腳本放入/etc/ansible/facts.d/custom_soft.fact
並使其可執行。
然后您可以使用以下這些事實:
- shell: install_custom_soft.sh when: ansible_local.custom_soft.component_ver | int > 4
如果您的ini文件非常簡單,即使沒有腳本也可以完成工作,只需創建如下鏈接:
ln -s /etc/custom_soft/config.ini /etc/ansible/facts.d/custom_soft.fact
並且所有config.ini密鑰都可以通過ansible_local.custom_soft
變量用於Ansible。
PS盡管名稱為“本地事實”,但這應該在遠程機器上完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.