GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erste Schritte mit Ansible Ad-hoc-Befehlen

In unserem vorherigen Artikel haben wir besprochen, was eine ansible Inventar- und Konfigurationsdatei ist was die Grundlage für das Erlernen von Ansible bildet. In diesem Artikel werden wir ansible Ad-hoc-Befehle mit einigen Beispielen besprechen.

Einführung

Ansible Ad-hoc-Befehle eignen sich hervorragend, wenn Sie schnelle Aufgaben und Aufgaben ausführen möchten, die nicht häufig wiederholt werden. Typischerweise sind diese Ad-hoc-Befehle Einzeiler-Befehle, die Sie entweder direkt vom Terminal oder vom Shell-Skript aus ausführen können.

Bevor Sie wissen, wie man mit Ad-hoc-Befehlen arbeitet, sollten Sie wissen, was idempotent ist. Ansible ist idempotent in der Natur, d. h. unabhängig davon, wie oft Sie dieselbe Aufgabe ausführen, wenn sich ein Objektstatus bereits geändert hat, wird Ansible nicht versuchen, dieselben Änderungen erneut an diesem Objekt vorzunehmen.

Ad-hoc-Befehle werden über /usr/bin/ansible übermittelt Programm. Sie können den folgenden Befehl ausführen, um die Liste der unterstützten Optionen für den ansible-Befehl abzurufen.

$ ansible --help

Wenn Sie kein Ansible-Lab zum Üben haben, können Sie sich unseren Leitfaden zur manuellen Einrichtung von Ansible sowie zur Verwendung von Vagrant und Virtualbox ansehen.

  • Ansible unter Linux installieren und konfigurieren
  • Automatisierte Ansible Lab-Einrichtung mit Vagrant und Virtualbox unter Linux

Lernen Sie das Ziel kennen

Bevor Sie mit Ad-hoc-Befehlen arbeiten oder Playbooks schreiben, sollten Sie sich ein klares Bild von den Geschäftsanforderungen und der Zielumgebung machen, mit der Sie arbeiten werden.

Die Zielumgebung kann alles sein wie Server, Netzwerkgeräte, Container, Cloud-Lösungen usw., die von Ansible unterstützt werden. Hier verwende ich zwei verwaltete Knoten, auf denen Ubuntu 20.04 ausgeführt wird.

Sie können den folgenden Befehl ausführen, um die Liste der Hosts zu überprüfen, die verwendet werden, wenn Sie einen Ad-hoc-Befehl oder ein Playbook ausführen.

#SYNTAX
$ ansible --list-hosts

Der Gruppenname kann Standard sein (alle , nicht gruppiert ) oder benutzerdefinierte Gruppen .

Wenn Sie mehr über Gruppen erfahren möchten, lesen Sie den folgenden Link.

  • Ansible-Inventar- und Konfigurationsdateien

Holen Sie sich die Liste der Hosts für alle Gruppen.

$ ansible all --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

Rufen Sie eine Liste der Hosts für die benutzerdefinierte Gruppe ab. Hier ist mein Gruppenname ubuntu .

$ ansible ubuntu --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

Inventardatei

Die Bestandsdatei enthält die Liste der verwalteten Knoten. Der Speicherort der Inventardatei wird in ansible.cfg konfiguriert Datei. Sie können den Speicherort der Inventardatei mit -i überschreiben oder --inventory Flag beim Ausführen von Ad-hoc-Befehlen.

Ich habe zwei Inventardateien und die Standarddatei heißt hosts. Um die Datei host2 zu verwenden, muss ich das -i verwenden kennzeichnen und die Datei als Argument übergeben.

$ ansible all -i host2 --list-hosts
hosts (1):
  managed2.anslab.com

Vorsicht: Wenn sich die Inventardatei an einem anderen Ort befindet, müssen Sie den absoluten Pfad angeben. Sie können sich auf den folgenden Link beziehen, um die Rangfolge für die Inventardatei zu erfahren.

  • Ansible-Inventar- und Konfigurationsdateien

Ansible-Module

Ansible ist ein batteriebetriebenes Tool, was bedeutet, dass Tonnen von Modulen mitgeliefert werden. Module sind in Python geschriebene Programme das von Ansible verwendet wird, um auf den verwalteten Knoten ausgeführt zu werden, um eine Aufgabe auszuführen. Ansible folgt dem Plug-and-Play-Ansatz, was bedeutet, dass Sie Ihr eigenes Modul schreiben und es über Ansible ausführen können.

Ansible unterstützt viele Pakete, die von der Open-Source-Community und verschiedenen Produktanbietern erstellt wurden. Führen Sie den folgenden Befehl aus, um die Liste aller auf Ihrem Computer installierten Module abzurufen.

$ ansible-doc -l                    # LIST ALL MODULES AVAILABLE
$ ansible-doc -l | grep -i -w ^apt  # GREP PARTICULAR MODULE(APT) MODULE

Um die Dokumentation für ein Modul anzuzeigen, können Sie den folgenden Befehl ausführen. Hier sehe ich mir die Dokumentation für das apt-Modul an, das das Paketverwaltungsmodul für Debian/Ubuntu-basierte Distributionen ist.

$ ansible-doc apt

Das folgende Bild zeigt die Dokumentation für das ansible apt-Modul.

Ad-hoc-Befehlssyntax

Es gibt einige Eingaben, die Sie machen müssen, wenn Sie den Ad-hoc-Befehl ausführen.

  • Sie müssen die Ziele (managed nodes) angeben. Sie können entweder die Standardgruppen "alle/ungruppiert" oder benutzerdefinierte Gruppen verwenden.
  • Sie müssen den Modulnamen als Argument an -m übergeben Flagge.
  • Jedes Modul akzeptiert eine Reihe von Optionen. Diese Optionen sollten als Argumente an das Flag -a übergeben werden. Wenn es mehrere Optionen gibt, sollten sie in Anführungszeichen gesetzt werden.
$ ansible [group] -m [module] -a [module arguments]

Sie können andere Argumente, die wir in den vorherigen Abschnitten gesehen haben, zu Ad-hoc-Befehlen kombinieren.

Überprüfen Sie die Konnektivität mit dem Ping-Modul

Das erste Modul, das Sie nach der Einrichtung von ansible ausführen, ist "ping" Modul. Das Ping-Modul wird verwendet, um zu überprüfen, ob die Konnektivität mit dem Controller und den verwalteten Knoten in Ordnung ist. Wenn die Verbindung erfolgreich ist, erhalten Sie als Antwort "ping :pong" .

$ ansible all -m ping

Sie können die Ausgabe auch komprimieren, indem Sie -o verwenden Flagge.

$ ansible all -m ping -o

Befehle über das Shell-Modul ausführen

Das Shell-Modul wird verwendet, um alle Befehle auszuführen, die Sie über das Terminal ausführen können. Es ist einfach so, als würden die Befehle über ein Linux-Terminal ausgeführt.

Sie sollten den -a verwenden Flag und übergeben Sie Befehle als Argumente an das Shell-Modul.

$ ansible all -m shell -a "arguments"

Unten sind einige der Befehle, die ich durch das Ansible-Shell-Modul ausgeführt habe.

$ ansible all -m shell -a "echo $USER"
$ ansible all -m shell -a "uptime"
$ ansible all -m shell -a "cat /etc/os-release | grep -i PRETTY_NAME"
$ ansible all -m shell -a "touch /tmp/abc.txt"
$ ansible all -m shell -a "ls -l /tmp/abc.txt"

Alternativ zum Shell-Modul können Sie auch das Befehlsmodul verwenden, das das Standardmodul in Ansible ist. Sie können direkt das -a verwenden Befehle als Argument markieren und übergeben, da das Befehlsmodul das Standardmodul ist.

$ ansible all -m command -a "uptime"       # EXCLUSIVELY PASSING COMMAND MODULE
$ ansible all -a "uptime"                  # NOT USING -m TO PASS MODULE

Der Unterschied zwischen Shell und Befehlsmodul besteht darin, dass Sie mit dem Befehlsmodul auf einige spezielle Variablen zugreifen können und keine Pipes, Umleitungen und logischen UND-Operatoren verwenden können.

Führen Sie den folgenden Befehl aus und Sie erhalten eine Fehlermeldung.

$ ansible all -m command -a "test -f /etc/hosts && echo 'hosts file present'"

Sie können denselben Befehl über das Shell-Modul ausführen, und es wird problemlos ausgeführt.

$ ansible all -m shell -a "test -f /etc/hosts && echo 'hosts file present'"

Skripte über das Skriptmodul ausführen

Wenn Sie ein beliebiges Skript (Python, Shell usw.) ausführen möchten, können Sie das Skriptmodul verwenden, das das Skript von Ihrem Controller-Computer auf alle verwalteten Knoten kopiert und dann das Skript ausführt.

Ich habe den folgenden Python-Code in meinem /tmp Verzeichnis.

import sys,os

