IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Ansible : Itération dans un template sur un autre groupe de l'inventaire.


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut Ansible : Itération dans un template sur un autre groupe de l'inventaire.
    Hello,

    Imaginons que j'ai deux groupes dans mon inventaire : Groupe1 et Groupe2.

    J'applique un rôle au groupe1. Dans ce rôle, j'ai un template qui doit lister les adresses IP des machines du groupe 2.

    J'ai voulu faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     {% for host in groups['Groupe2'] %}"{{ hostvars[host]['ansible_all_ipv4_addresses'][0] }}{% endfor %}

    Quand j'ai voulu lancer mon playbook, j'ai obtenu cette erreur suivante :
    FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'ansible_all_ipv4_addresses'"}
    Ma question est la suivante : Est-il possible de faire de itérations sur des machines d'un autre groupe de l'inventaire et si oui, comment fait on ?

    D'avance, je vous remercie !
    Bonne soirée à tous!

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 362
    Par défaut
    Bonjour,

    En fait ton souci est de récupérer les "facts" d'un autre groupe, ce que Ansible ne fait pas de lui même, mais on peut lui demander de le faire via une tache setup depuis localhost en effectuant une délégation au groupe qui nous intéresse...

    Un exemple de playbook sera plus parlant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    - name: "Partie pour récupérer les facts du groupe2 depuis localhost"
      hosts: localhost
      any_errors_fatal: yes
     
      tasks:
      - setup:
        delegate_to: "{{item}}"
        delegate_facts: True
        with_items: "{{groups.Groupe2}}"
     
    - name: "Partie des taches à dérouler par le groupe1"
      hosts: Groupe1
     
      tasks:
      - debug: msg="{% for host in groups['Groupe2'] %} {{ hostvars[host]['ansible_all_ipv4_addresses'][0] }} {% endfor %}"

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut
    Merci pour ta réponse !

    Je ne comprend néanmoins pas comment je peux intégrer ton code dans mon template qui est inclus dans mon rôle (je débute dans Ansible).

    Par contre, j'ai oublié de préciser que dans mon template, il y a des éléments à récupérer dans les facts du groupe1 (le hostname) et les valeurs des adresses IP du groupe2.

    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    En fait ton souci est de récupérer les "facts" d'un autre groupe, ce que Ansible ne fait pas de lui même, mais on peut lui demander de le faire via une tache setup depuis localhost en effectuant une délégation au groupe qui nous intéresse...

    Un exemple de playbook sera plus parlant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    - name: "Partie pour récupérer les facts du groupe2 depuis localhost"
      hosts: localhost
      any_errors_fatal: yes
     
      tasks:
      - setup:
        delegate_to: "{{item}}"
        delegate_facts: True
        with_items: "{{groups.Groupe2}}"
     
    - name: "Partie des taches à dérouler par le groupe1"
      hosts: Groupe1
     
      tasks:
      - debug: msg="{% for host in groups['Groupe2'] %} {{ hostvars[host]['ansible_all_ipv4_addresses'][0] }} {% endfor %}"

    Est ce que ce genre de manipulation est possible ? Si oui, comment l'intégrer dans mon template inclus dans mon rôle ?

    Merci d'avance !
    Cordialement

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 362
    Par défaut
    J'ai du mal à comprendre pleinement ton besoin.

    A quoi ressemble ton role et comment l'appelles tu ?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut
    Bonjour, désolé pour le temps de réponse !

    Mon inventaire ressemble à cela :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [groupe1]
    machine1
    machine2
     
    [groupe2]
    machine
    machine4
    Dans mon role, j'ai un template de fichier de configuration qui, entre autre, récupère des informations, tels que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [...]
    NomMachine:: "{{inventory_hostname}}"
    [...]
    AdresseIp:: "{{ansible_all_ipv4_addresses[0]}}"
    [...]
    AdresseIPServer:: [{% for host in groups['groupe2'] %}"{{ hostvars[host]['ansible_all_ipv4_addresses'][0] }}",{% endfor %} ""]
    Le champs AdresseIPServer doit récupérer les adresses IP des machines contenues par le groupe2.

    Ensuite, le playbook est de cette forme là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    - name: "Install des composants pour le groupe1"
      hosts: groupe1
      gather_facts: yes
      roles:
        - role: "role"

    Citation Envoyé par disedorgue Voir le message
    J'ai du mal à comprendre pleinement ton besoin.

    A quoi ressemble ton role et comment l'appelles tu ?

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 362
    Par défaut
    Ok, et si tu rajoutes les premières ligne que je t'ai donné, qu'est-ce que ça donne ?

    ton playbook ressemblerait à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    - name: "Partie pour récupérer les facts du groupe2 depuis localhost"
      hosts: localhost
      any_errors_fatal: yes
     
      tasks:
      - setup:
        delegate_to: "{{item}}"
        delegate_facts: True
        with_items: "{{groups.groupe2}}"
     
    - name: "Install des composants pour le groupe1"
      hosts: groupe1
      gather_facts: yes
      roles:
        - role: "role"

Discussions similaires

  1. [XL-2007] Rechercher l'occurrence d'un mot situé dans un tableau sur une autre feuille (VBA).
    Par tontonTom dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/02/2015, 21h35
  2. Binder dans un template sur l'index de colone
    Par obarator dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 26/02/2014, 08h47
  3. Binder dans un template sur l'index d'un item d'une liste
    Par Harry_polin dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 26/01/2012, 13h41
  4. Réponses: 13
    Dernier message: 31/01/2010, 10h58
  5. Appel d'une fonction dans une iframe sur un autre domaine
    Par morikann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2007, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo