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