Ansible Navigator

Andrea Dainese
06 October 2023
Post cover

Ansible Navigator ist eine containerbasierte textbasierte Schnittstelle, die entwickelt wurde, um verschiedene Komponenten von Ansible zu verwalten. Im Wesentlichen fungiert es als Wrapper und bietet eine einheitliche Schnittstelle für das Ansible-Ökosystem. Die Verwendung von Ansible Navigator erfordert anfangs keine Container-Nutzung. Daher verwenden wir den Parameter --ee=false.

Zu den Modulen von Ansible Navigator gehören:

  • run: Führt ein Playbook aus.
  • replay: Zeigt das Ergebnis eines zuvor ausgeführten Playbooks an.
  • inventory: Zeigt ein spezifisches Ansible-Inventar an und beschreibt Hosts, Gruppen und Variablen.
  • config: Zeigt die Konfiguration von Ansible und einzelne Parameter an.
  • settings: Zeigt die aktuelle Konfiguration von Ansible Navigator und einzelne Parameter an.
  • lint: Stellt sicher, dass Playbooks und Rollen ordnungsgemäß formatiert sind (Linting).

Lassen Sie uns die praktische Verwendung von Ansible Navigator erkunden.

Run: Ausführen eines Ansible Playbooks

Ein Ansible-Playbook kann mithilfe von Ansible Navigator wie folgt ausgeführt werden:

ansible-navigator --ee=false run playbook-print_all_vars.yml -i inventory.yml

Im Vergleich zur Ausgabe von Ansible bietet Ansible Navigator eine deutlich verbesserte Lesbarkeit:

  Play name             Ok Changed Unreachable Failed Skipped Ignored In progress Task count   Progress
0│PRINT DEBUG VARIABLES  6       0           0      0       0       0           0          6   Complete

Wir können Playbook-Details anhand der Zeilennummer (0 in unserem Fall) oder : gefolgt von der Zeilennummer (:0 in unserem Fall) erhalten.

Darüber hinaus können Aufgabenlisten und -details angezeigt werden:

  Result Host      Number Changed Task                                  Task action           Duration
0│Ok     localhost      0 False   Gathering Facts                       gather_facts                1s
1│Ok     localhost      1 False   PRINT MODULE VARIABLES (vars)         ansible.builtin.debug       0s
2│Ok     localhost      2 False   PRINT ENVIRONMENT VARIABLES (environmeansible.builtin.debug       0s
3│Ok     localhost      3 False   PRINT GROUP NAMES VARIABLES (group_namansible.builtin.debug       0s
4│Ok     localhost      4 False   PRINT GROUPS VARIABLES (groups)       ansible.builtin.debug       0s
5│Ok     localhost      5 False   PRINT HOST VARIABLES (hostvars)       ansible.builtin.debug       0s

Ähnlich können wir die Details jeder Aufgabe sehen:

Play name: PRINT DEBUG VARIABLES:1
Task name: PRINT MODULE VARIABLES (vars)
Ok: localhost ['-------------------------------------------------------------------------', '{', '    "a
   0│---                                                                                               ▒
   1│duration: 0.042759
   2│end: '2023-10-06T11:39:11.611558'
   3│event_loop: null
   4│host: localhost
   5│play: PRINT DEBUG VARIABLES
   6│play_pattern: all
   7│playbook: /Users/dainese/src/patreon/ansible/Recipes/playbook-print_all_vars.yml
   8│remote_addr: localhost
   9│res:
  10│  _ansible_no_log: null
  11│  _ansible_verbose_always: true
  12│  changed: false
  13│  msg:
[...]

Replay: Überprüfung einer vorherigen Ausführung

Nach jeder Ausführung (run) erstellt Ansible Navigator eine JSON-Datei mit dem Namen artifact, die eine retrospektive Analyse der Playbook-Ausführung ermöglicht.

Vorherige Playbook-Daten können mit folgendem Befehl erneut geladen werden:

ansible-navigator --ee=false replay playbook-print_all_vars-artifact-2023-10-06T11\:39\:11.912452+00\:00.json

Die Benutzeroberfläche zeigt denselben Bildschirm wie im vorherigen Absatz (run).

Inventory: Analyse eines Inventars

Das Inventar in Ansible ist entscheidend für die Playbook-Ausführung. Viele Variablen werden auf Inventarebene definiert. Ansible Navigator bietet ein Tool zur Visualisierung der Inventarstruktur, Gruppen und Gruppen- sowie Host-variablen:

ansible-navigator --ee=false inventory -i inventory.yml

Config: Analyse der Ansible-Konfiguration

Ansible kann mit einer großen Anzahl von Parametern konfiguriert werden. Manchmal ist unklar, ob ein bestimmter Parameter richtig konfiguriert ist und daher ignoriert wird.

Wir können die Konfiguration von Ansible anzeigen, um konfigurierte Parameter, ihre Werte und wo sie konfiguriert werden können, zu überprüfen:

ansible-navigator --ee=false config

Die Ausgabe zum Parameter host_key_checking lautet wie folgt:

Host key checking (current: False)  (default: True)
 0│---
 1│current_config_file: None
 2│current_value: false
 3│default: false
 4│default_value: true
 5│description: Set this to "False" if you want to avoid host key checking by the underlying
 6│  tools Ansible uses to connect to the host
 7│env:
 8│- name: ANSIBLE_HOST_KEY_CHECKING
 9│ini:
10│- key: host_key_checking
11│  section: defaults
12│name: Host key checking
13│option: HOST_KEY_CHECKING
14│source: env
15│type: boolean
16│via: ANSIBLE_HOST_KEY_CHECKING

Einstellungen: Analyse der Ansible Navigator-Konfiguration

Ebenso kann die Konfiguration von Ansible Navigator analysiert werden:

ansible-navigator --ee=false settings

Lint: Formatierung von Playbooks und Rollen

Beim Schreiben von Code, unabhängig von der Sprache, stoßen wir auf die Herausforderung, Standards einzuhalten: Leerzeichen, Variablennamen, Kommentare und mehr. Linting ist der Prozess, der es uns ermöglicht, einen anerkannten Standard einzuhalten, sei es automatisch, halbautomatisch oder manuell.

Ansible Navigator ermöglicht es uns, unsere Playbooks zu standardisieren, indem es Linting durchführt:

ansible-navigator --ee=false lint *yml roles

Ich empfehle jedoch, Ansible Navigator mit den folgenden Lintern zu koppeln:

yamllint *yml roles
yamlfmt *yml roles
ansible-lint