Installation Ansible sous CentOS 7

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 utilesAnsible Github Repo
Ansibleansible.com/
Github Ansible : /ansible
Ansible Galaxy : explore#/
Documentation Center : docs.ansible.com/
Guide d’installationinstallation_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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *