我要添加参数
-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 ='任何内容')
有什么想法吗?预先感谢
答案 0 :(得分:0)
此模式将获得OPTIONS =上引号之后的所有行。
说,如果要检查行是否正确,可以尝试使用另一个正则表达式,例如 /-log-opt max-size = / 测试从上面的匹配项得到的输出行。
答案 1 :(得分:0)
发现第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"