ansible-如果文件具有不同的值,则更新它们,否则忽略

时间:2018-07-23 09:42:16

标签: bash ansible config app-config

好几个星期以来,我一直在努力使这种逻辑正确。.我试图做的是创建一个可播放的剧本,将我的应用程序安装在远程主机上……我可以正常工作了……

现在的问题是,与所有应用程序安装一样,这意味着我需要进行健全性检查并确保我的配置正确。

我正在努力的事情之一是,如果我有大量的文本(例如下面的文本,我需要确保其中的值正确

我将Ansible Replace和Lineinfile模块用于其他用途,但我认为将这些用于我试图解决的此问题是不正确的...是否有人在您的地方做过类似的事情?让剧本查看文件,并且只有当值不正确时才对其进行更新

        <Set name="env"><SystemProperty name="address" default="0.0.0.0"/></Set>
        <Set name="port"><SystemProperty name="https" default="6328" /></Set>
        <Set name="idle">3</Set>
        <Set name="soLingerTime"><Property name="http" default="-1568"/></Set>
        <Set name="acceptorDelta"><Property name="ssol" default="9524"/></Set>
        <Set name="PriorityDelta"><Property name="ssl34" default="9635"/></Set>
        <Set name="Size">15874</Set>

2 个答案:

答案 0 :(得分:1)

一种优雅的解决方案可能是只用{{变量}}替换值,然后让ansible用template模块写正确的值。如果文件遵循某种标准(示例看起来像XML?),可以使用xml模块吗?

否则,是的,我也想不出lineinfile / replace一个更好的主意。


编辑以添加xml示例:

我不是xpath专家,但是我想这样的事情(某种程度上)可以工作。

- hosts: localhost
  tasks:
  - name: Sanity Checks
    xml:
      path: file.xml
      xpath: /Set[@name='port']/SystemProperty[@name='https']
      attribute: default
      value: "1000"

答案 1 :(得分:0)

要实现我希望做的最好的事情,就是使用模板。...获取新文件,根据需要进行更新。...将它们保存在模板中并在其中移动。...