我正在编写一个安装和更新某些特定企业软件的Ansible角色。我想将安装的版本(如果已安装)与我尝试安装的版本进行比较,原因有多种,但主要是为了能够在实际执行安装程序之前验证安装是否必要且允许。安装程序包和安装都包含一个INI文件,其中包含组件版本作为选项(ini_file
)。
Ansible从远程节点上的某些INI文件读取某些选项的正确方法是什么?据我了解:
fetch
-module用于修改目标文件,这不是我想要做的。我可以在这里看到两种可能性:
command
-module从远程节点获取文件到控制器计算机,然后使用ini查找。shell
或CmdDemoCheck
-module,使用grep / sed / awk解析INI文件并注册输出。第一种选择似乎不必要地笨拙(尽管我确实意识到我可能会以错误的方式思考它)。从另一个角度来看,第二个看起来有点笨拙(另一个INI文件解析方法),但我也可能在这里错了。现在我依靠后者,但我不禁想到必须有一种更简单,更优雅的方式。
答案 0 :(得分:2)
似乎是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。
P.S。尽管名称“local facts”,但这应该在远程计算机上完成。