9 Exemple de Playbooks Ansible pour l’administration Windows

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…

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.

  Maîtrisez le sélecteur Alt + Tab de Windows 10 avec ces astuces

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.

  Comment ouvrir Microsoft Edge à l'aide de l'invite de commande sous Windows 10

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.

  Comment corriger les erreurs d'installation de Windows 10 «Ce qui nécessite votre attention»

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.