Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

backrefs in lineinfile action

Que tipo de alteraçao poderia ser feita no arquivo caso nao usemos o 'backrefs'? Alguém poderia dar um exemplo, por favor? Obrigado

3 respostas

Olá, estudante. Tudo bem?

A ação lineinfile do Ansible é usada para garantir que uma linha específica esteja presente em um arquivo. O parâmetro backrefs, quando definido como yes, permite o uso de referências de grupos de captura do regexp na linha de substituição. Isso é útil quando você deseja substituir apenas uma parte de uma linha com base em um padrão regex.

No exemplo que você mencionou, o uso de backrefs não é necessário porque a substituição desejada é direta e não depende de capturar partes específicas da linha original. Portanto, se não usarmos backrefs, o Ansible simplesmente substituirá qualquer linha que corresponda ao padrão regexp com a linha especificada em line.

Por exemplo, se tivermos uma linha como ALLOWED_HOSTS = [] e queremos mudá-la para ALLOWED_HOSTS = ["*"], podemos usar a configuração sem backrefs:

path: /home/ubuntu/tcc/setup/settings.py
regexp: 'ALLOWED_HOSTS'
line: 'ALLOWED_HOSTS = ["*"]'

Neste caso, o Ansible procurará por qualquer linha contendo ALLOWED_HOSTS e a substituirá pela linha ALLOWED_HOSTS = ["*"].

Espero ter ajudado e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Fala Renan,

Obrigado pela resposta!

Deixa eu ver se entendi. Se pegarmos o exemplo abaixo:

path: /home/ubuntu/tcc/setup/settings.py
regexp: 'ALLOWED_(HO)STS'
line: 'ALLOWED_HOSTS = ["\1"]'
backrefs: yes

Teremos o resultado: ALLOWED_HOSTS = ["HO"]

Correto?

solução!

Olá, Estudante.

Sim. Quando backrefs: yes é usado, a referência \1 se refere ao primeiro grupo de captura definido no regexp. No seu exemplo:


path: /home/ubuntu/tcc/setup/settings.py
regexp: 'ALLOWED_(HO)STS'
line: 'ALLOWED_HOSTS = ["\1"]'
backrefs: yes

O resultado será:


ALLOWED_HOSTS = ["HO"]

Caso não utilizássemos backrefs, a substituição aconteceria de forma literal, e o Ansible substituiria toda a linha correspondente ao regexp pelo valor em line, sem reconhecer o grupo de captura (HO).

Fico à disposição. Abraços e bons estudos.