Presentation Du Produit Ansible
Presentation Du Produit Ansible
Presentation Du Produit Ansible
Ansible
Objectifs de certification
RHCE EX294 (RHEL8)
Si vous étudiez pour une certification, on répond ici à l’objectif suivant :
Présentation du produit
Ansible
En guise d’introduction, on décrira dans ce document le projet Ansible, ses cas d’usage, ses
composants, son principe de fonctionnement, son installation et les différents binaires qui
l’accompagnent.
Après des généealités, le document décrit la terminologie et les composants Ansible. Il indique les
procédures d’installation de Ansible sur une machine de contrôle Red Hat, CentOS, Fedora, Debian,
Ubuntu, via PIP ou encore sous Windows WSL.
On tentera ici de comprendre de manière sommaire les composants de base d’Ansible tels que les
connexions selon les cibles, les inventaires, les modules, les collections, le mode ad-hoc, les
variables, les “Facts”, les jeux, les playbooks ou livres de jeux, les fichiers de configuration YAML et
INI, les sorties JSON et les modèles Jinja2, les rôles, Ansible Tower, l’idempotence.
1. Projet Ansible
1.1. Présentation générale
Ansible est un outil open-source de provisionnement de logiciels, de gestion des configurations et
de déploiement d’applications qui permet de faire de l’infrastructure un code. Il fonctionne sur de
nombreux systèmes de type Unix, et peut configurer aussi bien des systèmes de type Unix que
Microsoft Windows. Il comprend son propre langage déclaratif pour décrire la configuration du
système. Ansible est sans agent, se connectant temporairement à distance via SSH ou Windows
Remote Management (permettant l’exécution à distance de PowerShell) pour effectuer ses tâches.
Ansible gère les différents noeuds avec un accès à distance natif (tels que les protocoles SSH ou
Remote PowerShell ou encore des APIs natives). Il ne nécessite l’installation d’aucun logiciel
supplémentaire à distance. Il offre des capacités de parallélisation, collecte de métadonnées et
gestion des états. Cet aspect de conception “sans agent” installé sur le périphérique est important
car il réduit les besoins d’infrastructure pour démarrer une gestion. Les modules fonctionnent
grâce à JSON et à la sortie standard et peuvent être écrits dans n’importe quel langage de
programmation.Le système utilise notamment YAML pour exprimer des descriptions réutilisables
de systèmes, il fournit des sorties en JSON, il traite les variables grâce à des modèles Jinja2.
Le logiciel Ansible a été conçu par un ancien employé Red Hat, Michael DeHaan, également auteur
de l’application de serveur de “provisionning” Cobbler et co-auteur du framework Func pour
l’administration à distance. Le code source du logiciel est sous licence GNU General Public v3.0.
Red Hat a racheté la société Ansible, Inc. en octobre 2015. 1
La version 2.10 d’Ansible va fondamentalement changer la portée des plugins inclus dans le dépôt
ansible/ansible , en déplaçant une grande partie des plugins dans des dépôts de “collection” plus
Aussi depuis la version 2.10. la version majeure est maintenue pendant un cycle de publication.
Lorsque la version suivante sort (par exemple, 2.11), la version plus ancienne (2.10 dans cet
exemple) n’est plus maintenue.
Les autres modules et plugins ont été déplacés dans diverses “collections”.
Le paquet publié d’Ansible 2.10 va intégrer ansible-base et les diverses collections communautaires
qui faisaient auparavant partie d’ ansible/ansible .
Le minimum par nature. Les systèmes de gestion ne devraient pas imposer des
dépendances supplémentaires sur l’environnement.
La cohérence. cf. notion de test unitaire (procédure permettant de vérifier le bon
fonctionnement d’une partie précise d’un logiciel ou d’une portion d’un programme).
La sécurité. Ansible ne déploie pas des agents sur les noeuds. Un protocole de transport
comme OpenSSH ou HTTPS est seulement nécessaire pour commencer une gestion.
La fiabilité. Lorsqu’il est écrit soigneusement, un livre de jeu Ansible peut être
idempotent afin d’éviter des effets secondaires inattendus sur les systèmes gérés.
Une courbe d’apprentissage faible. Les livres de jeux Ansible utilisent un langage
simple et descriptif basé sur YAML et les modèles Jinja2.
2. Automation d’infrastructures
Image not found or type unknown
Ansible s’interface avec du matériel, du logiciel ou des solutions d’un grand nombre de
fournisseurs du domaine des infrastructures comme :
Il répond aux besoins les Admin système / Cloud, aux Net Ops, aux admins de stockage pour une
automation des serveurs, du réseau et du stockage.
Image not found or type unknown
2.2. Virtualisation
VMware
Red Hat Enterprise Virtualization (RHEV)
Libvirt
Xenserver
Vagrant
2.5. Containers
Ansible Container
Docker
Linux Containers (LXC)
2.6. Cloud
Amazon Web Services (AWS)
Microsoft Azure
Cloudstack
OpenStack
Digital Ocean
Google Cloud Platform
Linode
ProfitBricks
Rackspace
3.1. Provisioning
3.6. Orchestration
4. Automation Réseau
Si vous êtes responsable d’un réseau d’entreprise, vous savez probablement que de nombreuses
opérations manuelles sont effectuées via l’interface de ligne de commande (CLI). Il n’est pas
surprenant que le principal défi que rencontrent des utilisateurs en matière de réseau consiste à
améliorer leur agilité, et cela est resté vrai au cours des deux dernières années.5
Arista (EOS),
Cisco (IOS, IOS XR, NX-OS),
Juniper (JunOS),
Open vSwitch
VyOS
Image not found or type unknown
5. Automatiser et coder
l’infrastructure
Nous allons progressivement apprendre que manipuler Ansible consiste à écrire du texte géré sous
forme de code informatique. L’ambition est donc de “coder l’infrastructure”. Alors comment coder
l’infrastructure ? D’un point de vue historique, pour un parc de machines Linux, on commencera
avec du Bash, ensuite probablement du Perl, et sans doute du Python. Or le personnel
d’infrastructure s’il a choisi cette voie dans les métiers de l’informatique dipose de peu
d’appétence pour une pratique de “développeur” d’autant plus que l’apprentissage d’un langage
de programmation classique exigera une longue courbe d’apprentissage pour cetains profils.
Le seul écueil est de connaître les solutions à gérer à travers cet outil de telle sorte qu’une maîtrise
d’une solution Ansible passe aussi par une bonne maîtrise de ce qui est déployé par Ansible.
Il faut alors voir Ansible comme une surcouche sans état (mis en intermédiaire qui fonctionne de
manière très simple) qui intègre d’autres solutions ou s’intègre à d’autres facilement. Ansible
Tower et son fork OpenSource AWX renforcent cette capacité de manière crédible en ajoutant des
fonctions de gestion des utilisateurs, du code et des secrets.
6. Composants Ansible
Image not found or type unknown
Fonctionnement de Ansible
En vue de contrôler des noeuds distants, des utilisateurs lancent des “playbooks” (livres de jeu) à
partir d’un noeud de contrôle grâce à Ansible Engine.
des modules
des plugins
un API
un inventaire (inventory)
des collections
Ansible Engine se connecte et se pratique de manière différente sur les hôtes terminaux
(Linux/Unix et Windows) des périphériques du réseau. Hôtes terminaux et périphériques du réseau
sont des cibles dont les missions et la gestion sont bien différentes.
Le chapitre Installation Ansible indique de manière plus détaillée l’installation de Ansible sur la
machine de contrôle.
Depuis sa version 1.7, Ansible peut également gérer les noeuds Windows. Dans ce cas, on utilise
PowerShell à distance de manière native au lieu de SSH.
Fonctionnement Ansible
ssh-agent bash
ssh-add ~/.ssh/id_rsa
Notez que ssh-agent s’utilise avec des clés avec des passphrase.
On trouvera sous les liens un document de formation détaillé sur l’usage du protocole avec
OpenSSH (Linux/Windows) et d’autres sur la configuration de Cisco IOS pour supporter des
connexions SSH.
6.5. L’inventaire
Pour démarrer un gestion Ansible, vous avez besoin d’un inventaire Ansible.
Inventory (inventaire)
Par défaut, Ansible représente les machines qu’il gère à l’aide d’un fichier INI très simple qui place
toutes les machines gérées dans des groupes de votre choix. On peut le représenter dans d’autres
formats comme YAML.
Pour ajouter de nouvelles machines, aucun serveur de signature supplémentaire n’est nécessaire,
alors que NTP ou DNS sont critiques au moment des authentifications.
S’il existe une autre source de confiance dans votre infrastructure, Ansible peut également y
ajouter dynamiquement des éléments tels que des informations d’inventaire, de groupe et
variables à partir de sources telles que EC2, Rackspace, OpenStack, vSphere, etc.
Image not found or type unknown
CMDB
[webservers]
www1.example.com
www2.example.com
[dbservers]
db0.example.com
db1.example.com
Une fois que les hôtes d’inventaire sont répertoriés, des variables “d’inventaire”, c’est-à-dire
portant sur les cibles de gestion, peuvent leur être attribuées dans des fichiers texte simples (dans
un sous-répertoire appelé ‘ group_vars/ ’ ou ‘ host_vars/ ’) ou directement dans le fichier d’inventaire.
Les Fichiers d’inventaire sont développés plus loin dans le support de formation. Le détail
concernant l’inventaire ne sont pas indispensable pour commencer. Toutefois, veuillez retenir que
les commandes ansible , ansible-playbook et ansible-inventory , qui permettent d’exploiter Ansible,
exigent toujours un inventaire défini.
6.6. Modules
Image not found or type unknown
Modules et Tasks
Ansible fonctionne en se connectant aux noeuds à gérer et en leur envoyant des petits
programmes, appelés “modules Ansible”. Ces programmes sont écrits pour être des modèles de
ressources de l’état souhaité du système. Ansible exécute ensuite ces modules (via SSH par
défaut) grâce au protocole JSON sur la sortie standard et les supprime lorsque l’action est
terminée.
La bibliothèque de modules peut résider sur n’importe quelle machine et sans aucun serveur
central, démon ou base de données. En général, l’administrateur travaille avec son programme de
terminal favori, un éditeur de texte et probablement un système de gestion de version (SCM) come
Git pour suivre les modifications apportées à son contenu.
Rien n’interdit d’écrire son propre module. Ces modules peuvent contrôler les ressources comme
des services, des paquets ou des fichiers (n’importe quoi en réalité), ou encore exécuter des
commandes système. 1
Le document de formation prévoit une initiation à l’usage des modules en mode ad-hoc et dans les
livres de jeu.
A partir de la version 2.10, les modules Ansible font partie d’espace nommé comme des collections
et se référence selon l’espace nommé qui leur sont réservés.
6.7. Plugins
Les Plugins apportent des fonctionnalités complémentaires à Ansible.
Plugins
On peut connaître tout type de plugins (qui sont des sortes de “modules” spécialisés) :
Dès qu’une instance est disponible, on peut lui parler immédiatement, sans aucune configuration
supplémentaire, ici sur une instance Red Hat :
Un accès à des modules de ressources basés sur des états, ainsi qu’à des commandes “raw”
(brutes) est disponible. Ces modules sont assez faciles à écrire. Par ailleurs, Ansible est livré avec
énormément de modules déjà développés de telle sorte qu’un bonne partie du travail est déjà
réalisée.
Playbooks
Les livres de jeu (playbooks) sont écrits selon un langage d’automatisation simple et puissant. Les
livres de jeu peuvent orchestrer avec précision plusieurs parties d’une topologie d’infrastructure,
avec un contrôle très détaillé du nombre de machines à traiter à la fois.
L’approche d’Ansible en matière d’orchestration est une approche simple et précise : le code
d’automatisation devrait être pérenne et il devrait y avoir très peu de choses à retenir sur la
syntaxe ou des fonctionnalités spéciales.
Les livres de jeu sont écrits en langage YAML, Ain’t Markup Language. YAML expose un minimum
de syntaxe et propose un modèle de configuration ou de processus plutôt qu’un langage de script
ou de programmation.
Chaque livres de jeu est composé de une ou plusieurs “séances de jeu (plays)” exposés sous
forme d’une liste. Un “livre de jeu” organise des tâches en jeux. Mais il de bonne pratique de
l’organiser en “roles”. Un “role” ajoute un niveau d’abstraction dans l’exécution des tâches d’un
livre de jeu.
Un jeu est une analogie sportive qui définit un état ou un modèle et qui se “rejoue” de différentes
manières à d’autres moments.
Voici trois exemples de livres de jeu. Le premier exemple montre un livre de jeu avec un seul jeu
nommé “DEPLOY VLANS” qui s’applique sur les hôtes “access” d’un inventaire. Celui-ci est
constitué d’une seule tâche “ENSURE VLANS EXIST”
---
hosts: access
connection: network_cli
gather_facts: no
tasks:
nxos_vlan:
vlan_id: 100
admin_state: up
name: WEB
Le second exemple est un livre de jeu qui lance un seul jeu constitué de cinq tâches.
---
hosts: webservers
become: True
become_method: sudo
tasks:
apt:
name: nginx
update_cache: yes
copy:
src: files/nginx.conf
dest: /etc/nginx/sites-available/default
file:
dest: /etc/nginx/sites-enabled/default
src: /etc/nginx/sites-available/default
state: link
template:
src: templates/index.html.j2
dest: /usr/share/nginx/html/index.html
mode: 0644
service:
name: nginx
state: restarted
Enfin, voici un livre de jeu qui lance un seul jeu constiué d’un nombre indéterminé de tâches
appelées via des rôles : apache, mysql, php, …
---
hosts: webserver
vars_files:
- vars/main.yml
roles:
- apache
- mysql
- php
- php-mysql
- composer
- drush
- drupal
Les rôles (roles) permettent de charger automatiquement des vars_files, des tasks, des handlers
sur base d’une structure de fichier définie. Les rôles sont intéressants pour leur aspect “ré-
utilisable”.
Par contre, peu d’éléments permettent d’évaluer la qualité de ces propositions de code “ré-
utilisable”.
7.4. Ansible Tower
Ansible Tower est un API, un service Web et une console Web conçue pour rendre Ansible
utilisable pour les équipes informatiques avec différents profils. Ansible Tower offre une solution
complète de gestion des contrôles d’acccès basée sur des rôles. C’est une console centrale de
gestion des tâches d’automatisation.
Ansible Tower est un produit commercial pris en charge par Red Hat, Inc. Red Hat a annoncé à
l’AnsibleFest 2016 que Ansible Tower passait en Open Source. En 2017, Tower est publié en
opensouce sous le nom de AWX. Semaphore est une alternative open source à Ansible Tower, écrit
en Go.3
agentless
Ansible Tower
Roles
Voir AWX.
8. Installation Ansible
8.1. Introduction
On se fonde ici sur la page officielle Ansible Installation Guide. Pour commencer une automation et
une gestion avec Ansible, vous avez principalement besoin :
Pour la suite des exercices, vous aurez aussi besoin de cibles à gérer. Le document Monter un lab
Linux pour Ansible peut vous aider à configurer un lab Ansible avec des machines virtuelles.
Les fichiers RPMs pour RHEL 7 et RHEL 8 sont disponibles dans le repository Ansible Engine.
cd ./ansible
make rpm
Les paquets Debian/Ubuntu packages peut être construits par les sources :
make deb
Note : Cette méthode a été vérifiée avec des sources Trusty sources en Debian Jessie et Stretch
mais pourrait ne pas être supportée dans les versions plus récentes.
8.5. Centos : Installation via PIP
sudo yum -y remove ansible
Il n’est pas possible de faire fonctionner Ansible sur un hôte Windows alors qu’il peut le gérer. Mais
Ansible peut être exécuté sous Windows Subsystem for Linux (WSL). Notons que WSL n’est pas
supporté par Microsoft ou Ansible; il ne devrait pas être utilisé sur des systèmes en production.
Pour installer Ansible sur WSL, il est nécessaire d’exécuter ces commandes dans un terminal bash :
Pour exécuter Ansible à partir des sources plutôt qu’une version pour WSL, il faut désinstaller la
version présente de pip et puis cloner le repo git.
pip uninstall ansible -y
source ansible/hacking/env-setup
#!/bin/bash
if [[ -f /etc/redhat-release ]] ; then
fi
if [[ -f /etc/lsb-release ]] ; then
fi
activate-global-python-argcomplete
EOF
bash -x ./setup-python-argcomplete.sh
#!/bin/bash
if [[ ! $UID == 0 ]] ; then echo "you must be root" ; exit ; fi
if [[ -f /etc/redhat-release ]] ; then
fi
if [[ -f /etc/lsb-release ]] ; then
apt-get update
fi
export PATH="$HOME/.local/bin:$PATH"
activate-global-python-argcomplete
ansible --version
EOF
bash -x ./setup-ansible.sh
docker_user="ubuntu"
sudo yum -y install curl python3-pip || sudo apt update && sudo apt -y install curl python3-pip
Le projet des images Ansible Cytopia offre des configuration prêtes à l’emploi. Deux exemples
simples :
9. Exécutables Ansible
Ansible vient avec plusieurs programmes. Cela peut sembler absurde mais le fait de prendre
connaissance d’emblée de l’environnement complet peut favoriser l’apprentissage. Nous
poursuivons toujours un objectif d’un examen de certification sur Ansible : Maîtrise des composants
de base d’Ansible.
Programme Description
On ne manquera pas de citer l’outil ansible-lint qui valide des livres de jeu Ansible sur le plan
syntaxique.
ansible --version
La commande ansible attend toujours un hôte ou un groupe d’hôtes d’inventaire comme argument.
Ici une option -m désigne l’usage du module ping .
Le binaire ansible comprend de nombreuses options qui seront abordées dans le chapitre sur les
exécutions ad hoc :
ansible --help
[-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]
[--ssh-common-args SSH_COMMON_ARGS]
[--sftp-extra-args SFTP_EXTRA_ARGS]
[--scp-extra-args SCP_EXTRA_ARGS]
[--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]
pattern
positional arguments:
optional arguments:
--ask-vault-password, --ask-vault-pass
anything else
--playbook-dir BASEDIR
etc.
execute it
(default=N/A)
-C, --check don't make any changes; instead, try to predict some
-D, --diff when changing (small) files and templates, show the
gins/modules)
module arguments
(default=5)
connection debugging)
--become-method BECOME_METHOD
--become-user BECOME_USER
-K, --ask-become-pass
-b, --become run operations with become (does not imply password
prompting)
Connection Options:
control as whom and how to connect to hosts
--scp-extra-args SCP_EXTRA_ARGS
--sftp-extra-args SFTP_EXTRA_ARGS
-l)
--ssh-common-args SSH_COMMON_ARGS
ProxyCommand)
--ssh-extra-args SSH_EXTRA_ARGS
(default=10)
ansible-config dump
Par défaut ansible-doc effectue sa recherche dans les plugins de type “module”. Ici, pour obtenir la
liste des modules documentés :
ansible-doc -t connection -l
ansible-doc yum
ansible-doc yum -s
2. https://github.com/ansible-collections/overview ↩ ↩2
3. https://fr.wikipedia.org/wiki/Ansible_(logiciel). ↩ ↩2
Révision #1
Créé 3 octobre 2021 21:03:53 par garfi
Mis à jour 3 octobre 2021 21:05:29 par garfi