Erreur 'loop' lors de l'exécution d'un playbook Ansible
June 8, 2020•220 words
ERROR! The field 'loop' is supposed to be a string type, however the incoming data structure is a <class 'ansible.parsing.yaml.objects.AnsibleSequence'>
Cette erreur est dûe à une vieille version d'Ansible (< 2.5). Le playbook utilise un mot clé d'Ansible dont les paramètres n'existent que dans une version plus récente. Par exemple, un playbook destiné à une version 20.04 d'Ubuntu mais exécutée dans une Ubuntu 16.04 peut faire surgir l'erreur.
Pour contourner le souci, 2 solutions.
1. Utilisation d'un autre mot-clé
On peut utiliser le mot clé with_items
. Il faudra remplacer quelque chose qui ressemble à ceci :
tasks:
- name: Install Prerequisites
apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
loop: [ 'aptitude' ]
Par ceci :
tasks:
- name: Install Prerequisites
apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
with_items: [ 'aptitude' ]
2. Installer une version plus récente d'Ansible via pip
Pour désinstaller la version d'Ansible issues des paquets d'Ubuntu :
sudo apt remove --purge ansible
sudo autoremove
Pour installer une version plus récente d'Ansible :
sudo apt install python3-pip
pip3 install ansible
Pour vérifier la version d'Ansible :
ansible --version
L'exemple ci-dessus devient :
tasks:
- name: Install Prerequisites
apt:
name: [ 'aptitude' ]
update_cache: yes
state: latest
Moralité : toujours utiliser la version pip d'Ansible.