我正在尝试使用Ansible修改配置文件中的URL值
$CONSOLE_URI = "http://172.18.18.103/controller/";
我正在使用lineinfile模块,但它不起作用,我试图用双反斜杠转义$,但它也没有用。
- lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line='$CONSOLE_URI=http://google.com';
答案 0 :(得分:3)
我认为你的正则表达式是正确的。我刚测试了这个,写入文件的行实际上有引号。这是/etc/log.conf
:
'$CONSOLE_URI=http://google.com';
如果这是你的意图,我不相信,你当然需要在正则表达式中添加引号。
不要问我为什么单引号有时会起作用,有时也不行。在这种情况下,您需要使用双引号作为行,而对于regexp,单引号可以使用...
- lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line="$CONSOLE_URI=http://google.com"
无论如何,我强烈建议使用YAML语法而不是key = value语法。我发现后者非常难以阅读,而Ansible则是关于可读性的。在正确的YAML语法中,您也可以几乎完全删除引号,如果您使用包含单引号和双引号的更复杂命令,则会有很多帮助,然后您必须再次转义。理想情况下(我认为)你的任务看起来像这样:
- lineinfile:
dest: /etc/log.conf
regexp: ^\$CONSOLE_URI
line: $CONSOLE_URI=http://google.com
在这种情况下,您只需要逃离$
一次。
使用Ansible 2.0.0.2进行测试。
PS:不确定您的行的;
,如果它应该在文件内部。