web-dev-qa-db-fra.com

Modification de la boucle ansible en raison de la dépréciation de la version 2.1

J'exécute un livre de lecture qui a défini plusieurs paquets à installer via apt:

    - name: Install utility packages common to all hosts
      apt:
        name: "{{ item }}"
        state: present
        autoclean: yes
      with_items:
        - aptitude
        - jq
        - curl
        - git-core
        - at
...

Une récente mise à jour ansible sur mon système affiche maintenant ce message concernant le Playbook ci-dessus:

[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via squash_actions is deprecated. Instead of
 using a loop to supply multiple items and specifying `name: {{ item }}`, please use `name: [u'aptitude', 
u'jq', u'curl', u'git-core', u'at', u'heirloom-mailx', u'Sudo-ldap', u'sysstat', u'vim', u'at', u'ntp', 
u'stunnel', u'sysstat', u'arping', u'net-tools', u'lshw', u'screen', u'tmux', u'lsscsi']` and remove the loop. 

Si je comprends bien, Ansible veut maintenant cette liste de paquets comme un tableau qui laisse ceci:

name: [u'aptitude', u'jq', u'curl', u'git-core', u'at','heirloom-mailx', u'Sudo-ldap', u'sysstat', u'vim', u'at', u'ntp',u'stunnel', u'sysstat', u'arping', u'net-tools', u'lshw', u'screen', u'tmux', u'lsscsi']

Y a-t-il un meilleur moyen? On dirait que je vais faire défiler pour toujours dans VIM pour essayer de maintenir cela. Soit ça, soit Word l'enveloppe et traite un paquet de paquets Word-cloud.

12
Server Fault

Vous pouvez coder le tableau dans le style YAML pour le rendre plus lisible:

- name: Install utility packages common to all hosts
  apt:
    name:
      - aptitude
      - jq
      - curl
      - git-core
      - at
    state: present
    autoclean: yes
32
Ignacio Millán

J'ai eu la même question et il semble que chaque ensemble de paquets avec les mêmes états devra être son propre bloc. En regardant la documentation d'Ansible, ils ont un bloc pour chaque état à titre d'exemple. J'ai donc pris cet exemple, découpé mes paquets en fonction de leurs états et suivi l'exemple d'ignacio, et tout a parfaitement fonctionné.

Donc, fondamentalement, cela ressemblerait à ceci

- name: Install packages required for log-deployment
  apt:
    name:
      - gcc
      - python-devel
    state: latest
    autoclean: yes

- name: Install packages required for log-deployment
  apt:
    name:
      - python
      - mariadb
      - mysql-devel
    state: installed

J'espère que cela a du sens et aide!

0
Sikh