Que tipo de alteraçao poderia ser feita no arquivo caso nao usemos o 'backrefs'? Alguém poderia dar um exemplo, por favor? Obrigado
Que tipo de alteraçao poderia ser feita no arquivo caso nao usemos o 'backrefs'? Alguém poderia dar um exemplo, por favor? Obrigado
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.
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?
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.