簡體   English   中英

Ansible 使用替換

[英]Ansible using the replace

我有這段代碼試圖替換字符串。

文件:

<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'some-server.domain.com';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'dovecot:SHA512';
$CONF['configured'] = true;
?>``

代碼:

    - name: Replace by setting db parms for PostFixAdmin Host
      replace:
        path: /etc/postfixadmin/config.local.php
        regexp: "$CONF['database_host'] = 'some-server.domain.com';"
        replace: "$CONF['database_host'] = '{{db_host}}';"
        backup: yes

    - name: Replace by setting db parms for PostFixAdmin User
      replace:
        path: /etc/postfixadmin/config.local.php
        regexp: "$CONF['database_user'] = 'postfix';"
        replace: "$CONF['database_user'] = '{{db_user}}';"
        backup: yes

我試過\ $ and。

- name: Replace by setting db parms for PostFixAdmin Host
  lineinfile:
    path: /etc/postfixadmin/config.local.php
    regexp: ^\\$CONFIG\\['database_host'\\] = .*$
    line: "$CONF['database_host'] = '{{db_host}}';"

不會替換它,像這樣在 php 之外添加第二個

?>
$CONF['database_host'] = 'localhost'; 

我該怎么做呢?

因為它是一個正則表達式,所以您必須轉義所有在正則表達式中有意義的字符,這就是

  • 表示字符串結尾的美元符號$
  • 以及作為分隔字符 class 的左方括號和右方括號[]

您的替換任務應該是:

- name: Replace by setting db parms for PostFixAdmin Host
  replace:
    path: /etc/postfixadmin/config.local.php
    regexp: "\\$CONF\\['database_host'\\] = 'some-server.domain.com';"
    replace: "$CONF['database_host'] = '{{db_host}}';"
    backup: yes

- name: Replace by setting db parms for PostFixAdmin User
  replace:
    path: /etc/postfixadmin/config.local.php
    regexp: "\\$CONF\\['database_user'\\] = 'postfix';"
    replace: "$CONF['database_user'] = '{{db_user}}';"
    backup: yes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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