Ansible sur Windows
Ansible a été conçu initialement pour gérer des systèmes Linux/Unix via SSH. Cependant, depuis la version 1.7, Ansible supporte également la gestion des serveurs Windows, ce qui en fait un outil véritablement multi-plateforme.
Pourquoi gérer Windows avec Ansible?
- Uniformisation : Utiliser le même outil pour Linux et Windows
- Infrastructure as Code : Appliquer les mêmes principes DevOps à Windows
- Automatisation : Déployer et configurer des serveurs Windows de manière reproductible
- Gestion centralisée : Contrôler l'ensemble de l'infrastructure depuis un point central
Différences fondamentales Linux vs Windows
| Aspect | Linux | Windows |
|---|---|---|
| Protocole de connexion | SSH (port 22) | WinRM (ports 5985/5986) |
| Shell par défaut | Bash | PowerShell |
| Modules | Modules standards | Modules préfixés win_ |
| Authentification | Clés SSH / Password | NTLM, Kerberos, CredSSP, Basic |
| Langage de script | Shell script | PowerShell |
| Gestion des chemins | /chemin/fichier |
C:\chemin\fichier |
Windows Remote Management (WinRM)
Qu'est-ce que WinRM?
WinRM (Windows Remote Management) est l'implémentation Microsoft du protocole WS-Management. C'est le protocole utilisé par Ansible pour communiquer avec les hôtes Windows.
Caractéristiques de WinRM
- Protocole : Basé sur SOAP (Simple Object Access Protocol) sur HTTP/HTTPS
- Ports par défaut :
- HTTP : 5985
- HTTPS : 5986
- Sécurité : Support de plusieurs méthodes d'authentification
Configuration WinRM
Sur l'hôte Windows, WinRM doit être activé et configuré:
- L'activation du service WinRM
- La création d'un listener HTTP/HTTPS
- La configuration du pare-feu Windows
Configuration du contrôleur Ansible
Pour se connecter à un hôte Windows via WinRM, il faut déclarer les variables de connexion dans l'inventaire:
[windows_hosts:vars]
ansible_connection: winrm
ansible_winrm_transport: basic # ou ntlm, kerberos, credssp
ansible_winrm_server_cert_validation: ignore # Pour les certificats auto-signés
ansible_port: 5985 # 5986 pour HTTPS
ansible_user: Administrateur
ansible_password: MotDePasse
Il faut également installer la bibliothèque Python pywinrm sur le contrôleur Ansible:
pip install pywinrm
Modules Ansible pour Windows
Ansible fournit une variété de modules spécifiques pour gérer les hôtes Windows. Ces modules sont préfixés par win_ pour les différencier des modules Linux. Voici une liste non exhaustive des modules couramment utilisés:
Modules de gestion système
win_ping: Test de connectivitéwin_feature: Gestion des rôles et fonctionnalités Windowswin_service: Gestion des serviceswin_reboot: Redémarrage du systèmewin_updates: Gestion des mises à jour Windowswin_hostname: Gestion du nom d'hôte
Modules de gestion de fichiers
win_copy: Copie de fichierswin_file: Gestion de fichiers et répertoireswin_template: Déploiement de templateswin_stat: Informations sur les fichiers
Modules de gestion des utilisateurs
win_user: Gestion des utilisateurs locauxwin_group: Gestion des groupes locauxwin_group_membership: Gestion des membres de groupeswin_domain_user: Gestion des utilisateurs ADwin_domain_group: Gestion des groupes AD
Modules d'exécution
win_shell: Exécution de commandes PowerShellwin_command: Exécution de commandes (sans shell)win_powershell: Exécution de scripts PowerShellwin_psexec: Exécution via PSExec
Modules IIS
win_iis_website: Gestion des sites IISwin_iis_webapppool: Gestion des pools d'applicationswin_iis_webapplication: Gestion des applications webwin_iis_webbinding: Gestion des bindings
Modules d'installation de logiciels
win_package: Installation de packages MSI/EXEwin_chocolatey: Gestion de packages Chocolateywin_feature: Installation de fonctionnalités Windows
Modules de registre
win_regedit: Gestion des clés de registrewin_regmerge: Fusion de fichiers REG
Modules réseau
win_firewall: Gestion du pare-feu Windowswin_firewall_rule: Gestion des règles de pare-feuwin_dns_client: Configuration DNSwin_route: Gestion des routes réseau
Remarque:
- La différence principale entre le module
win_shelletwin_commandest quewin_shellexécute les commandes dans un shell PowerShell, ce qui permet l'utilisation de fonctionnalités spécifiques à PowerShell, tandis quewin_commandexécute les commandes directement sans passer par un shell, ce qui est plus limité mais parfois plus sûr.
Chocolatey : Le gestionnaire de packages pour Windows
Qu'est-ce que Chocolatey?
Chocolatey est un gestionnaire de packages pour Windows, similaire à apt (Debian/Ubuntu) ou yum (RedHat/CentOS). Il permet d'installer, mettre à jour et désinstaller des logiciels en ligne de commande.
Avantages de Chocolatey
- Automatisation : Installation scriptée de logiciels
- Reproductibilité : Même version sur tous les serveurs
- Large catalogue : Plus de 9000 packages disponibles
- Gestion centralisée : Intégration parfaite avec Ansible
Installation via Ansible
- name: Installer Chocolatey
win_chocolatey:
name: chocolatey
state: present
Limitations et considérations
Performances
- WinRM est généralement plus lent que SSH
- Les opérations PowerShell peuvent prendre du temps
- Les mises à jour Windows peuvent nécessiter plusieurs redémarrages
Compatibilité
- Windows Server 2012 et supérieur recommandé
- PowerShell 3.0 minimum requis (5.1+ recommandé)
- .NET Framework 4.0+ requis
Différences de comportement
- Certains modules Linux n'ont pas d'équivalent Windows
- La gestion des permissions est différente (ACL vs chmod)
- Les redémarrages sont plus fréquents sous Windows