Aller au contenu principal

Les nouveautés d'Ansible 3.0

· 4 minutes de lecture
Stéphane ROBERT
Consultant DevOps

L'annonce de la version 3.0.0 du package communautaire Ansible marque la fin d'un projet amorcé en 2019. Ce projet visait à modifier comment était livré Ansible.

Historiquement Ansible embarquait le runtime ainsi que tous les plugins et modules dans un seul package. Désormais avec la version 3.0 nous aurons droits à 3 types d'artefacts distincts :

  • Ansible-base - Le runtime Ansible mimimal
  • Les collections Ansible
  • Et enfin le Ansible community package qui intégrera l'installation d'Ansible-base mais aussi les collections et qui se nommera ansible.

Leur versionning vont vivre séparément:

  • Celui d'Ansible-base conservera l'actuelle et donc se nommera ansible-base 2.10 puis 2.11, ...
  • Le package ansible de la communauté Ansible (Ansible Core + Community Collections) adopte le contrôle de version sémantique et donc pour la prochaine est la 3.0.0. En conséquence, le numéro de version de l’ensemble du package ne correspond plus à celui d'Ansible-Base, dont le numéro de version actuel est toujours 2.10 et continuera à évoluer ainsi.

Toutes les 3 semaines une version mineure sera livré et sera nommé 3.1.0, 3.2.0, ...

La prochaine version majeure d’Ansible, la 4.0 est prévue pour mai et devrait contenir ansible-base 2.11. La 5.0 est elle prévue pour novembre et intégrera ansible-base 2.12.

J'espère que vous avez compris :)

Comment Installer Ansible 3.0.0

Si on recherche ansible sur le gestionnaire de package Pypi on voit bien un ansible 3.0.0. Attention si vous avez déjà installé une version antérieure à la 2.10 installée il faudra la désinstaller en premier.

Comment s'y retrouver. Ouvrons un docker et installons ansible classiquement avec pip :

docker run -it ubuntu:20.04 bash
apt update && apt upgrade && apt install python3-pip
pip3 install ansible==3.0.0
Collecting ansible==3.0.0
  Downloading ansible-3.0.0.tar.gz (30.8 MB)
     |████████████████████████████████| 30.8 MB 6.7 MB/s
Collecting ansible-base<2.11,>=2.10.5
  Downloading ansible-base-2.10.6.tar.gz (5.7 MB)
     |████████████████████████████████| 5.7 MB 6.2 MB/s
Collecting PyYAML
  Downloading PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl (662 kB)
     |████████████████████████████████| 662 kB 3.1 MB/s
Collecting cryptography
  Downloading cryptography-3.4.6-cp36-abi3-manylinux2014_x86_64.whl (3.2 MB)
     |████████████████████████████████| 3.2 MB 3.3 MB/s
Collecting jinja2
  Downloading Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
     |████████████████████████████████| 125 kB 5.7 MB/s
Collecting packaging
  Downloading packaging-20.9-py2.py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 7.3 MB/s
Collecting cffi>=1.12
  Downloading cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl (411 kB)
     |████████████████████████████████| 411 kB 4.4 MB/s
Collecting MarkupSafe>=0.23
  Downloading MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl (32 kB)
Collecting pyparsing>=2.0.2
  Downloading pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
     |████████████████████████████████| 67 kB 6.4 MB/s
Collecting pycparser
  Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 6.0 MB/s
Building wheels for collected packages: ansible, ansible-base
  Building wheel for ansible (setup.py) ... -

On voit bien la construction de deux packages: ansible-base et ansible.

Quels sont les modules disponibles ?

Il suffit de lancer la commande ansible-galaxy pour lister les collections installés par défaut :

ansible-galaxy collection list

