Módulo de Arquivo de Linhas com exemplos Regexp
Módulo de arquivo de linhas possível é usado para inserir novas linhas no final do arquivo ou em qualquer lugar no arquivo. Com um módulo de arquivo de linhas possível podemos remover as linhas existentes do arquivo e podemos substituir as linhas. Nos exemplos a seguir mostrarei como usar um módulo de arquivo de linhas com parâmetros diferentes como regexp para inserir novas linhas.
Craete new file e adicionar uma linha:
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible lineinfile mdoule. lineinfile: path: /project/devops/abc.txt line: decodingdevops talks about all the devops tools state: present create: yes
No módulo lineinfile podemos usar diferentes parâmetros, dependendo da nossa exigência. Aqui usei o parâmetro ‘path’, o parâmetro path diz ao ficheiro de lineinfile para qual ficheiro tem de modificar Então no parâmetro path devemos mencionar o caminho do ficheiro que vamos modificar. No parâmetro de linha temos de adicionar a linha que vai ser adicionada ao ficheiro. Para adicionar a linha ao arquivo, devemos mencionar o parâmetro de estado como presente. Criar parâmetro com sim, nós usamos para criar o ficheiro se o ficheiro não existir.
o que faz este playbook
criará um novo ficheiro e irá adicionar a linha ao ficheiro. Se você executar o playbook novamente nenhuma alteração acontecerá com esse arquivo, já que lineinfile irá adicionar a linha se a linha não existir. Se a linha já existir então não irá adicionar essa linha novamente.
se você remover o parâmetro create e se você executar o playbook. Você deve ter o arquivo existente no caminho definido, caso contrário ele irá através de erro como
fatal: : FAILED! => {“changed”: false, “msg”: “Destination /project/devops/abc.txt does not exist !”, “rc”: 257}
If The File is Already Existed:
se o ficheiro já existe então ele irá anexar ao fim do ficheiro.
Ansible Lineinfile With Regexp Example:
---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' line: 'hello devops' state: present backrefs: yes
Regexp é usado para modificar a linha em particular no arquivo. Aqui mencionamos no parâmetro regexp como ‘^devops’. isso significa que a linha iniciada com a docker tem que modificar com a linha ‘hello devops’ no arquivo. devemos mencionar backrefs como sim. Backrefs sim irá substituir a linha por ‘hello devops’ somente se ela for encontrar a linha regexp(^docker) no arquivo. Se não houver nenhuma linha iniciada com o docker não mudará nada no arquivo, o arquivo será deixado inalterado.
Por padrão o valor de backrefs é não, então se você não mencionou backrefs na tarefa ele assumirá como ‘backref: no’
O que irá acontecer se você não mencionou backrefs: ou
se você não mencionou backrefs como sim, e se não houver linha iniciada com a docker, ainda assim a linha será adicionada no final do arquivo. Se você rodar o playbook várias vezes, a linha será adicionada ao número de vezes. Para evitar este problema você deve mencionar backref como yes.
Adicionar uma linha depois/antes de uma linha em particular:
Se você quiser adicionar uma linha depois/antes de uma linha em particular, você pode usar o parâmetro Inserttafter/insertbefore em um módulo de arquivo de linha possível.
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
Aqui será adicionada a linha ‘hello devops’ depois da linha iniciada com a docker.
Se você quiser adicionar a linha antes de iniciar a linha, iniciada com a docker, você pode inserir antes.
Retirar uma linha usando Ansible regexp
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' state: absent
Aqui ele irá remover a linha iniciada com a docker. Para remover a linha usando regexp em ansible devemos usar o parâmetro de estado como ausente.
Nos exemplos acima discutimos sobre a linha iniciada com, já que mencionei o símbolo(^). Este símbolo representa a ‘linha começando com’, se você quiser saber mais opções diferentes você deve aprender python regexp.
https://docs.python.org/2/library/re.html
Leave a Reply