【发布时间】:2018-12-27 04:10:48
【问题描述】:
我正在尝试使用 ansibles lineinfile 在我的 /etc/hosts 文件中添加一个条目。我希望逻辑是如果它找到条目127.0.0.1 mysite.local 然后什么也不做,否则将其插入127.0.1.1 行之后
127.0.0.1 localhost
127.0.1.1 mypc
127.0.0.1 mysite.local
我在部分工作后插入,但似乎实际的正则表达式搜索未能找到现有条目,因此我不断收到重复插入的 127.0.0.1 mysite.local
文档确实说;
当修改一行时,正则表达式通常应匹配该行的初始状态以及逐行替换后的状态,以确保幂等性。
但我不确定这如何适用于我的正则表达式。目前我的玩法是;
- name: Add the site to hosts
lineinfile:
path: /etc/hosts
# Escape special chars
regex: "^{{ domain|regex_escape() }}"
line: "127.0.0.1 {{ domain }}"
insertafter: '127\.0\.1\.1'
firstmatch: yes
become: yes
其中domain 是mysite.local。
我查看了this 的答案,但我很确定我不能使用backrefs,因为文档状态;
这个标志稍微改变了模块的操作; insertbefore 和 insertafter 将被忽略,如果正则表达式在文件中的任何位置都不匹配,则文件将保持不变。
我试过了;
regex: '127\.0\.0\.1\s+?{{ domain|regex_escape() }}'
也没有运气
【问题讨论】: