簡體   English   中英

Ansible Lineinfile-使用反向引用時轉義單引號

[英]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'

到目前為止,我已經嘗試過:

  1. 使用雙引號-允許在密碼周圍使用單引號,但是將不再解析backref,而是將其打印為\\ 1。 嘗試轉義為\\\\ 1似乎沒有任何作用。
  2. 各種不同的轉義單引號的方式-反斜杠,對號。 大多數會產生語法錯誤或什么都不輸出。
  3. 將所有lineinfile參數括在雙引號中(並適當地轉義其中的所有內容)
  4. 我不能使用Ansible數據庫模塊
  5. 我不能使用模板,腳本會創建和填充許多表,並且可以在產品的版本之間進行更改-保持模板最新不會帶來太多開銷。

我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM