Hoe de Ansible lineinfile-module gebruiken om tekstbestanden te beheren

Ansible is een veelgebruikte automatiseringstool die honderden nodes in één keer kan beheren. Ansible heeft veel geweldige functies, en een ervan is het vermogen om een enkele regel in een bestand op afgelegen nodes te beheren met behulp van de Ansible lineinfile module.

De Ansible lineinfile module is een module die verschillende acties uitvoert op een enkele regel in een bestand, zoals het vervangen van een regel, het bijwerken van een regel, of het toevoegen van een bepaalde regel.

In deze tutorial ga je leren wat de Ansible lineinfile module is, hoe het werkt, en hoe je het kunt gebruiken om tekstbestanden te beheren.

Vereisten

Dit bericht zal een stap-voor-stap tutorial zijn over de Ansible lineinfile module. Als je mee wilt doen, zorg dan dat je het volgende hebt:

  • Een Ansible controller host – Voor deze tutorial gebruiken we Ansible v2.9.24 op een Ubuntu 18.04.5 LTS machine.
  • A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
  • Apache zou al geïnstalleerd moeten zijn op de afgelegen computer als je exact wilt meedoen met de tutorial.

Het wijzigen van een tekstbestand met de Ansible-lineinfile-module.

Laten we deze tutorial beginnen door de Ansible-lineinfile-module uit te voeren met behulp van de ad-hoc-commando’s. Ad-hoc-commando’s zijn een snelle manier om een enkel commando op een extern host uit te testen of uit te voeren.

Log in op uw Ansible-controller en voer het volgende commando uit. Dit commando gebruikt de lineinfile-module (-m) om verbinding te maken met de webmachine en geeft een argument door (-a) dat het uit te voeren commando is.

In dit geval werkt de lineinfile-module de localhost-regel bij door het IP-adres 127.0.0.1 te koppelen aan myapache in het/etc/hosts-bestand. Door 127.0.0.1 aan myapache te koppelen, kunt u lokaal naar de Apache-testpagina navigeren via HTTP://myapache:80

  • pad geeft de bestandslocatie aan.
  • regexp vindt de reguliere expressie, indien aanwezig, in het bestand en werkt deze bij met 127.0.0.1 myapache zoals gespecificeerd in de line-parameter.
  • –become-vlag stelt u in staat het commando uit te voeren als een bevoorrechte gebruiker.
  • De web is de inventarisgroep die een verzameling van alle servers is.
  • ansible.builtin.lineinfile of simpelweg lineinfile is de modulenaam.
ansible web -m ansible.builtin.lineinfile -a "path=/etc/hosts regexp='^127\.0\.0\.1'  line='127.0.0.1 myapache' state=present" --become

Na het uitvoeren van het commando zou u een GEWIJZIGD-bericht moeten zien dat bevestigt dat de regel succesvol is bijgewerkt op de externe host.

Running the ad hoc command with ansible lineinfile module

Meld u aan bij de externe node met behulp van een SSH-client en controleer of het bestand /etc/hosts is bijgewerkt met de nieuwe waarde met behulp van het cat commando.

Zoals u hieronder kunt zien, is de localhost-vermelding succesvol bijgewerkt met 127.0.0.1 myapache op de externe machine.

Verifying the host file on remote machine

Het wijzigen van meerdere tekstbestanden binnen een playbook

Het werken met een enkele ad-hoc opdracht om regels op een externe machine te beheren kan in orde zijn, maar het wordt moeilijk als u regels in meerdere bestanden of meerdere regels in een bestand moet beheren. Overweeg in plaats van ad-hoc opdrachten te gebruiken het gebruik van de Ansible lineinfile-module binnen het playbook met behulp van het ansible-playbook commando.

Leer nu hoe u de Ansible lineinfile-module kunt gebruiken binnen het playbook en enkele regels kunt wijzigen.

Uitgaande van het feit dat u al bent ingelogd op de Ansible-controllerhost:

1. Maak een directory genaamd ansible_lineinfile_module_demo aan in uw home directory. Deze directory bevat het playbook dat u zult gebruiken om de lineinfile-module aan te roepen.

mkdir ~/ansible_lineinfile_module_demo
cd ~/ansible_lineinfile_module_demo

2. Maak een ander bestand genaamd my_playbook.yml aan in de map ~/ansible_lineinfile_module_demo en plak de volgende YAML playbook inhoud erin. Deze playbook bevat meerdere taken die de Ansible lineinfile module gebruiken om regels van verschillende configuratiebestanden voor Apache op de externe machine te beheren.

De onderstaande playbook bevat de volgende taken:

1. Controleert of ADMIN aanwezig is in het bestand /etc/sudoers; als dit niet het geval is, voegt de taak het toe.

