Ansible Lineinfile Module Met Regexp Voorbeelden
Ansible lineinfile module wordt gebruikt om nieuwe regels in te voegen aan het einde van een bestand of ergens in een bestand. Met ansible lineinfile module kunnen we bestaande regels uit het bestand verwijderen en kunnen we de regels vervangen. In de volgende voorbeelden zal ik u laten zien hoe u ansible lineinfile module kunt gebruiken met verschillende parameters zoals regexpt om nieuwe regels in te voegen.
Craete nieuw bestand en voeg een regel toe:
# 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
In de lineinfile module kunnen we verschillende parameters gebruiken, afhankelijk van onze vereisten. Hier heb ik ‘path’ parameter gebruikt, path parameter verteld de lineinfile naar welk bestand het moet wijzigen Dus in de path parameter moeten we het pad vermelden van het bestand dat we gaan wijzigen. In de line parameter moeten we de regel toevoegen die we in het bestand gaan zetten. Om de regel aan het bestand toe te voegen, moeten we de parameter state als aanwezig opgeven. Creëer parameter met ja, we gebruiken om het bestand te creëren als het bestand nog niet bestaat.
wat doet dit playbook
het zal een nieuw bestand creëren en het zal de regel toevoegen aan het bestand. Als u het playbook opnieuw uitvoert, zullen er geen veranderingen in het bestand optreden, omdat lineinfile de regel zal toevoegen als de regel nog niet bestaat. Als de regel al bestaat, zal het die regel niet opnieuw toevoegen.
als u de create parameter verwijderd en als u het playbook uitvoert. U moet het bestand hebben bestaan in het gedefinieerde pad anders zal het door u fout als
fatal: : FAILED! => {“changed”: false, “msg”: “Bestemming /project/devops/abc.txt bestaat niet !”, “rc”: 257}
Als het bestand al bestaat:
als het bestand al bestaat dan zal het worden toegevoegd aan het einde van het bestand.
Ansible Lineinfile Met Regexp Voorbeeld:
---- 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 wordt gebruikt om een bepaalde regel in het bestand te wijzigen. Hier hebben we in de regexp parameter ‘^devops’ vermeld. dat betekent dat de regel die gestart is met docker gewijzigd moet worden met de regel ‘hello devops’ in het bestand. we moeten backrefs vermelden als ja. Backrefs yes zal de regel met ‘hello devops’ alleen vervangen als het de regexp regel(^docker) in het bestand vindt. Als er geen regel is gestart met docker zal het niets veranderen in het bestand, het bestand zal ongewijzigd blijven.
De standaard waarde voor backrefs is nee, dus als je geen backrefs in de opdracht hebt vermeld, zal het worden aangenomen als ‘backref: no’
Wat zal er gebeuren als je geen backrefs hebt vermeld: of
als je geen backrefs als ja hebt vermeld, en als er geen regel met docker is gestart, zal de regel toch aan het eind van het bestand worden toegevoegd. Als je het playbook meerdere keren uitvoert, zal de regel dat aantal keren worden toegevoegd. Om dit probleem te voorkomen moet je backref als ja vermelden.
Voeg een regel toe na/voor een bepaalde regel:
Als u een regel wilt toevoegen na/voor een bepaalde regel, kunt u gebruik maken van de insertafter/insertbefore parameter in de ansible lineinfile module.
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
Hier zal het de ‘hello devops’ regel toevoegen na de regel die gestart is met docker.
Als je de regel wilt toevoegen voor het begin van de regel, gestart met docker, kun je insertbefore.
Verwijder een regel met 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
Hier zal het de regel verwijderen die gestart is met docker. Om de regel te verwijderen met behulp van regexp in ansible moeten we de parameter state gebruiken als absent.
In alle bovenstaande voorbeelden hebben we het gehad over de regel die begint met, omdat ik het symbool (^) heb genoemd. Dit symbool vertegenwoordigt de ‘regel die begint met’, als je meer verschillende opties wilt kennen, moet je python regexp leren.
https://docs.python.org/2/library/re.html
Leave a Reply