# /usr/local/lib/python3.8/dist-packages/ansible_collections
Collection                    Version
----------------------------- -------
amazon.aws                    1.3.0
ansible.netcommon             1.5.0
ansible.posix                 1.1.1
ansible.utils                 2.0.0
ansible.windows               1.3.0
arista.eos                    1.3.0
awx.awx                       17.0.1
azure.azcollection            1.4.0
check_point.mgmt              2.0.0
chocolatey.chocolatey         1.0.2
cisco.aci                     2.0.0
cisco.asa                     1.0.4
cisco.intersight              1.0.10
cisco.ios                     1.3.0
cisco.iosxr                   1.2.1
cisco.meraki                  2.2.0
cisco.mso                     1.1.0
cisco.nso                     1.0.3
cisco.nxos                    1.4.0
cisco.ucs                     1.6.0
cloudscale_ch.cloud           2.0.0
community.aws                 1.3.0
community.azure               1.0.0
community.crypto              1.4.0
community.digitalocean        1.0.0
community.docker              1.2.2
community.fortios             1.0.0
community.general             2.0.1
community.google              1.0.0
community.grafana             1.1.0
community.hashi_vault         1.0.0
community.hrobot              1.1.0
community.kubernetes          1.1.1
community.kubevirt            1.0.0
community.libvirt             1.0.0
community.mongodb             1.2.0
community.mysql               1.2.0
community.network             2.0.1
community.okd                 1.0.1
community.postgresql          1.1.1
community.proxysql            1.0.0
community.rabbitmq            1.0.1
community.routeros            1.1.0
community.skydive             1.0.0
community.sops                1.0.4
community.vmware              1.7.0
community.windows             1.2.0
community.zabbix              1.2.0
containers.podman             1.4.1
cyberark.conjur               1.1.0
cyberark.pas                  1.0.5
dellemc.openmanage            3.0.0
dellemc.os10                  1.1.1
dellemc.os6                   1.0.6
dellemc.os9                   1.0.3
f5networks.f5_modules         1.7.1
fortinet.fortimanager         2.0.1
fortinet.fortios              1.1.8
frr.frr                       1.0.3
gluster.gluster               1.0.1
google.cloud                  1.0.2
hetzner.hcloud                1.2.1
ibm.qradar                    1.0.3
infinidat.infinibox           1.2.4
inspur.sm                     1.1.2
junipernetworks.junos         1.3.0
kubernetes.core               1.1.1
mellanox.onyx                 1.0.0
netapp.aws                    20.9.0
netapp.elementsw              20.11.0
netapp.ontap                  21.1.1
netapp_eseries.santricity     1.1.0
netbox.netbox                 2.0.0
ngine_io.cloudstack           2.0.0
ngine_io.exoscale             1.0.0
ngine_io.vultr                1.1.0
openstack.cloud               1.2.1
openvswitch.openvswitch       1.1.0
ovirt.ovirt                   1.3.0
purestorage.flasharray        1.5.1
purestorage.flashblade        1.4.0
sensu.sensu_go                1.8.0
servicenow.servicenow         1.0.4
splunk.es                     1.0.2
t_systems_mms.icinga_director 1.13.0
theforeman.foreman            1.5.1
vyos.vyos                     1.1.1
wti.remote                    1.0.1

Nous voila rassuré tous les modules principaux sont présents. Donc on voit que si on installe la package ansible rien ne change. Mais si on souhaite un environnement miminal rien n'interdit d'installer que le package ansible-base et ensuite d'installer que les collections nécessaires avec la commande ansible-galaxy. De quoi construire des images plus petites et de gérer le versionning plus finement, mais attention aux incompatibilités.

root@7c70dbfa902d:/# ansible --version
ansible 2.10.6
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]
root@7c70dbfa902d:/# ansible-galaxy collection list
root@7c70dbfa902d:/#
root@7c70dbfa902d:/# ansible-galaxy collection install community.general
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Installing 'community.general:2.1.1' to '/root/.ansible/collections/ansible_collections/community/general'
Downloading https://galaxy.ansible.com/download/community-general-2.1.1.tar.gz to /root/.ansible/tmp/ansible-local-409687f1qqwz/tmpal2ty6rt
community.general (2.1.1) was installed successfully

Si vous voulez plus de tutorials Ansible je vous renvoie sur le billet de l'introduction à ansible