[英]Ansible Lineinfile - escaping single quote when using a back reference
我正在嘗試使用以下Ansible播放來更改許多SQL腳本的默認弱密碼:
- name: amend SQL User Passwords
sudo: yes
lineinfile: dest=/path/to/script/{{ item.file }} state=present backup=yes
regexp="CREATE USER (.*) PASSWORD 'password';$" line='CREATE USER \1 PASSWORD ''strongpassword'';' backrefs=yes
with_items:
- { file: create_db1_users_tables.sql }
- { file: create_db2_users_tables.sql }
- ...
- { file: create_dbNN_users_tables.sql }
盡管YAML規范建議這樣做,
在單引號內,可以通過使用兩個彼此相鄰的單引號來表示字符串中的單引號。
雙單引號不能用作轉義字符; 相反,它們已從輸出線中完全刪除:
CREATE USER user1 PASSWORD stR0ngP@55w0rD
代替
CREATE USER user1 PASSWORD 'stR0ngP@55w0rD'
到目前為止,我已經嘗試過:
我在ansible lineinfile中找到了一個類似的Ansible問題, Quotes ,但是解決方案沒有幫助。
有人還有其他建議嗎?
我並不是很樂於回答自己的帖子,而是花了更多的時間在互聯網上閑逛,因此我發現這篇帖子被建議使用replace模塊而不是lineinfile **。 表演:
- name: amend SQL User Passwords
sudo: yes
replace: dest=/path/to/script/{{ item.file }}
backup=yes
regexp="^CREATE USER (.*) PASSWORD 'password';$"
replace="CREATE USER \\1 PASSWORD 'strongpassword';"
with_items:
- { file: create_db1_users_tables.sql }
- { file: create_db2_users_tables.sql }
- ...
- { file: create_dbNN_users_tables.sql }
按預期工作,生成所需的SQL。
**這也加強了我應該花更多時間閱讀Ansible手冊的事實。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.