ansible substitui regex por variável

1

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 .

Mesmo que

- replace:
    dest: /usr/src/freepbx/installlib/installcommand.class.php
    regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
    replace: ''

resulta perfeitamente em

$amp_conf['AMPDBHOST'] = 'localhost';

- replace:
    dest: /usr/src/freepbx/installlib/installcommand.class.php
    regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
    replace: '{{ asterisk_db_host }}'

bem como

- replace:
    dest: /usr/src/freepbx/installlib/installcommand.class.php
    regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
    replace: '{{ asterisk_db_host|regex_escape() }}'

substitua a string por O2.17.0.2'; ou O2\.17\.0\.2'; .

O que estou fazendo de errado aqui? Como posso fazer essa substituição corretamente?

    
por Zulakis 10.01.2017 / 18:25

2 respostas

3

Sua string de substituição é assim:

'{{ asterisk_db_host }}'

Após a modelagem de Jinja, isso é o que realmente é usado como a string de substituição no módulo regex:

'72.17.0.3'

Veja o primeiro termo. Não é mais , agora é 72 , o que é claramente errôneo. Uma maneira de resolver isso é fazer as aspas ao redor da parte do valor da sua substituição (porque, quando você fizer isso, haverá um caractere não digitável - a aspa - separando sua referência anterior do valor da expansão do modelo). Aqui está uma opção:

- hosts: localhost
  gather_facts: false
  vars:
    asterisk_db_host: "172.17.0.3"
  tasks:
    - replace:
        dest: ./cfgfile
        regexp: >-
          (\$amp_conf\[.AMPDBHOST.\] = )'localhost'(;)
        replace: >-
          '{{ asterisk_db_host }}'

Isso usa as citações do bloco YAML ( >- ) para que não precisemos nos preocupar com as citações de escape em nossas expressões, e parece fazer a coisa certa em meus testes simples.

    
por 10.01.2017 / 18:47
0

Outra solução seria usar grupos nomeados:

  replace:
    dest: /usr/src/freepbx/installlib/installcommand.class.php
    regexp: '(?P<firstpart>\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
    replace: '\g<firstpart>{{ asterisk_db_host }}'

Inspirado pelo link

    
por 11.01.2017 / 13:40

Tags