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 :

  • 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

Les copains d’Ansible :

  • Puppet
  • Chef
  • Vagrant
  • SaltStack
  • Rudder

Liens Ansible utiles :

Ansible Github Repo :


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 cherche 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.

    Ping Host via Ansible

    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.

     
    Besoin d’aide ? des questions ?

    Venez sur le forum
    logo Forum Pixelabs
    ***********
    La rédaction de cette documentation demande beaucoup de temps, de motivation, mais surtout beaucoup de café 🙂

    Vous aimez pixelabs ?

    Offrez moi un petit café en cliquant sur la tasse ci-dessous.
    pixelans_donation
    Merci !