Ansible 2.10 lineinfile模块regexp变量未解析致行删除失败
问题原因与解决办法
核心问题
你定义变量时,给list、gway、netw加了多余的前后空格(比如" {{ lookup(...) }} "这种写法),导致netw的实际值是" 172.16.25.1 "(前后带空格)。而lineinfile的regexp是严格匹配的,文件里的目标行没有这些空格,自然匹配不上,没法删除。
两种解决方式
方式一:去掉变量定义里的多余空格
直接把变量定义中的前后空格删掉,让变量值就是纯净的IP字符串:
- name: read network hosts: localhost vars: CUSTOMER: "{{ CUST | default('me') }}" list: "{{ lookup('file', 'networks').split('\n')[0] }}" gway: "{{ list.split(' ')[2] }}" netw: "{{ list.split(' ')[1] }}" tasks: - name: test1 lineinfile: path: 'networks' state: absent regexp: "{{ netw }}" - debug: var: gway - debug: var: netw
方式二:用trim过滤器清除空格
如果不想改变量定义,在引用netw时加上trim过滤器,自动去除前后空格:
- name: test1 lineinfile: path: 'networks' state: absent regexp: "{{ netw | trim }}"
这样就能让正则匹配到文件里的目标行,正常执行删除操作了。
内容的提问来源于stack exchange,提问作者ThomasE
相关产品推荐
相关产品推荐

