Estou tentando substituir localhost
na string
$amp_conf['AMPDBHOST'] = 'localhost';
com o conteúdo da variável {{ asterisk_db_host }}
, que é 172.17.0.3
.
Apesar de
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1\2'
resulta perfeitamente em
$amp_conf['AMPDBHOST'] = 'localhost';
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1{{ asterisk_db_host }}\2'
assim como
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1{{ asterisk_db_host|regex_escape() }}\2'
substitua a string por O2.17.0.2';
ou O2\.17\.0\.2';
.
O que eu estou fazendo errado aqui? Como posso fazer corretamente essa substituição?
Sua string de substituição fica assim:
Após a modelagem de Jinja, isso é o que realmente é usado como a string de substituição no módulo regex:
Veja esse primeiro termo. Não é mais
\1
, é agora\1172
, o que é claramente errôneo. Uma maneira de resolver isso é colocar as aspas em torno da parte do valor de sua substituição (porque quando você fizer isso, haverá um caractere sem dígitos -- as aspas -- separando sua referência anterior do valor da expansão do modelo). Aqui está uma opção:Isso usa aspas de bloco YAML (
>-
) para que não precisemos nos preocupar em escapar de aspas em nossas expressões e parece fazer a coisa certa em meus testes simples.Outra solução seria usar grupos nomeados:
Inspirado em http://www.handverdrahtet.org/2016/01/ansible-using-numbered-backreference.html