Red Hat Ansible permet la configuration et la gestion centralisée des serveurs et également des applications. En clair, lors du déploiement d’un ou plusieurs serveurs, vous devez les configurer, installer les packages nécessaires, mettre à jour une application particulière, supprimer une application…etc. Vous risquez donc d’y passer un bon moment…
Avec Ansible, vous allez réaliser ces tâches répétitives automatiquement d’un seul coup et sur tous les serveurs. C’est cool non ?
Voici ce que vous devez savoir sur Ansible :
- Installation simple et rapide (RPM, APT, PIP, YUM, GIT…)
- Il utilise un langage simple pour gérer les conf : YAML
- Pas d’infrastructure à gérer pour Ansible
- Pas de serveur Central (master) ni d’agent
- Pas besoin d’une grosse machine pour tourner Ansible
- Peut être installé sur tous les systèmes ou presque (Unix, FreeBSD et MacOS)
- Peut être installé sous Windows grâce à Microsoft WSL (Windows Subsystem for Linux)
Ce qu’il vous faut | Les copains d’Ansible : |
Une VM sous Linux avec un interpréteur : Python 2.7+ Une ou plusieurs VM de tests Savoir mettre en place les clés SSH Connaissance langage YAML Python pour les modules | Puppet Chef Vagrant SaltStack Rudder |
Liens Ansible utiles | Ansible Github Repo |
Ansible : ansible.com/ Github Ansible : /ansible Ansible Galaxy : explore#/ Documentation Center : docs.ansible.com/ Guide d’installation : installation_guide/ YAML Syntax : #yaml-syntax Playbooks : playbooks/ Les modules : list_of_all_modules | Ansible Release :ansible/releases Ansible exemple Playbooks : /ansible-examples Playbooks by : snowplow/ansible-playbooks Playbooks by : mgcrea/ansible-web-playbooks Playbooks by : sfromm/ansible-playbooks Playbooks by : nickjj/ansible-playbooks Playbooks by : francisbesset/ansible-playbooks |
Les fichiers de configuration Ansible :
- /etc/ansible/hosts
- /etc/ansible/ansible.cfg
Machines virtuelles nécessaires :
- CentOS 7 : Création de VM sous VirtualBox.
- Installation par défaut version minimale
- Une machine de test Linux : Centreon (CentOS)
Install EPEL-Release
Mettez à jour votre système.
[root@ansible ]# yum -y update
Installez EPEL :
[root@ansible ~]# yum -y install epel-release
C’est pour moi :
[root@ansible ~]# yum -y install nano git htop mlocate wget bind-utils tree
bind-utils : c’est pour avoir la commande nslookup
Install Ansible 2.5.5
Pour chercher un package : ansible
[root@ansible ~]# yum search ansible ... ... epel 12590/12590 ==================================================== N/S matched: ansible ==================================================== ansible-doc.noarch : Documentation for Ansible ansible-inventory-grapher.noarch : Creates graphs representing ansible inventory ansible-lint.noarch : Best practices checker for Ansible ansible-openstack-modules.noarch : Unofficial Ansible modules for managing Openstack ansible-review.noarch : Reviews Ansible playbooks, roles and inventory and suggests improvements python2-ansible-runner.noarch : A tool and python library to interface with Ansible python2-ansible-tower-cli.noarch : A CLI tool for Ansible Tower # ansible.noarch : SSH-based configuration management, deployment, and task execution system kubernetes-ansible.noarch : Playbook and set of roles for seting up a Kubernetes cluster onto machines loopabull.noarch : Event loop driven Ansible playbook execution engine standard-test-roles.noarch : Standard Test Interface Ansible roles Correspondance avec le nom ou le résumé uniquement, utilisez « search all » pour une recherche complète. [root@ansible ~]#
Lancez l’installation à l’aide de la commande suivante :
[root@ansible ~]# yum -y install ansible ... ... ... ========================================================================================================================== Package Architecture Version Dépôt Taille ========================================================================================================================== Installation : ansible noarch 2.5.5-1.el7 epel 9.0 M Installation pour dépendances : PyYAML x86_64 3.10-11.el7 base 153 k libtomcrypt x86_64 1.17-26.el7 extras 224 k libtommath x86_64 0.42.0-6.el7 extras 36 k libyaml x86_64 0.1.4-11.el7_0 base 55 k python-babel noarch 0.9.6-8.el7 base 1.4 M python-backports x86_64 1.0-8.el7 base 5.8 k python-backports-ssl_match_hostname noarch 3.5.0.1-1.el7 base 13 k python-cffi x86_64 1.6.0-5.el7 base 218 k python-enum34 noarch 1.0.4-1.el7 base 52 k python-httplib2 noarch 0.9.2-1.el7 extras 115 k python-idna noarch 2.4-1.el7 base 94 k python-ipaddress noarch 1.0.16-2.el7 base 34 k python-jinja2 noarch 2.7.2-2.el7 base 515 k python-keyczar noarch 0.71c-2.el7 epel 218 k python-markupsafe x86_64 0.11-10.el7 base 25 k python-paramiko noarch 2.1.1-4.el7 extras 268 k python-ply noarch 3.4-11.el7 base 123 k python-pycparser noarch 2.14-1.el7 base 104 k python-setuptools noarch 0.9.8-7.el7 base 397 k python-six noarch 1.9.0-2.el7 base 29 k python2-crypto x86_64 2.6.1-15.el7 extras 477 k python2-cryptography x86_64 1.7.2-2.el7 base 502 k python2-jmespath noarch 0.9.0-3.el7 extras 39 k python2-pyasn1 noarch 0.1.9-7.el7 base 100 k sshpass x86_64 1.06-2.el7 extras 21 k Résumé de la transaction =========================================================================================================================== Installation 1 Paquet (+25 Paquets en dépendance) Taille totale des téléchargements : 14 M Taille d'installation : 68 M Is this ok [y/d/N]: y
Version Ansible
Afficher la version installée :
[root@ansible ~]# ansible --version
[root@ansible ~]# ansible --version ansible 2.5.5 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] [root@ansible ~]#
Version Python : Python2.7.5
[root@ansible ~]# python --version Python 2.7.5 [root@ansible ~]#
Pour afficher les commandes Ansible :
[root@ansible ~]# ansible <tabulation 2x> ansible ansible-console ansible-doc-2.7 ansible-playbook ansible-pull-2.7 ansible-2 ansible-console-2 ansible-galaxy ansible-playbook-2 ansible-vault ansible-2.7 ansible-console-2.7 ansible-galaxy-2 ansible-playbook-2.7 ansible-vault-2 ansible-config ansible-doc ansible-galaxy-2.7 ansible-pull ansible-vault-2.7 ansible-connection ansible-doc-2 ansible-inventory ansible-pull-2 [root@ansible ~]# ansible
Add Linux Host
Naturellement, Ansible ne connait pas les serveurs que vous voulez administrés. Il faut donc renseigner vos hôtes dans le fichier /etc/ansible/hosts. C’est dans ce fichier que vous devez mettre tous vos serveurs (fichier d’inventaire par défaut).
Je souhaite donc administrer mon serveur Centreon (CentOS) avec Ansible.
- Centreon Server : 192.168.1.100
Ouvrir le fichier hosts et ajouter l’adresse de votre hôte :
[root@ansible ~]# nano /etc/ansible/hosts
192.168.1.100
- Avec l’éditeur nano :
- Enregistrer : Ctrl+O et Entrée
- Quitter : Ctrl + X
Maintenant que nous avons ajouté l’hôte, il faut maintenant donner l’autorisation à Ansible d’administrer le serveur.
Configuration SSH
Nous allons donc générer une clé SSH sur le serveur Ansible. Vous connaissez surement cette histoire de clé hein ? Clé privée, clé publique ? Il faut tout un article pour expliquer le mécanisme d’authentification par clé (une autre fois peut-être).
Passons à la pratique :
[root@ansible ~]# ssh-keygen -t rsa -b 2048
[root@ansible ~]# ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #laissez vide <Entrée> Enter passphrase (empty for no passphrase): #laissez vide <Entrée> Enter same passphrase again: #laissez vide <Entrée> Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:wyPIsGjtVP9jMjGr3m3q6JTPunFq2U8NELBs9Hf98/k root@ansible The key's randomart image is: +---[RSA 2048]----+ | o.. | | o o . . | | . = o . . . | | ..+o...o . . | |...oo .+S. o | |. o ..=oo +| | . +o= = . ..| | .oX.*.. .| | +O+*+o E| +----[SHA256]-----+ [root@ansible ~]#
Maintenant que nous avons généré les clés SSH. Il faut copier la clé publique sur le serveur sur lequel vous souhaitez donc déployer une configuration avec Ansible. L’objectif c’est de permettre à Ansible de se connecter sur le serveur automatiquement.
J’ai donc deux machines :
- Ansible Server : 192.168.1.103
- Centreon Server :192.168.1.100
Je vais donc copier la clé publique depuis mon serveur Ansible vers le serveur Centreon.
[root@ansible ~]# ssh-copy-id root@192.168.1.100 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. RSA key fingerprint is SHA256:vL55i7RpHXCUczkiSorPMph8x9MiNb5L4Z8r4ElaCAg. RSA key fingerprint is MD5:42:69:37:89:01:49:ca:12:d6:cb:69:9c:38:b9:7c:06. Are you sure you want to continue connecting (yes/no)?# yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.1.100's password:# mot de passe root de Centreon Server Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.100'" and check to make sure that only the key(s) you wanted were added. [root@ansible ~]#
Je peux maintenant me connecter sur le serveur Centreon depuis le serveur Ansible sans taper le mot de passe :
[root@ansible ~]# ssh root@192.168.1.100 Last login: Fri Jun 22 16:05:06 2018 from 192.168.1.94 [root@centreon ~]# [root@centreon ~]#
[root@centreon ~]# exit logout Connection to 192.168.1.100 closed. [root@ansible ~]#
Ansible Ping Host
Commençons par les choses simples. On peut effectuer un Ping avec Ansible :
[root@ansible ~]# ansible -m ping 192.168.1.100 192.168.1.100 | SUCCESS => { "changed": false, "ping": "pong" } [root@ansible ~]#
192.168.1.100 = Centreon Server
Pour afficher le résultat sur une seule ligne :
[root@ansible ~]# ansible -m ping 192.168.1.100 --one-line 192.168.1.100 | SUCCESS => {"changed": false, "ping": "pong"} [root@ansible ~]#
Ansible Ping Group
Il y a mieux encore. On peut créer des groupes d’hôtes pour faciliter la configuration avec Ansible. Retournez dans le fichier /etc/ansible/hosts :
[root@ansible ~]# nano /etc/ansible/hosts
Voici un exemple :
[Centreon-Server] 192.168.1.100 192.168.1.101 192.168.1.102 [VMware-Server] 192.168.1.103 192.168.1.104 192.168.1.105 ... ...
Vous pouvez maintenant réaliser un Ping sur tous les hôtes d’un groupe :
[root@ansible ~]# ansible -m ping Centreon-Server --one-line 192.168.1.100 | SUCCESS => {"changed": false, "ping": "pong"} 192.168.1.101 | SUCCESS => {"changed": false, "ping": "pong"} 192.168.1.102 | UNREACHABLE!: Failed to connect to the host via ssh: ssh: connect to host 192.168.1.102 port 22: No route to host [root@ansible ~]#
Le dernier c’est normal, j’ai que deux machines.
- Centreon Server : 192.168.1.100
- CentOS Server : 192.168.1.101
Remarque : n’oubliez pas de copier la clé publique sur les nouveaux serveurs.
C’est terminé. Ansible est prêt à faire son job sur les serveurs Linux. Explorez et récupérez les modules sur le site Ansible (voir les liens au début de l’article). Dans le prochain chapitre, nous allons voir comment configurer un hôte Windows avec Ansible en utilisant le protocole CredSSP (Credential Security Support Provider).
Bonne journée et à bientôt.