我試圖使用AnsibleAnsible正則表達式逃脫
$CONSOLE_URI = "http://172.18.18.103/controller/";
我使用lineinfile模塊修改配置文件中的URL值美元字符,但它不工作,我試圖逃跑$雙反斜線,但它也沒有奏效。
- lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line='$CONSOLE_URI=http://google.com';
regex
我試圖使用AnsibleAnsible正則表達式逃脫
$CONSOLE_URI = "http://172.18.18.103/controller/";
我使用lineinfile模塊修改配置文件中的URL值美元字符,但它不工作,我試圖逃跑$雙反斜線,但它也沒有奏效。
- lineinfile: dest=/etc/log.conf regexp='^\\$CONSOLE_URI' line='$CONSOLE_URI=http://google.com';
我認爲你的正則表達式是正確的。我只是測試了這一點,寫入文件的行實際上有引號。這是/etc/log.conf
內容:
'$CONSOLE_URI=http://google.com';
如果這是你的意圖,我不相信,你當然需要引號添加到正則表達式。
不要問我爲什麼單引號有時有效,有時不會。在這種情況下,你需要反正用雙引號線而正則表達式的單引號工作...
- 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:不知道你的線路的;
,如果這應該是在文件內或不。
我感謝您的幫助和解釋,它的工作! – Deano
你正在使用什麼Ansible版本? – udondan
我使用Ansible版本2.1.0 – Deano
所以devel直接從github分支,對不對? – udondan