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.
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 %}
]