Nous allons voir dans cet article comment installer et configurer RedHat Ansible sous CentOS 7. Ansible permet également d’administrer les serveurs Windows. Les modules sont écrits en PowerShell et exécuter au travers Windows Remote Management (WinRM) qu’il faut configurer avant de pouvoir administrer les serveurs Windows…
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 :
- Ansible 2.5.5 (CentOS 7): installation-ansible-sous-centos-7/
- Python 2.7.9+
- Windows Server 2016 (AD) : machine-virtuelle-pixelabs/
Ansible Windows Host
Il existe un script PowerShell fournit par Ansible qui permet de configurer WinRM sur les serveurs Windows rapidement : ansible/scripts/ConfigureRemotingForAnsible.ps1
Le script nécessite minimum Windows PowerShell 3. Vérifiez votre version à l’aide de la commande suivante. Exemple sous Windows Server 2012
PS C:\Users\Administrateur#> $PsVersionTable Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34014 BuildVersion 6.3.9600.16394 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2 PS C:\Users\Administrateur>
Cependant, certains modules Ansible nécessites la version 5. Sous Server 2016, la version 5.1 est disponible par défaut, mais si vous êtes sous Windows Server 2012 R2, télécharger et installer la version 5.1 : Win8.1AndW2K12R2-KB3191564-x64.msu
PS C:\Users\Administrateur#> $PSVersionTable Name Value ---- ----- PSVersion 5.1.14409.1005 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.14409.1005 CLRVersion 4.0.30319.34209 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 PS C:\Users\Administrateur>
Les méthodes d’authentifications possibles avec Ansible :
Option d’authentification | Compte local | Compte Active Directory |
Basic | Oui | Non |
Certificats | Oui | Non |
Kerberos | Non | Oui |
NTLM | Oui | Oui |
CredSSP | Oui | Oui |
Voir le tableau complet ici : #authentication-options
L’authentification CredSSP (Credential Security Support Provider) est un nouveau protocole d’authentification et peut être utilisé pour les comptes locaux et les comptes du domaine Active Directory. Il prend également en charge le cryptage des messages via HTTP.
Remarque : Si vous souhaitez utiliser l’authentification Kerberos avec Ansible, n’oubliez pas de rajouter Ansible sur votre serveur DNS (Recherche directe et inversée). Kerberos nécessite une recherche DNS directe et inversée pour fonctionner correctement.
Install Python2.7.10
La version Python installée par défaut sous CentOS 7 est la 2.7.5. Je n’ai pas réussi à faire fonctionner Ansible/Windows avec cette version en utilisant le protocole d’authentification CredSSP (pas de problème sous Linux, voir le premier chapitre). Il semble qu’il faut la version 2.7.9 et plus.
[root@ansible tmp]# python --version Python 2.7.5 [root@ansible tmp]#
Heureusement, il est possible d’installer plusieurs versions sous Linux, car vous ne pouvez pas désinstaller Python, il fait partie du système. Nous allons installer la version 2.7.10 et configurer la variable $PATH pour indiquer au système la nouvelle version de Python.
Faisons les choses rapidement vous voulez bien :
- Télécharger ce script sur GitHub : F1ashhimself/Python2.7.10
- Le transférer sur votre serveur Ansible : /tmp
- Ajouter les droits d’exécution :
[root@ansible tmp]# chmod 755 install_python2.7.10.sh
J’ai dû renommer le script
- Lancez le script
[root@ansible tmp]# ./install_python2.7.10.sh
Perso à la fin, j’ai dû rebooté le serveur : [root@ansible tmp]# reboot
La commande doit renvoyée la nouvelle version.
[root@ansible tmp]# python --version Python 2.7.10 [root@ansible tmp]#
Si ce n’est pas le cas, si vous avez toujours la même version, pas de panique, il faut juste indiquer au système la nouvelle version. D’ailleurs, elle est bien installée.
Vous pouvez vérifier :
[root@ansible tmp]# python2.7 --version Python 2.7.10 [root@ansible tmp]#
Pour utiliser cette version par défaut, exécuter ces deux commandes l’une après l’autre :
Python2 >> Version 2.7.5
[root@ansible tmp]# alternatives --install /usr/bin/python python /usr/bin/python2 50
Python2.7 >> Version 2.7.10
[root@ansible tmp]# alternatives --install /usr/bin/python python /usr/bin/python2.7 60
Maintenant, sélectionnez la version 2.7.10 :
[root@ansible tmp]# alternatives --config python
Tapez 2 et Entrée :
Vérifiez :
[root@ansible tmp]# python --version Python 2.7.10 [root@ansible tmp]#
Install Packages requirements
Installation des packages nécessaires pour Ansible :
[root@ansible ]# yum -y install groupinstall "development tools"
[root@ansible ]# yum -y install zlib-devel openssl-devel openssl libffi-devel
[root@ansible ]# yum -y update
Install Module Python
Installez les packages Python WinRM et Requests
[root@ansible ]# yum -y install python2-winrm python2-requests
Installez PIP :
[root@ansible ]# yum -y install python2-pip
Installation des modules Python à l’aide de PIP. Module pyOpenSSL (18.0.0)
[root@ansible ]# pip install pyOpenSSL
Module pywinrm :
[root@ansible ]# pip install "pywinrm[credssp]"
Pour vérifier les version installées : pip search « pywinrm[credssp] »
[root@ansible ~]# pip search "pywinrm[credssp]" vcdriver (4.0.0) - A vcenter driver based on pyvmomi, fabric and pywinrm pywinrm (0.3.0) - Python library for Windows Remote Management INSTALLED: 0.3.0 (latest) requests-credssp (1.0.0) - HTTPS CredSSP authentication with the requests library. INSTALLED: 1.0.0 (latest) winrmlib (1.3) - Python library for Windows Remote Management with CredSSP and NTLMv2
Configuration WinRM
Passons maintenant à la configuration de WinRM sur le contrôleur de domaine :
- Télécharger le script sur Github : ansible/scripts/ConfigureRemotingForAnsible.ps1
- Le transférer sur vos serveurs Windows
- Lancez la console Windows PowerShell en tant qu’administrateur
- Autoriser l’exécution des scripts :
# PS C:\Users\Administrateur> cd C:\ansible PS C:\ansible> Set-ExecutionPolicy Unrestricted
- Exécuter le script : en tant qu’administrateur
# PS C:\ansible> dir Répertoire : C:\ansible Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 22/06/2018 18:15 15509 # ConfigureRemotingForAnsible.ps1
# PS C:\ansible> .\ConfigureRemotingForAnsible.ps1 -CertValidityDays 3650 -EnableCredSSP
A la fin, le script doit renvoyer la chaine « Ok ». Désolé j’ai oublié de mettre le résultat, quand je relance le script, il affiche plus rien.
Ne pas oublier : -EnableCredSSP
Remarque : n’oubliez pas de désactiver le pare-feu OU d’autoriser WinRM : Port tcp/5985 = HTTP / Port tcp/5986 = HTTPS
Add Windows Host
Éditer le fichier /etc/ansible/hosts. Ajouter le groupe Windows et l’hôte : [windows]
Remarque : Si vous n’avez pas de serveur DNS, mettez les adresses IP.
[centreon] centreon.pixelabs.local [centos] pixelabs.pixelabs.local [windows] ad-server16.pixelabs.local
Faisons un test.
Remarque : attention les modules ne sont pas les mêmes. Pour Linux = ping. Pour Windows = win_ping
Groupe Centreon Server :
[root@ansible ansible]# ansible centreon -m ping centreon.pixelabs.local | SUCCESS => { "changed": false, "ping": "pong" }
Groupe CentOS Server :
[root@ansible ansible]# ansible centos -m ping pixelabs.pixelabs.local | SUCCESS => { "changed": false, "ping": "pong" }
Groupe Windows Server :
[root@ansible ansible]# ansible windows -m win_ping ad-server16.pixelabs.local | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host ad-server16.pixelabs.local port 22: Connection refused\r\n", "unreachable": true } [root@ansible ansible]#
Il manque les variables d’authentification. Allez dans /etc/ansible
[root@ansible ansible]# mkdir group_vars [root@ansible ansible]# cd group_vars/
Création de fichier windows.yml. Le même nom que le groupe [windows]
[root@ansible group_vars]# nano windows.yml
Ajoutez à l’intérieur :
ansible_user: Administrateur@pixelabs.local ansible_password: P@ssword! ansible_port: 5986 ansible_connection: winrm ansible_winrm_server_cert_validation: ignore ansible_winrm_transport: credssp
- Avec l’éditeur nano :
- Enregistrer : Ctrl+O et Entrée
- Quitter : Ctrl + X
Relancer le ping :
[root@ansible group_vars]# ansible windows -m win_ping ad-server16.pixelabs.local | SUCCESS => { "changed": false, "ping": "pong" } [root@ansible group_vars]#
C’est terminé les amis. Ansible est prêt à faire son job sur le serveur Windows. Je vous laisse découvrir Ansible, explorer et récupérer les modules sur le site Ansible (voir les liens au début de l’article).
Nous verrons dans les prochains articles comment administrer les serveurs Linux/Windows avec Ansible.
Bonne journée et à bientôt.