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 Windows
  • win_service : Gestion des services
  • win_reboot : Redémarrage du système
  • win_updates : Gestion des mises à jour Windows
  • win_hostname : Gestion du nom d'hôte

Modules de gestion de fichiers

  • win_copy : Copie de fichiers
  • win_file : Gestion de fichiers et répertoires
  • win_template : Déploiement de templates
  • win_stat : Informations sur les fichiers

Modules de gestion des utilisateurs

  • win_user : Gestion des utilisateurs locaux
  • win_group : Gestion des groupes locaux
  • win_group_membership : Gestion des membres de groupes
  • win_domain_user : Gestion des utilisateurs AD
  • win_domain_group : Gestion des groupes AD

Modules d'exécution

  • win_shell : Exécution de commandes PowerShell
  • win_command : Exécution de commandes (sans shell)
  • win_powershell : Exécution de scripts PowerShell
  • win_psexec : Exécution via PSExec

Modules IIS

  • win_iis_website : Gestion des sites IIS
  • win_iis_webapppool : Gestion des pools d'applications
  • win_iis_webapplication : Gestion des applications web
  • win_iis_webbinding : Gestion des bindings

Modules d'installation de logiciels

  • win_package : Installation de packages MSI/EXE
  • win_chocolatey : Gestion de packages Chocolatey
  • win_feature : Installation de fonctionnalités Windows

Modules de registre

  • win_regedit : Gestion des clés de registre
  • win_regmerge : Fusion de fichiers REG

Modules réseau

  • win_firewall : Gestion du pare-feu Windows
  • win_firewall_rule : Gestion des règles de pare-feu
  • win_dns_client : Configuration DNS
  • win_route : Gestion des routes réseau

Remarque:

  • La différence principale entre le module win_shell et win_command est que win_shell exécute les commandes dans un shell PowerShell, ce qui permet l'utilisation de fonctionnalités spécifiques à PowerShell, tandis que win_command exé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