task automation using ansible playbooks
Lernen Sie die Aufgabenautomatisierung mithilfe von Ansible-Playbooks und Ansible-Tresoren zum Sichern vertraulicher Daten:
In unserem vorherigen Ansible-Tutorial Nr. 1 Wir haben die verschiedenen Komponenten von Ansible kennengelernt und erfahren, wie Sie dieses Tool mit verschiedenen Modulen installieren und konfigurieren. Wir haben auch gesehen, wie die Module verwendet werden, um eine Funktion oder Aufgabe auszuführen.
In diesem Teil befassen wir uns mit der Automatisierung von Aufgaben mithilfe von Ansible-Playbooks und Ansible-Tresoren, um vertrauliche Daten zu schützen.
Empfohlene Lektüre => Lernhandbuch für DevOps
Websites, um kostenlose Anime in Englisch zu sehen
Was du lernen wirst:
- Ansible Playbooks
- Erstellen von Playbooks mit Beispielen
- Ansible Vault
- Zusammenfassung
- Literatur-Empfehlungen
Ansible Playbooks
Wir haben gesehen, wie einzelne Aufgaben oder einmalige Aufgaben mit Modulen ausgeführt werden. Was ist jedoch, wenn Sie mehrere Aufgaben ausführen müssen? Playbooks helfen dabei, sie skriptgesteuert auszuführen.
Playbooks definieren Variablen, Konfigurationen, Bereitstellungsschritte, weisen Rollen zu und führen mehrere Aufgaben aus. Zum Z.B. Dateien und Ordner KOPIEREN / LÖSCHEN, Pakete installieren, Dienste starten. Daher werden in erster Linie Playbooks definiert, um die Schritte auf mehreren Computern oder Servern zu orchestrieren und sie alle in einen bestimmten gewünschten Zustand zu bringen.
Playbook ist in geschrieben YAML-Format mit einer .yml Dateierweiterung. Man muss sehr vorsichtig mit dem Format und der Ausrichtung sein, was es sehr empfindlich macht.
Es enthält die folgenden Abschnitte:
- Jedes Spielbuch beginnt mit 3 Bindestrichen '-'
- Host-Bereich - Definiert die Zielcomputer, auf denen das Playbook ausgeführt werden soll. Dies basiert auf der Ansible-Inventardatei.
- Variabler Abschnitt - Dies ist optional und kann alle im Playbook benötigten Variablen deklarieren. Wir werden uns auch einige Beispiele ansehen.
- Aufgabenbereich - In diesem Abschnitt werden alle Aufgaben aufgelistet, die auf dem Zielcomputer ausgeführt werden sollen. Es gibt die Verwendung von Modulen an. Jede Aufgabe hat einen Namen, der eine kleine Beschreibung der Aufgaben der Aufgabe enthält und aufgelistet wird, während das Playbook ausgeführt wird.
Zum Beispiel,
Wenn wir Tomcat installieren und konfigurieren müssen, besteht es aus den folgenden Aufgaben:
- Laden Sie Tomcat herunter und installieren Sie es
- Konfigurieren Sie Tomcat
- Starten Sie Tomcat
Ebenso ein andererBeispielFür die Verwendung von Tomcat, das für die kontinuierliche Bereitstellung von DevOps verwendet wird, können folgende Aufgaben ausgeführt werden:
- Beenden Sie die Anwendung
- Deinstallieren Sie die Anwendung
- Installieren Sie eine neue Version der WAR-Datei.
- Anwendung starten
Beispielformat des Playbooks
--- Playbook start - hosts: webservers Specify the group or servers as per inventory to execute tasks become: true tasks: - name: Copy Tomcat ZIP file to install location Short description of the task copy: src=/home/ansible/niranjan/apache-tomcat-8.5.31.tar.gz dest=/opt/niranjan/tomcat
Schauen Sie sich im obigen Skript die Ausrichtung von oben an und sie muss beibehalten werden, da sonst Syntaxfehler auftreten.
Verwenden Sie den folgenden Befehl, um ein Playbook auszuführen
$ ansible-playbook
So überprüfen Sie das Playbook auf Syntaxfehler
$ ansible-playbook --syntax-check
Anzeigen der Hosts-Liste
$ ansible-playbook --list-hosts
Erstellen von Playbooks mit Beispielen
In diesem Abschnitt finden Sie mehrere Beispiele zum Erstellen von Playbooks, die Sie möglicherweise regelmäßig ausführen müssen. Diese Playbooks müssen erstellt und von der Steuerungsmaschine ausgeführt werden.
Speichern Sie alle unten aufgeführten Playbooks in einer .yml-Datei und führen Sie sie wie unten gezeigt aus.
$ ansible-playbook filename.yml
Beispiel 1: Erstellen Sie die Datei auf den Zielcomputern oder Servern, wie in der Inventardatei und in der Gruppe des Webservers angegeben, speichern Sie den folgenden Code mit der Erweiterung .yml und führen Sie das Playbook aus.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
Im obigen Beispiel haben wir die verwendet Datei Modul zum Erstellen der Datei.
Beispiel 2: Erstellen Sie ein Verzeichnis mit dem Modus 775 und dem Eigentümer / der Gruppe Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Beispiel 3: Erstellen Sie mehrere Verzeichnisse. Um mehrere Verzeichnisse mit einer einzigen Aufgabe zu erstellen, können Sie die Schleife verwenden with_items Erklärung. Wenn Sie also das folgende Playbook ausführen, wird es als 3 verschiedene Aufgaben interpretiert.
--- - hosts: webservers become: true tasks: - name: Create multiple directories file: path={{item}} state=directory with_items: - '/home/ansible/vn1' - '/home/ansible/vn2' - '/home/ansible/vn3'
Beispiel 4: Erstellen Sie einen Benutzer. Schauen wir uns das an Nutzer Modul zum Erstellen und Löschen von Benutzern im Playbook.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Beispiel 5: Benutzer entfernen. Das Entfernen eines Benutzers ist sehr einfach und erfordert die Zustand eingestellt werden auf abwesend . Dies entspricht dem userdel Befehl unter Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
Im obigen Spielbuch entfernen = ja entfernt das Home-Verzeichnis und Kraft = ja entfernt die Dateien im Verzeichnis.
Beispiel 6: Kopieren Sie Inhalte mit dem Kopiermodul in eine Datei.
Wenn Sie eine Datei auf die Zielcomputer oder -server kopieren müssen, verwenden Sie die src und dest im Kopiermodul.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Zum Beispiel,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Beispiel 7: Ersetzen Sie alle Instanzen einer Zeichenfolge.
Verwenden von ersetzen Modul können wir ein Wort durch ein anderes Wort ersetzen. Das Ersetzungsmodul benötigt 3 Parameter, d. H. 'Pfad', 'regulärer Ausdruck' (um das bestimmte Wort zu finden) und 'Ersetzen' (Bereitstellen eines anderen Wortes zum Ersetzen).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Beispiel 8: Archiv- oder ZIP-Dateien und -Ordner
Verwenden des Ansible Archiv Modul können Sie Dateien oder Ordner in das Format 'zip', '.gz' oder 'bz2' komprimieren.
Hinweis :: Die zu komprimierenden Dateien oder Ordner sollten auf den Zielservern verfügbar sein und auf denen die Pakete für tar-, bzip2-, gzip- und zip-Dateien installiert sein sollten. Sie können eine separate Playbook-Aufgabe zum Installieren dieser Pakete haben.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Das obige Playbook komprimiert die Datei niranjan.txt in die Datei niranjan.zip
--- - hosts: all tasks: - name: Ansible zip multiple files example archive: path: - /home/ansible/niranjan1.txt - /home/ansible/niranjan2.txt dest: /home/ansible/niranjan.zip format: zip
Das obige Playbook komprimiert mehrere Dateien in die Datei niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Das obige Playbook komprimiert alle Dateien im Verzeichnis / home / ansible.
Beispiel 9: Arbeiten mit Datum und Zeitstempel
Die Verwendung des Systemdatums und des Zeitstempels hilft bei bestimmten Status- oder Protokollierungszwecken. Die Ansible-Fakten bieten Zugriff auf Datum und Uhrzeit des Remote- oder Zielservers. So können wir die verwenden Debug-Modul um die Ausgabe zusammen mit dem zu drucken wo Attribut wie unten gezeigt.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Das obige Playbook zeigt das Datum an.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Das obige Spielbuch zeigt die Uhrzeit an.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Das obige Playbook erstellt eine dynamische Datei basierend auf dem aktuellen Datum für Z.B . niranjan2018-07-15.log
Beispiel 10: Beispiel für Variablen
Variablen werden zum Speichern von Werten verwendet. Im folgenden Beispiel deklariere ich die Variable Name mit Wert Niranjan . Die Ausgabe wird sein Niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Wir können auch ein Array oder eine Liste von Variablen wie unten haben Beispiel .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Die Indizierung des Arrays beginnt bei ZERO (0). Daher ist die Ausgabe im obigen Beispiel Niranjan.
Beispiel 11: Variablen registrieren
Wir können auch die Ausgabe jeder Aufgabe in einer Registervariablen erfassen.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Hinweis: Um anzuzeigen - verwenden Sie das msg-Attribut und um einen beliebigen Wert zu erfassen, verwenden Sie das var-Attribut im - debug-Modul
Beispiel 12: Playbook zum Installieren von Vim Editor und GIT auf den Zielservern oder -computern.
undefinierter Verweis auf Haupt-C ++
In diesem Spielbuch haben wir das verwendet lecker Modul zum Installieren der neuesten Version der Softwarepakete.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Beispiel 13: Installieren Sie den Apache-Server. Speichern Sie den folgenden Code und führen Sie das Playbook wie unten gezeigt aus.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Neben dem lecker Modul, die Bedienung Das Modul wird auch zum Starten des httpd-Dienstes verwendet. Die Aufgaben werden synchron von oben nach unten ausgeführt.
Beispiel 14: Installieren Sie JDK
Das folgende Playbook automatisiert die Installation von JDK 8 auf allen Zielcomputern oder Servern. JDK ist eine Voraussetzung für die meisten anderen Softwarepakete wie Maven oder Tomcat.
--- - hosts: webservers become: true vars: download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm tasks: - name: Download JDK 8 RPM file command: 'wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' {{download_url}} ' - name: Install JDK 8 command: 'rpm -ivh jdk-8u171-linux-x64.rpm'
Beispiel 15: Installieren Sie Maven
Die ausgeführten Aufgaben bestehen darin, die Maven-Datei von der URL mit dem herunterzuladen get_url Modul, extrahieren Sie die heruntergeladene Datei, verschieben Sie sie in ein kleineres Verzeichnis, aktualisieren Sie das Profil und führen Sie es aus, in dem der Maven dem Pfad hinzugefügt wird.
--- - hosts: webservers become: true tasks: - name: Download Maven get_url: url=http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest=/opt/niranjan/apache-maven-3.5.3-bin.tar.gz - name: Extract Maven command: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C /opt/niranjan - name: Move to a smaller directory command: mv /opt/niranjan/apache-maven-3.5.3 /opt/niranjan/maven - name: Update Profile copy: content='export M2_HOME=/opt/niranjan/maven
' dest=/etc/profile.d/maven.sh # lineinfile is used to add additional or append lines to existing files. - lineinfile: path: /etc/profile.d/maven.sh line: 'export PATH=${M2_HOME}/bin:${PATH}' - name: Source profile shell: source /etc/profile.d/maven.sh
Beispiel 16: Installieren Sie Tomcat 8
Das folgende Playbook hilft beim Installieren und Starten von Tomcat 8 auf den Zielcomputern oder Servern.
Sie können klicken Hier Klicken Sie auf, um den Linkspeicherort der neuesten Version von Tomcat 8 zu kopieren Hier für die URL mit der Tomcat 8-TAR-Datei, die ich in diesem Playbook verwendet habe.
--- - hosts: webservers become: true gather_facts: no tasks: - name: Download Tomcat get_url: url=http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz dest=/home/ansible - name: Extract the file downloaded tomcat file command: tar xvf apache-tomcat-8.5.32.tar.gz - name: Move the Tomcat directory to a smaller one command: mv apache-tomcat-8.5.32 tomcat - name: Change Ownership and group of the Tomcat directory file: path=/home/ansible/tomcat owner=ansible group=ansible mode=775 state=directory recurse=yes - name: Start Tomcat command: nohup /home/ansible/tomcat/bin/startup.sh # Execute command even after you have exited from the shell prompt become: true become_user: ansible
Beispiel 17: pre_tasks, post_tasks und Tags
Sie können verwenden pre_tasks und post_tasks um bestimmte Aufgaben vor oder nach dem Ausführen der Hauptaufgabe auszuführen.
Normalerweise haben Sie in einem Spielbuch so viele Aufgaben, die ausgeführt werden. Was ist, wenn Sie nur eine bestimmte Aufgabe ausführen müssen? Tags sind die Antwort darauf. Schauen wir uns die folgende Option an, die alle drei Optionen enthält. Es hat 2 Aufgaben, d. H. Eine mit TAG und eine ohne TAG.
--- - name: Pre , Post tasks and Tags example hosts: localhost become: true tags: - niranjan pre_tasks: - debug: msg='Started task with tag - niranjan. tasks: - name: Going to execute the main task debug: msg='Currently in the target server' post_tasks: - debug: msg='Completed task with tag - niranjan. - name: Play without tags hosts: localhost become: true tasks: - name: Command to list files shell: ls -lrt > niranjan.txt
Mal sehen, was passiert, wenn das Playbook mit der Option –list-tags ausgeführt wird
$ ansible-playbook preposttagseg.yml --list-tags
Die obige Ausgabe sieht besser und klarer aus. Spiel Nr. 1 hat einen Tag Niranjan, aber Spiel Nr. 2 hat keine Tags.
Wenn Sie die Aufgaben mit dem Tag niranjan ausführen müssen, lautet der auszuführende Befehl:
$ ansible-playbook preposttagseg.yml --tags niranjan
Das zweite Spiel wird nicht ausgeführt und die Datei wird nicht erstellt.
Beispiel 18: Handler
Jedes Softwarepaket verfügt über Konfigurationsdateien, und Änderungen daran werden nur wirksam, wenn der Dienst neu gestartet wird. Sie müssen also den Dienst zum Neustart einstellen. Zum Z.B. Wenn Sie es im folgenden Playbook mehrmals ausführen, wird der Dienst trotzdem neu gestartet, unabhängig davon, ob Änderungen vorgenommen wurden oder nicht, was nicht korrekt ist.
--- - hosts: webservers tasks: - name: Install the apache Package yum: name=httpd state=latest - name: Copy httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html
# This service below is executed irrespective of changes done or not to any config files - name: Start and Enable httpd service service: name=httpd state= restarted enabled=yes
Daher müssen wir den Dienst nur neu starten, wenn die Änderungen an den Konfigurationsdateien vorgenommen wurden. Handler bieten diese Funktion.
Der richtige Ablauf mit Handlern wäre also, eine zu haben benachrichtigen Möglichkeit.
--- - hosts: webservers become: true tasks: - name: Install httpd package yum: name=httpd state=latest - name: Copy the httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html notify: - restart httpd - name: Start httpd service service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd state=restarted
Zum ersten Mal wird der Apache-Server installiert und gestartet. Selbst wenn Sie das Playbook ohne Änderungen erneut ausführen, wird der httpd-Dienst nicht neu gestartet, da er bereits gestartet ist.
Wenn Änderungen an den Konfigurationsdateien vorgenommen werden oder wenn die HTML-Dateien geändert werden, wird der Handler nach dem Ausführen des Playbooks benachrichtigt, um den Dienst neu zu starten. Der Name im Benachrichtigungsabschnitt und in den Handlern sollte identisch sein. Der Handler wird wie jede andere Aufgabe geschrieben, aber nur aufgerufen, wenn Änderungen vorliegen.
Ansible Vault
In den meisten Fällen, in denen vertrauliche oder vertrauliche Daten im Playbook geschützt werden müssen, können sie verschlüsselt werden, anstatt sie nur in einer Textdatei zu speichern, die von allen gelesen werden kann. Mit Ansible Vault können Sie das Playbook verschlüsseln, um die vertraulichen Daten zu schützen.
Zum BeispielBetrachten Sie die folgende Aufgabe, wenn eine vertrauliche Arbeitsvereinbarung kopiert wird.
In solchen Fällen benötigen Sie einen Ansible Vault.
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txt
Im Folgenden finden Sie die Schritte, die Sie zum Verschlüsseln der oben genannten Playbook-Dateien ausführen müssen.
# 1) Erstellen neuer verschlüsselter Dateien
Um neue verschlüsselte Dateien mit Vault zu erstellen, verwenden Sie die ansible-vault erstellen Befehl.
$ ansible-vault create jobagreement.yml
Nach Bestätigung des Passworts wird ein Bearbeitungsfenster geöffnet, in dem Sie der Datei Inhalte hinzufügen können.
Ansible verschlüsselt den Inhalt, wenn Sie die Datei schließen. Anstatt den eigentlichen Inhalt zu sehen, sehen Sie verschlüsselte Blöcke.
# 2) Um eine vorhandene yml-Datei zu verschlüsseln, gehen Sie wie folgt vor
$ ansible-vault encrypt existingfile.yml
Das Passwort wird erneut zur Verschlüsselung abgefragt.
# 3) Anzeigen einer verschlüsselten Datei
Verwenden Sie den Befehl Ansible-Vault-Ansicht um den tatsächlichen Inhalt der Datei zu sehen.
$ ansible-vault view jobagreement.yml
Sie werden erneut nach dem Passwort gefragt, um den Inhalt der Datei anzuzeigen.
# 4) Bearbeiten verschlüsselter Dateien
Wenn Sie die Datei bearbeiten müssen, verwenden Sie den Befehl Ansible-Vault bearbeiten
$ ansible-vault edit users.yml
Geben Sie das Passwort ein, um die Datei zu bearbeiten.
# 5) Ändern des Passworts der verschlüsselten Dateien
Verwenden Sie den Befehl Ansible-Vault-Rekey um das Passwort der Datei zu ändern.
$ ansible-vault rekey jobagreement.yml
# 6) Führen Sie eine verschlüsselte Ansible-Playbook-Datei aus
Verwenden Sie die Option –ask-vault-pass mit dem Befehl ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Manuelles Entschlüsseln der verschlüsselten Dateien
Verwenden Sie den Befehl ansible-vault decrypt.
$ ansible-vault decrypt jobagreement.yml
Zusammenfassung
In diesem Tutorial haben wir die beiden wichtigsten Aspekte des Konfigurationsmanagements gesehen Ansible Playbooks und Schutz sensibler Daten mit Ansible Vaults.
Die obigen Beispiele für ein Playbook hätten Ihnen eine Idee gegeben, wie Sie verschiedene Aufgaben in verschiedenen Szenarien während der Softwarebereitstellung automatisieren können.
In unserem nächsten Tutorial erfahren Sie, wie Sie das Playbook mithilfe von Ansible-Rollen modularisieren, in Jenkins integrieren und den wichtigsten Aspekt für die Arbeit mit Ansible S3- und EC2-Modulen zur Verwaltung der AWS-Instanzen (Erstellen und Beenden von EC2-Instanzen) festlegen.
Fragen und Antworten zur SQL-Prüfung pdf
PREV Tutorial | NÄCHSTES Tutorial
Literatur-Empfehlungen
- Ansible Tutorial: Installation und Verwendung mit Ansible Modules
- SeeTest-Automatisierungsbefehle: Eine ausführliche Erläuterung mit Beispielen
- Ansible Rollen, Integration mit Jenkins in DevOps und EC2-Modulen
- Entwickeln von Testskripten mit den fünf beliebtesten Testautomatisierungs-Frameworks (Beispiele)
- Skriptloses Testautomatisierungs-Framework: Tools und Beispiele
- Python DateTime Tutorial mit Beispielen
- Befehl in Unix mit Beispielen ausschneiden
- Testautomatisierung - Ist es eine spezialisierte Karriere? Können normale Tester auch automatisieren?