web-dev-qa-db-fra.com

Boucle possible à travers les variables de groupe dans le modèle

Je me bats avec un motif tirant des variables d'inventaire dans les modèles Ansible, aidez-moi. :)

J'installe un serveur de surveillance et je veux pouvoir provisionner automatiquement les serveurs à l'aide d'Ansible. Je me bats avec des boucles dans le modèle pour me permettre cela.

Ma soluition semi-professionnelle jusqu'à présent est dans le playbook qui appelle la tâche de modèle que j'ai:

monitoringserver.yml

 vars:
       servers_to_monitor:
         - {cname: web1, ip_address: 192.168.33.111}
         - {cname: web2, ip_address: 192.168.33.112}
         - {cname: db1, ip_address: 192.168.33.211}
         - {cname: db2, ip_address: 192.168.33.212}

template.yml

all_hosts += [
           {% for Host in servers_to_monitor %}
                   "{{ Host.cname }}{{ Host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
           {% endfor %}
] 

Mais ce n'est pas idéal car je ne peux pas définir une adresse IP différente pour différents serveurs à surveiller. Comment les autres ont-ils fait cela? Je suis sûr que cela doit être trivial, mais mon cerveau a du mal avec la syntaxe.

Merci

Alan

edit: Pour clarifier le modèle résultant ressemble à ceci:

all_hosts += [
                        "web1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
                        "web2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
                        "db1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
                        "db2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
]

Ce que je voudrais, c'est que les valeurs web1/web2/db1/db2 soient différentes selon que j'utilise un fichier d'inventaire de production ou un fichier d'inventaire de développement.

18
Alan Hollis

Idéalement, vous utiliseriez différents fichiers d'inventaire pour la production et la préparation, ce qui vous permettrait de conserver les mêmes {{ inventory_hostname }} valeur, mais ciblez différentes machines.

Vous pouvez également parcourir différents groupes ...

hôtes:

[web]
web1
web2

[db]
db1
db2

playbook:

- name: play that sets a group to loop over
  vars:
    servers_to_monitor: "{{ groups['db'] }}"

  tasks:
    - template:
      src: set-vars.j2
      dest: set-vars.js

modèle:

all_hosts += [
{% for Host in servers_to_monitor %}
  "{{ hostvars[Host].inventory_hostname }}{{ hostvars[Host].ansible_default_ipv4.address }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
{% endfor %}
] 
33
Conrado