print("CURRENT PYTHON VERSION = ", sys.version_info)
print("HOSTNAME               = ", os.uname()[1])
print("CURRENT DIRECTORY      = ", os.getcwd())

Führen Sie den folgenden Befehl aus, um das Skript mithilfe des Skriptmoduls auszuführen. Das Skriptmodul unterstützt zusätzliche Argumente, je nachdem, wie Sie Ihr Skript ausführen. In meinem Fall führe ich ein Python-Skript aus, also versuche ich, das zusätzliche Argument "executable=python3" zu übergeben zusammen mit dem Skriptpfad.

$ ansible all -m script -a "/tmp/get_host_details.py executable=python3"

Paketverwaltungsmodule

Es gibt Module, die mit OS-Paketmanagern wie dnf arbeiten , apt , pacman usw. Hier verwende ich apt seit ich Ubuntu verwende. Aber die Syntax wird für alle Paketmanager mit Parameterunterschieden gleich sein. Sie sollten sich die entsprechende Dokumentation ansehen, um mehr darüber zu erfahren.

Um Pakete zu installieren, können Sie den folgenden Befehl ausführen und den Status auf "present" setzen . Sie sollten -b wählen oder -become Flag, um das Modul mit sudo auszuführen Privileg in den verwalteten Knoten. Wenn Sie das Passwort für den sudo-Benutzer festgelegt haben, sollten Sie -K übergeben zusammen mit dem -b Flag, das zur Eingabe von become auffordert Passwort.

$ ansible all -m apt -a "name=cowsay,vim,cmatrix state=present" -b -K

Um zu erfahren, wie die Rechteausweitung funktioniert, werfen Sie einen Blick auf unseren Artikel über den Link unten.

  • Ansible SSH-Authentifizierung und Rechteausweitung

Um die Pakete zu entfernen, können Sie den folgenden Befehl ausführen und den Status auf "abwesend" setzen .

$ ansible all -m apt -a "name=cowsay,vim,cmatrix state=absent" -b -K

Bisher habe ich gezeigt, wie man verschiedene Module für verschiedene Aufgaben verwendet. Dies hat Ihnen möglicherweise ein gutes Verständnis dafür vermittelt, wie die Dinge funktionieren, wenn Sie Ad-hoc-Befehle ausführen.

Es gibt unzählige andere Module und dieser Artikel wird nicht ausreichen, um alle durchzugehen. Daher schlage ich vor, dass Sie das Modul entsprechend Ihrem Anwendungsfall auswählen und mit den Ad-hoc-Befehlen üben.

Ausgabefarben

Wenn Sie Ad-hoc-Befehle ausführen, sollten Sie die Ausgabe in drei verschiedenen Farben gesehen haben. Jede Farbe hat eine Bedeutung.

RED    - Failure
YELLOW - Success With Changes happened
GREEN  - Success but no changes happened

ROT - Fehler

Wenn Ihre Aufgabe fehlgeschlagen ist, wird sie in roter Farbe gedruckt.

GELB - Mit Veränderungen zum Erfolg

Wenn der Zustand geändert werden soll, wird die Ausgabe in gelber Farbe angezeigt.

GRÜN - Erfolg, aber keine Änderungen

Wenn der Objektstatus nicht geändert wird, ist die Ausgabe grün.

Schlussfolgerung

In diesem Artikel haben wir besprochen, was Ad-hoc-Befehle sind und wie Ad-hoc-Befehle in Ansible verwendet werden. Als Anfänger erhalten Sie durch Ad-hoc-Befehle ein gutes Verständnis dafür, wie Ansible Module verwendet, um eine Aufgabe zu erfüllen. Auf der nächsten Ebene beginnen Sie mit dem Schreiben von Playbooks im YAML-Format, die in einem separaten Artikel ausführlich behandelt werden.

Weiterlesen:

  • Arbeiten mit Ansible Playbooks

Ressourcen:

  • https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
  • https://www.redhat.com/sysadmin/ansible-ad-hoc-commands

Linux
  1. Erste Schritte mit Zsh

  2. Erste Schritte mit dem Linux-tac-Befehl

  3. Erste Schritte mit dem Plesk File Manager

  4. Erste Schritte mit ls

  5. Erste Schritte mit PostgreSQL unter Linux

Erste Schritte mit GitHub

Erste Schritte mit Ansible Playbooks

Erste Schritte mit Nix Package Manager

Erste Schritte mit systemctl

Erste Schritte mit Pacman-Befehlen in Arch-basierten Linux-Distributionen

Erste Schritte mit Emacs:Grundlegende Befehle erklärt