Befehle auf Zielhosts mit dem Ansible Command-Modul ausführen

AnsibleAnsibleBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Ansible ist ein leistungsstarkes IT-Automatisierungswerkzeug, das die Verwaltung von Remotesystemen vereinfacht. In diesem Tutorial werden wir den Ansible-Befehlsmodul untersuchen, mit dem Sie Befehle auf Zielhosts ausführen können. Sie lernen die Grundlagen der Befehlsausführung sowie erweiterte Techniken, um Ihre Ansible-Workflows zu verbessern.

Understanding Ansible Command Module

Ansible is a powerful open-source automation tool that allows you to manage and configure your infrastructure across multiple hosts. The Ansible Command module is one of the core modules in Ansible that enables you to execute arbitrary commands on remote hosts.

The Ansible Command module provides a simple and straightforward way to run commands on target hosts. It allows you to execute shell commands, scripts, or any other executable file on the remote system. This module is particularly useful when you need to perform ad-hoc tasks, troubleshoot issues, or execute custom commands on your infrastructure.

To use the Ansible Command module, you need to define the command parameter in your Ansible playbook or ad-hoc command. The command parameter specifies the command you want to execute on the remote host. For example:

- name: Execute a command on remote host
  command: uptime
  register: uptime_result
  become: yes

In this example, the command parameter is set to uptime, which will execute the uptime command on the remote host. The register parameter is used to capture the output of the command, and the become parameter is set to yes to run the command with elevated privileges (if required).

The Ansible Command module also supports various options, such as:

  • creates: Specifies a file that must exist before running the command.
  • removes: Specifies a file that must not exist before running the command.
  • chdir: Changes the current working directory to the specified path before executing the command.
  • stdin: Passes the specified string to the command via standard input.
  • warn: Controls whether to show a warning if the command could potentially change an important file.

By understanding the Ansible Command module, you can efficiently execute commands on your remote hosts, automate repetitive tasks, and streamline your infrastructure management processes.

Ausführung von Befehlen auf Remote-Hosts

Grundlegende Befehlsausführung

Um einen Befehl auf einem Remote-Host mit dem Ansible Command-Modul auszuführen, können Sie die folgende grundlegende Syntax verwenden:

- name: Ausführung eines Befehls auf einem Remote-Host
  command: <Befehl>
  register: <Ergebnisvariable>
  become: yes

In diesem Beispiel ist <Befehl> der tatsächliche Befehl, den Sie auf dem Remote-Host ausführen möchten, und <Ergebnisvariable> die Variable, die den Ausgang des Befehls speichern wird. Der Parameter become ist auf yes gesetzt, um den Befehl mit erhöhten Rechten auszuführen (falls erforderlich).

Um beispielsweise die Laufzeit eines Remote-Hosts zu überprüfen:

- name: Laufzeit des Remote-Hosts überprüfen
  command: uptime
  register: uptime_result
  become: yes

Der Ausgang des Befehls uptime wird in der Variable uptime_result gespeichert, die Sie dann in Ihrem Playbook oder Ad-hoc-Befehl verwenden können.

Umgang mit Befehlsfehlern

Standardmäßig schlägt das Ansible Command-Modul fehl, wenn der ausgeführte Befehl einen Nicht-Null-Ausgangszustand zurückgibt. Sie können Befehlsfehler behandeln, indem Sie den Parameter ignore_errors verwenden:

- name: Ausführung eines Befehls auf einem Remote-Host
  command: <Befehl>
  register: <Ergebnisvariable>
  ignore_errors: yes

Dies ermöglicht es dem Playbook, die Ausführung fortzusetzen, auch wenn der Befehl fehlschlägt.

Erfassung des Befehlsausgangs

Sie können den Ausgang eines Befehls erfassen, indem Sie den Parameter register verwenden, wie in den vorherigen Beispielen gezeigt. Der Ausgang wird in der angegebenen Variable gespeichert, die Sie dann in Ihrem Playbook oder Ad-hoc-Befehl verwenden können.

Um beispielsweise den Ausgang des Befehls uptime zu erfassen und ihn auszugeben:

- name: Laufzeit des Remote-Hosts überprüfen
  command: uptime
  register: uptime_result
  become: yes

- name: Laufzeit ausgeben
  debug:
    msg: "{{ uptime_result.stdout }}"

Dies gibt den Ausgang des Befehls uptime auf der Konsole aus.

Durch das Verständnis der Grundlagen der Befehlsausführung auf Remote-Hosts mit dem Ansible Command-Modul können Sie eine Vielzahl von Aufgaben in Ihrer Infrastruktur effektiv automatisieren.

Erweiterte Befehlsausführungstechniken

Bedingte Befehlsausführung

Manchmal möchten Sie einen Befehl nur ausführen, wenn eine bestimmte Bedingung erfüllt ist. Sie können die when-Klausel verwenden, um Befehle in Ihrem Ansible-Playbook bedingungsweise auszuführen:

- name: Befehl ausführen, wenn Bedingung erfüllt ist
  command: <Befehl>
  when: <Bedingung>
  register: <Ergebnisvariable>
  become: yes

In diesem Beispiel wird der <Befehl> nur ausgeführt, wenn die <Bedingung> wahr ist.

Um beispielsweise den Befehl free nur auszuführen, wenn der System-Arbeitsspeicher weniger als 20 % frei hat:

- name: Freien Arbeitsspeicher prüfen
  command: free -m
  register: memory_result
  become: yes

- name: Befehl ausführen, wenn freier Arbeitsspeicher unter 20 % liegt
  command: <auszuführender_Befehl>
  when: (memory_result.stdout_lines[1].split()[3]|int / memory_result.stdout_lines[1].split()[1]|int * 100) < 20
  register: <Ergebnisvariable>
  become: yes

Schleifen über Befehle

Sie können auch Schleifen verwenden, um mehrere Befehle in einer einzigen Aufgabe auszuführen. Das Ansible Command-Modul unterstützt den Parameter loop hierfür:

- name: Mehrere Befehle ausführen
  command: "{{ item }}"
  loop:
    - <Befehl1>
    - <Befehl2>
    - <Befehl3>
  register: <Ergebnisvariable>
  become: yes

In diesem Beispiel werden die angegebenen Befehle (<Befehl1>, <Befehl2> und <Befehl3>) nacheinander ausgeführt, und der Ausgang wird in der <Ergebnisvariable> gespeichert.

Umgang mit Befehlsausführungstimeouts

Standardmäßig wartet Ansible unendlich lange, bis ein Befehl abgeschlossen ist. Sie können jedoch ein Timeout für die Befehlsausführung mit dem Parameter timeout festlegen:

- name: Befehl mit Timeout ausführen
  command: <Befehl>
  timeout: 60
  register: <Ergebnisvariable>
  become: yes

In diesem Beispiel wird der Befehl abgebrochen, wenn er länger als 60 Sekunden dauert.

Mit diesen fortgeschrittenen Befehlsausführungstechniken können Sie Ihre Ansible-Automatisierungsfunktionen weiter verbessern und eine Vielzahl von Szenarien im Infrastrukturmanagement bewältigen.

Zusammenfassung

Dieses Ansible-Tutorial bietet eine umfassende Anleitung zur Verwendung des Command-Moduls für die Ausführung von Befehlen auf Remote-Hosts. Durch das Verständnis der Grundlagen und die Erkundung fortgeschrittener Techniken können Sie die Fähigkeiten von Ansible nutzen, um Ihre IT-Operationen zu optimieren und die Effizienz in Ihrer gesamten Infrastruktur zu verbessern.