Aller au contenu

Les nouveautés d'Ansible 3.0

logo ansible

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.

Ansible community package

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 :

Terminal window
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 :

/usr/local/lib/python3.8/dist-packages/ansible_collections
ansible-galaxy collection list
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.

Terminal window
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