Bonjour,
j’essaie de me servir d’ansible comme solution d’inventaire sur un petit parc de serveurs, et notamment pour recenser les versions installées de tels ou tels paquets.
Pour ça il y a le module package_facts
qui est très pratique, mais je n’arrive pas à m’en servir pour les paquets dont le nom comporte le cractère .
(comme php7.4).
Mon playbook est comme ceci:
- hosts: ct
vars:
- debug: 1
tasks:
- name: "Gather packages informations"
package_facts:
manager: apt
- name: Print
debug:
var: ansible_facts.packages
when: debug == 1
- name: "Check apache version"
debug:
msg: "Apache {{ ansible_facts.packages.apache2[0].version }} installé"
when: "'apache2' in ansible_facts.packages"
- name: "Check PHP version"
debug:
msg: "PHP version {{ ansible_facts.packages.php7.4[0].version }} installé"
when: "'php7.4' in ansible_facts.packages"
Mais si pour la tâche pour les versions apache, ça fonctionne bien, pour celle des versions php7.4, j’ai cette erreur, qui semble logique:
FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'php7'}
J’ai tenté de remplacer la ligne
msg: "PHP version {{ ansible_facts.packages.php7.4[0].version }} installé"
par
msg: "PHP version {{ ansible_facts.packages.['php7.4'][0].version }} installé"
et d’autres combinaisons du même genre, comme msg: "PHP version {{ ansible_facts.packages.['php7.4'][0].version }} installé"
, mais l’erreur devient:
FAILED! => {"msg": "template error while templating string: expected name or number. String: PHP version {{ ansible_facts.packages.['php7.4'][0].version }} installé"}
La variable
"ansible_facts.packages": {
[...]
"php7.4": [
{
"arch": "all",
"category": "php",
"name": "php7.4",
"origin": "deb.sury.org",
"source": "apt",
"version": "7.4.27-1+0~20211220.57+debian11~1.gbp832572"
}
],
[...]
}
}
J’ai visiblement un soucis pour parcourir efficacement ce genre de structure mêlant des listes et des dictionnaires, si un ninja d’ansible ou python peut m’expliquer le topo, je lui en serais très reconnaissant