web-dev-qa-db-fra.com

Ansible - Enregistrer la variable enregistrée dans un fichier

Comment enregistrer une variable enregistrée dans un fichier? J'ai pris ceci dans le tutorial :

- hosts: web_servers

  tasks:

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

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

Comment enregistrer une variable foo_result dans un fichier, par exemple foo_result.log en utilisant ansible?

28

Vous pouvez utiliser le module copy avec le paramètre content=.

J'ai donné exactement la même réponse ici: Écrire une variable dans un fichier dans Ansible

Dans votre cas, il semble que vous souhaitiez que cette variable soit écrite dans un fichier journal local. Vous pouvez donc la combiner avec la notation local_action:

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

J'utilise Ansible 1.9.4 et voici ce qui a fonctionné pour moi - 

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

Une action locale sera exécutée une fois pour chaque hôte distant (en parallèle). Si vous voulez un fichier unique par hôte, veillez à inclure Inventory_hostname dans le nom du fichier. 

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

Si vous préférez un seul fichier avec toutes les informations de l'hôte, vous pouvez par exemple avoir une tâche série (ne pas ajouter en parallèle), puis ajouter un fichier au fichier avec un module (lineinfile est capable, ou peut diriger avec un shell commander)

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

Alternativement, vous pouvez ajouter une deuxième pièce/rôle/tâche au livre de lecture qui ne fonctionne que sur l'hôte local. Accédez ensuite à la variable à partir de chacun des hôtes où la commande d’enregistrement a été exécutée dans un modèle Accès aux autres variables hôtes DocsModèle Docs du module

5
Chad Autry
---
- 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