2. Zorgt ervoor dat Apache standaard luistert op poort 8080 in het bestand /etc/apache2/ports.conf; als het een andere poortregel vindt, wordt deze bijgewerkt naar poort 8080. Op dezelfde manier wordt in het bestand /etc/apache2/apache2.conf de waarde van MaxKeepAliveRequests bijgewerkt naar 1000 en KeepAliveTimeout naar 100.

3. Voegt de regel met de tekst “Hello This is my Apache Page” toe aan het einde van het bestand index.html op de externe server onder de map /var/www/html.

Ansible playbooks worden geschreven in YAML. Voor meer informatie over YAML, klik hier

---
- name: Ansible lineinfile module example
# Het definiëren van de externe server waar het Ansible lineinfile-module van toepassing zal zijn
  hosts: web
  remote_user: ubuntu   # Gebruik Remote-host als ubuntu
  become: true
  tasks:

# (Taak-1) Controleer het Sudoers-bestand als Admins zijn toegestaan om alle handelingen uit te voeren
    - name: Validate the sudoers file before saving
      ansible.builtin.lineinfile:
         path: /etc/sudoers
         state: present
         regexp: '^%ADMIN ALL='
         line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'

# (Taak-2) Bijwerken van de standaardpoort van Apache naar 8080
    - name: Ensure the default Apache port is 8080
      ansible.builtin.lineinfile:
         path: /etc/apache2/ports.conf
         regexp: '^Listen '
         insertafter: '^#Listen '
         line: Listen 8080

# (Taak-3) Het toevoegen van de regel aan het einde van de html-pagina Hallo Dit is mijn Apache-pagina
    - name: Add a line to a file if the file does not exist
      ansible.builtin.lineinfile:
         path: /var/www/html/index.html
         line: Hello This is my Apache Page
         create: yes

# (Taak-4) Controleer het Sudoers-bestand als Admins zijn toegestaan om alle handelingen uit te voeren
    - name: Ensure MaxKeepAliveRequests is set to greater than 100
      ansible.builtin.lineinfile:
         path: /etc/apache2/apache2.conf
         regexp: '^MaxKeepAliveRequests'
         line: MaxKeepAliveRequests=1000

# (Taak-5) Controleer het Sudoers-bestand als Admins zijn toegestaan om alle handelingen uit te voeren
    - name: Ensure KeepAliveTimeout is set to greater than 50
      ansible.builtin.lineinfile:
         path: /etc/apache2/apache2.conf
         regexp: '^KeepAliveTimeout'
         line: KeepAliveTimeout=100

3. Roep nu het playbook aan en voer de taken uit met het ansible-playbook-commando om alle regels gedefinieerd in het playbook op de externe host toe te voegen of bij te werken.

ansible-playbook my_playbook.yml 
Invoking the ansible playbook

Hieronder kunt u zien dat de TAKE de status gewijzigd heeft, wat betekent dat de externe host niet in de juiste staat was en werd aangepast om het commando uit te voeren. Voor die TAAK met OK-status, blijkt dat ze geen wijzigingen vereisen.

4. Log vervolgens in op de externe host met uw favoriete SSH-client.

5. Controleer ten slotte of alle regels gedefinieerd in het my_playbook.yml zijn bijgewerkt of toegevoegd op de externe host met behulp van het cat-commando.

# Om te controleren of de beheerder aanwezig is met volledige rechten en zo niet, voeg deze toe
cat /etc/sudoers
# Controleer of MaxKeepAliveRequests en KeepAliveTimeout zijn bijgewerkt naar respectievelijk 1000 en 100.
cat /etc/apache2/apache.config | grep Alive
# Controleer of Apache luistert op poort 8080
cat /etc/apache2/ports.config

De onderstaande schermafbeelding bevestigt dat de beheerder al is toegevoegd in het sudoers-bestand.

Verifying the sudoers file

Nogmaals, de onderstaande schermafbeelding bevestigt dat Apache standaard luistert op Poort 8080.

Verifying the ports for in the config file

Tenslotte, controleer of MaxKeepAliveRequests en KeepAliveTimeout zijn bijgewerkt naar respectievelijk 1000 en 100.

Verifying the MaxKeepAliveRequests and KeepAliveTimeout in the config file

Conclusie

De Ansible lineinfile-module is een uitstekende manier om tekstbestanden op externe hosts te wijzigen. De module biedt een geweldige manier om regels toe te voegen, te verwijderen en te wijzigen in tekstbestanden binnen je playbooks.

Welke andere gebruiksscenario’s zie je die baat zouden hebben bij de Ansible lineinfile-module?

Source:
https://adamtheautomator.com/ansible-lineinfile/