【问题标题】:Adding a parameter to a line with Ansible with lineinfile function and regexp使用带有 lineinfile 函数和正则表达式的 Ansible 将参数添加到行
【发布时间】:2018-10-30 08:00:56
【问题描述】:

我要添加参数

--log-opt max-size=5M

到文件中的现有行,首先要检查此参数是否已设置:

regexp: "^OPTIONS=(?!.*?(--log-opt max-size).*)"

我已经使用该测试字符串在 3 个不同的在线测试仪上进行了测试,它根据需要匹配:

OPTIONS='--log-opt max-size=5M --selinux-enabled --signature-verification=False'

这是完整的剧本:

  - name: "adding limiting parameter for container log-sizes"
    lineinfile:
      path: /etc/sysconfig/docker
      backrefs: true
      state: present
      regexp: "^OPTIONS=(?!.*?(--log-opt max-size).*)"
      line: "OPTIONS='--log-opt max-size=5M \\1'"

Ansible 出现异常中断,在 Ansible 2.6.5 和 2.7 上尝试过,猜想它是一个合成器而不是二进制问题。 努力了这么久:/

还希望在正则表达式中检查 OPTIONS= 之后的引号 (应该是 OPTIONS='任何内容')

有什么想法吗?提前致谢

【问题讨论】:

    标签: regex ansible


    【解决方案1】:

    (?<=')[^']+

    此模式将获取 OPTIONS= 引号后的所有行。

    • (?
    • [^']+ :匹配所有内容一次到无限次,除非找到'。

    说,如果你想检查是否行,你可以尝试另一个正则表达式,如 /--log-opt max-size=/ 测试从上面的匹配得到的输出行。

    【讨论】:

    • 已经尽力了,还没有让它运行那个正则表达式。有没有机会为 lineinfile 函数添加第二个正则表达式?
    【解决方案2】:

    发现,第 1 组不匹配,因此异常。 也许不是最聪明的方法,但解决了它并将正则表达式更新为:^OPTIONS='(?!.*?(--log-opt max-size))(.*) 也必须调整替换行:OPTIONS='--log-opt max-size=5M\\2。

    现在完成剧本部分:

    - name: "adding limiting parameter for container log-sizes" lineinfile: path: /etc/sysconfig/docker backrefs: true state: present regexp: "^OPTIONS='(?!.*?(--log-opt max-size))(.*)" line: "OPTIONS='--log-opt max-size=5M \\2"

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多