wake-up-neo.net

Ansible - Speichern Sie die registrierte Variable in die Datei

Wie würde ich eine registrierte Variable in einer Datei speichern? Ich habe dies aus dem Tutorial genommen :

- hosts: web_servers

  tasks:

     - Shell: /usr/bin/foo
       register: foo_result
       ignore_errors: True

     - Shell: /usr/bin/bar
       when: foo_result.rc == 5

Wie würde ich foo_result variable in einer Datei speichern, z. foo_result.log mit ansible?

28

Sie können das Modul copy mit dem Parameter content= verwenden.

Ich habe genau dieselbe Antwort hier gegeben: Variable in eine Datei in Ansible schreiben

In Ihrem Fall sieht es so aus, als ob diese Variable in eine lokale Protokolldatei geschrieben werden soll. Sie könnten sie mit der local_action-Notation kombinieren:

- local_action: copy content={{ foo_result }} dest=/path/to/destination/file
57

Ich benutze Ansible 1.9.4 und das hat bei mir funktioniert - 

- local_action: copy content="{{ foo_result.stdout }}" dest="/path/to/destination/file"
10
Umesh Tyagi

Eine lokale Aktion wird einmal für jeden Remote-Host (parallel) ausgeführt. Wenn Sie eine eindeutige Datei pro Host wünschen, stellen Sie sicher, dass Sie den Namen inventar_Host als Teil des Dateinamens angeben. 

- local_action: copy content={{ foo_result }} dest=/path/to/destination/{{ inventory_hostname }}file

Wenn Sie stattdessen eine einzige Datei mit allen Host-Informationen wünschen, besteht eine Möglichkeit darin, eine serielle Aufgabe zu haben (nicht parallel anhängen) und dann mit einem Modul an die Datei anzuhängen (lineinfile ist in der Lage oder könnte mit einer Shell pfeifen Befehl)

- hosts: web_servers
  serial: 1
  tasks:
  - local_action: lineinfile line={{ foo_result }} path=/path/to/destination/file

Alternativ können Sie dem Playbook eine zweite Spiel-/Rollen-/Task hinzufügen, die nur für den lokalen Host ausgeführt wird. Greifen Sie dann auf die Variable von jedem der Hosts zu, auf denen der Registrierungsbefehl ausgeführt wurde, innerhalb einer Vorlage. Zugriff auf andere Hosts-Variablen DocsTemplate Module Docs

5
Chad Autry

Besser lesbare Methode, um dies zu erreichen (kein Fan von einzeiligen Aufgaben)

- local_action: 
    module: copy 
    content={{ foo_result }} 
    dest=/path/to/destination/file
1
bottaio
---
- hosts: all
  tasks:
  - name: Gather Version
    debug:
     msg: "The server Operating system is {{ ansible_distribution }} {{ ansible_distribution_major_version }}"
  - name: Write  Version
    local_action: Shell echo "This is  {{ ansible_distribution }} {{ ansible_distribution_major_version }}" >> /tmp/output
1
Mohd Aftab