我正在编写一个 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 对象转储到标准输出。
将此脚本放入/etc/ansible/facts.d/custom_soft.fact并使其可执行。
然后您可以按如下方式使用这些事实:
- shell: install_custom_soft.sh
when: ansible_local.custom_soft.component_ver | int > 4
Run Code Online (Sandbox Code Playgroud)如果你的 ini 文件非常简单,即使没有脚本你也可以完成这项工作,只需创建一个像这样的链接:
ln -s /etc/custom_soft/config.ini /etc/ansible/facts.d/custom_soft.fact
Run Code Online (Sandbox Code Playgroud)
所有 config.ini 键都可以通过变量供 Ansible 使用ansible_local.custom_soft。
PS 尽管名称为“本地事实”,但这应该在远程计算机上完成。
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |