【问题标题】:What is the proper way to read an option in INI-file on remote node with Ansible?使用 Ansible 在远程节点上读取 INI 文件中的选项的正确方法是什么?
【发布时间】:2017-05-30 10:15:02
【问题描述】:

我正在编写一个安装和更新某些特定企业软件的 Ansible 角色。由于各种原因,我想将已安装的版本(如果已安装)与我尝试安装的版本进行比较,但主要是为了能够在实际执行安装程序之前验证安装是必要的和允许的。安装程序包和安装都包含一个 INI 文件,其中包含组件版本作为选项 (component_name=version)。

在 Ansible 中从远程节点上的某些 INI 文件中读取某些选项的正确方法是什么?据我了解:

  • ini_file -module 是用来修改目标文件的,这不是我想做的。
  • ini 查找适用于控制器上的文件,而不是远程节点上的文件。

我可以在这里看到两种可能性:

  1. 使用fetch -module 从远程节点获取文件到控制器机器,然后使用ini查找。
  2. 使用commandshell 模块,使用grep/sed/awk 解析INI 文件并注册输出。

第一个选项似乎不必要地笨拙(尽管我确实意识到我可能会以错误的方式思考它)。从另一个角度来看,第二个似乎有点笨拙(另一种 INI 文件解析方法),但我在这里也可能错了。现在我倾向于后者,但我不禁想到必须有一个更简单,更优雅的方式。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    似乎是facts.d 的用例。

    1. 编写一个 shell 或 Python 脚本来检查这些 ini 文件并将所需字段作为 JSON 对象转储到标准输出。

    2. 将此脚本放入/etc/ansible/facts.d/custom_soft.fact 并使其可执行。

    3. 那么你可以如下使用这些事实:

      - 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。

    附:尽管名称 “本地事实” 这应该在 远程机器上完成

    【讨论】:

    • 如果您可以编写 node.js 脚本,您可以使用“npm install parse-ini”并查看自述文件如何使用它。非常简单,node.js 原生吐出 json。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多