Je vais vous montrer plusieurs opérations qu’un administrateur peut effectuer sur un système Windows distant à l’aide d’ansible-playbook.
Ansible est l’un des outils DevOps les plus utilisés sur le marché aujourd’hui. Il fournit un tas de modules Windows qui sont utilisés pour configurer et gérer le serveur Windows. Je suppose que Ansible est déjà installé sur Windows à partir duquel vous souhaitez gérer les serveurs Windows.
Voici quelques-unes des tâches couramment utilisées par les administrateurs Windows au quotidien. Vous serez étonné de voir à quel point il est facile d’administrer Windows à l’aide d’Ansible.
L’adresse IP de la machine de mon contrôleur Windows Ansible est 192.168.0.106 et l’adresse IP de mon système Windows distant est 192.168.0.102. Avant de commencer, assurez-vous d’exécuter un module win_ping pour vérifier si vous pouvez ou non vous connecter au serveur distant Windows.
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Ma connexion à un hôte distant est réussie.
Alors, commençons avec Ansible Playbooks…
Table des matières
Copie de fichiers
win_copy est un module ansible qui copie un fichier du serveur local vers un hôte Windows distant. Je vais utiliser ce module pour copier un seul PDF.
Utilisez le code YAML ci-dessous, donnez les chemins source et destination.
[email protected] ~ $ vi copy.yml --- - hosts: win tasks: - name: Copy File win_copy: src: C:output.pdf dest: C:ansible_examples remote_src: yes
Exécutez le ansible-playbook pour win_copy.
[email protected] ~ $ ansible-playbook copy.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Copy File] ***************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Le fichier a été copié avec succès à l’emplacement de destination sur un système Windows distant.
Installer/Désinstaller MSI
Pour installer une application à l’aide du fichier MSI, il faut utiliser win_get_url pour mentionner le chemin du fichier MSI à télécharger puis utiliser le module win_package pour l’installer. L’état présent signifie que le MSI sera installé sur la machine et que l’application est dans l’état actuel.
Ici, j’installe Apache.
Code YAML à utiliser :
[email protected] ~ $ vi msi.yml --- - name: Installing Apache MSI hosts: win tasks: - name: Download the Apache installer win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi - name: Install MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi state: present
Exécutez ansible-playbook pour l’installer à l’aide de MSI.
[email protected] ~ $ ansible-playbook msi.yml PLAY [Installing Apache MSI] ***************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Download the Apache installer] ********************************************************************************************************* changed: [192.168.0.102] TASK [Install MSI] *************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Maintenant, allez dans le système Windows et vérifiez si l’application apache a été installée avec succès.
C:Userstoptips.fr>cd C:Program Files (x86)Apache Software FoundationApache2.2bin C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v Server version: Apache/2.2.25 (Win32) Server built: Jul 10 2013 01:52:12
Vous pouvez également installer des applications à l’aide de MSI avec des arguments. Vous trouverez ci-dessous le même exemple que ci-dessus, mais au lieu d’un état, nous utilisons un argument d’installation pour installer apache.
Code YAML à utiliser :
--- - name: Installing Apache MSI hosts: win tasks: - name: Download the Apache installer win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi - name: Install MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi arguments: - /install - /passive - /norestart
Pour désinstaller une application à l’aide du fichier MSI, vous devez utiliser le module win_package. L’état absent signifie que l’application sera désinstallée à l’aide du fichier MSI.
Ici, je désinstalle Apache.
[email protected] ~ $ vi uninstall_msi.yml --- - name: UnInstalling Apache MSI hosts: win tasks: - name: UnInstall MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi state: absent
Exécutez ansible-playbook pour désinstaller à l’aide de MSI.
[email protected] ~ $ ansible-playbook uninstall_msi.yml PLAY [UnInstalling Apache MSI] ***************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [UnInstall MSI] ************************************************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Maintenant, si je vérifie la version apache, j’obtiendrai la sortie ci-dessous lorsque l’application a été désinstallée.
C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v 'httpd' is not recognized as an internal or external command, operable program or batch file.
Désinstaller le logiciel (.EXE)
Vous pouvez également désinstaller un logiciel avec un fichier .exe en utilisant l’identifiant de produit de ce logiciel.
[email protected] ~ $ vi uninstall.yml --- - hosts: win tasks: - name: Uninstall 7-Zip from the exe win_package: path: C:Program Files7-ZipUninstall.exe product_id: 7-Zip arguments: /S state: absent
Exécutez le ansible-playbook pour désinstaller 7-Zip.
[email protected] ~ $ ansible-playbook uninstall.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Uninstall 7-Zip from the exe] *********************************************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP ************************************************************************************************************************************************************************************* 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Arrêter/Démarrer/Redémarrer les services Windows
Le module ansible win_service est utilisé pour démarrer, arrêter ou redémarrer un service. Ici, je vais vous montrer comment arrêter le service Tomcat.
Vous devez mentionner le nom du service dans le fichier YAML et définir l’état sur stop.
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
Exécutez ansible-playbook pour arrêter le service tomcat.
[email protected] ~ $ ansible-playbook service.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Stop service Tomcat] **************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Si vous vérifiez le service Tomcat sur le système Windows, il est maintenant à l’état arrêté.
Vous pouvez définir l’état sur démarré ou redémarré ou en pause pour modifier l’état du service.
Rassembler des faits
En utilisant le module ansible win_disk_facts, vous pouvez récupérer toutes les informations de disque de l’hôte cible.
[email protected] ~ $ vi disk.yml --- - hosts: win tasks: - name: Get disk facts win_disk_facts: - name: Output first disk size debug: var: ansible_facts.disks[0].size - name: Convert first system disk into various formats debug: msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}' vars: # Get first system disk disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}' # Show disk size in Gibibytes disksize_gib_human: '{{ disk.size|filesizeformat(true) }}' disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'
Exécutez ansible-playbook pour obtenir les informations sur le disque.
[email protected] ~ $ ansible-playbook disk.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Get disk facts] ************************************************************************************************************************ ok: [192.168.0.102] TASK [Output first disk size] **************************************************************************************************************** ok: [192.168.0.102] => { "ansible_facts.disks[0].size": "1000204886016" } TASK [Convert first system disk into various formats] **************************************************************************************** ok: [192.168.0.102] => { "msg": "932 GiB vs 931.5 GiB" } PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
À l’aide du module ansible win_command, vous pouvez exécuter des commandes sur l’hôte distant et obtenir des informations sur le processeur, les détails du périphérique et bien plus encore.
wdzwd[email protected] ~ $ vi check.yml --- - hosts: win tasks: - name: Get disk facts win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status register: usage - debug: msg="{{ usage.stdout }}"
Exécutez ansible-playbook pour obtenir des informations sur le système distant.
[email protected] ~ $ ansible-playbook check.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Get facts] ************************************************************************************************************************ changed: [192.168.0.102] TASK [debug] ********************************************************************************************************************************* ok: [192.168.0.102] => { "msg": "Caption DeviceID MaxClockSpeed Name NumberOfCores Status rrnIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK rrnrrn" } PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Exécuter des commandes
Quelles que soient les commandes que vous exécutez sur une fenêtre, elles peuvent être exécutées via le module ansible win_command. Il vous suffit de spécifier la commande dans votre fichier YAML. Ici, je crée juste un répertoire.
[email protected] ~ $ vi commands.yml --- - hosts: win tasks: - name: run an executable using win_command win_command: whoami.exe - name: run a cmd command win_command: cmd.exe /c mkdir C:test
Exécutez le ansible-playbook pour effectuer l’opération win_command.
[email protected] ~ $ ansible-playbook commands.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [run an executable using win_command] *************************************************************************************************** changed: [192.168.0.102] TASK [run a cmd command] ********************************************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Variables d’environnement
Un système Windows a plusieurs variables d’environnement, par exemple, JAVA_HOME. À l’aide du module ansible win_environment, vous pouvez ajouter ou modifier des variables d’environnement sur un système Windows. Dans cet exemple, j’ajoute une nouvelle variable à la liste des variables d’environnement Windows.
[email protected] ~ $ vi env.yml --- - hosts: win tasks: - name: Set an environment variable for all users win_environment: state: present name: NewVariable value: New Value level: machine
Exécutez ansible-playbook pour ajouter la variable d’environnement sur une machine Windows distante.
[email protected] ~ $ ansible-playbook env.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Set an environment variable for all users] ********************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Accédez à la fenêtre des variables d’environnement ; vous verrez que la nouvelle variable que vous venez d’ajouter est présente ici.
Ajouter/modifier le registre
Le module ansible win_regedit est utilisé pour ajouter ou modifier les détails du registre sur une machine Windows distante. Vous devez donner le chemin du registre et le contenu à ajouter/mettre à jour. Ici, je crée une nouvelle entrée de registre toptips.fr dans le chemin HKLM:SOFTWARE, puis j’ajoute le nom et les données à ce registre.
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREtoptips.fr - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREtoptips.fr name: Geek data: Flare
Exécutez le ansible-playbook pour ajouter le registre.
[email protected] ~ $ ansible-playbook registry.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Creating a registry] ******************************************************************************************************************* changed: [192.168.0.102] TASK [Modifying a registry, adding name and data] ******************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Si vous accédez à l’Éditeur du Registre sur le système distant, vous pouvez voir que ce registre a été ajouté avec succès avec les paramètres Nom et Données.
Supprimer le journal
Le module ansible win_eventlog est utilisé pour ajouter, effacer ou supprimer les journaux d’événements Windows du système Windows.
Accédez à Windows Powershell et répertoriez les journaux d’événements présents sur la machine Windows distante.
PS C:Userstoptips.fr> Get-EventLog -List Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 33,549 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 512 7 OverwriteOlder 20 Internet Explorer 20,480 0 OverwriteAsNeeded 0 Key Management Service 128 0 OverwriteAsNeeded 190 OAlerts Security 20,480 0 OverwriteAsNeeded 44,828 System 15,360 0 OverwriteAsNeeded 3,662 Windows PowerShell
Maintenant, je vais montrer comment supprimer les journaux de toutes les sources pour Internet Explorer.
[email protected] ~ $ vi log.yml --- - hosts: win tasks: - name: Remove Internet Explorer Logs win_eventlog: name: Internet Explorer state: absent
Exécutez ansible-playbook pour supprimer Internet Explorer de la machine Windows distante.
[email protected] ~ $ ansible-playbook log.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Remove Internet Explorer Logs] ********************************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP ************************************************************************************************************************************************************************************* 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Maintenant, si vous listez à nouveau les EventLogs, vous verrez que les journaux d’Internet Explorer ont été supprimés.
PS C:Userstoptips.fr> Get-EventLog -List Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 33,549 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 20,480 0 OverwriteAsNeeded 0 Key Management Service 128 0 OverwriteAsNeeded 190 OAlerts Security 20,480 0 OverwriteAsNeeded 44,835 System 15,360 0 OverwriteAsNeeded 56 Windows PowerShell
Il s’agissait donc de playbooks Ansible, qui peuvent être utilisés pour l’administration Windows à distance. Allez-y et essayez ces playbooks. Vous pouvez également essayer d’autres Modules Ansible Windows disponible.