Erreur 'loop' lors de l'exécution d'un playbook Ansible

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.


You'll only receive email when TheSubmarine publishes a new post

More from TheSubmarine