Je vais vous montrer plusieurs opérations qu'un administrateur peut effectuer sur un système Windows distant en utilisant 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 tu as déjà Ansible installé sur Windows d'où vous souhaitez gérer les serveurs Windows.
Voici quelques-unes des tâches couramment utilisées par les administrateurs Windows sur une base quotidienne. Vous serez étonné de voir à quel point il est facile d'administrer Windows à l'aide d'Ansible.
L'adresse IP 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 win_ping
module pour vérifier si vous pouvez vous connecter au serveur distant Windows ou non.
Geekflare@MSEDGEWIN10 ~
$ 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…
Copying Files
win_copy est un module ansible qui copie un fichier du serveur local vers un hôte Windows distant. J'utiliserai ce module pour copier un seul PDF.
Utilisez le code YAML ci-dessous, indiquez les chemins source et destination.
Geekflare@MSEDGEWIN10 ~
$ 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 livre de jeu ansible pour win_copy.
Geekflare@MSEDGEWIN10 ~
$ 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.
Install/UnInstall MSI
Pour installer une application à l'aide du fichier MSI, vous devez utiliser win_get_url pour mentionner le chemin du fichier MSI à télécharger puis utiliser le win_package module 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:
Geekflare@MSEDGEWIN10 ~
$ 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_examples\httpd-2.2.25-win32-x86-no_ssl.msi
- name: Install MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
state: present
Exécutez le livre de jeu ansible pour installer à l'aide de MSI.
Geekflare@MSEDGEWIN10 ~
$ 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:\Users\geekflare>cd C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>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. Voici 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_examples\httpd-2.2.25-win32-x86-no_ssl.msi
- name: Install MSI
win_package:
path: C:\ansible_examples\httpd-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 win_package module. L'état absent signifie que l'application sera désinstallée à l'aide du fichier MSI.
Ici, je désinstalle Apache.
Geekflare@MSEDGEWIN10 ~
$ vi uninstall_msi.yml
---
- name: UnInstalling Apache MSI
hosts: win
tasks:
- name: UnInstall MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
state: absent
Exécutez le playbook ansible pour désinstaller à l'aide de MSI.
Geekflare@MSEDGEWIN10 ~
$ 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 d'Apache, j'obtiendrai la sortie ci-dessous lorsque l'application sera désinstallée.
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v 'httpd' is not recognized as an internal or external command,
operable program or batch file.
Uninstall Software (.EXE)
Vous pouvez également désinstaller un logiciel avec un fichier .exe en utilisant l'ID de produit de ce logiciel.
Geekflare@MSEDGEWIN10 ~
$ vi uninstall.yml
---
- hosts: win
tasks:
- name: Uninstall 7-Zip from the exe
win_package:
path: C:\Program Files\7-Zip\Uninstall.exe
product_id: 7-Zip
arguments: /S
state: absent
Exécutez le livre de jeu ansible pour désinstaller 7-Zip.
Geekflare@MSEDGEWIN10 ~
$ 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
Stop/Start/Restart Windows Services
win_service Le module ansible 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 pour arrêter.
Geekflare@MSEDGEWIN10 ~
$ vi service.yml
---
- hosts: win
tasks:
- name: Stop service Tomcat
win_service:
name: Tomcat8
state: stopped
Exécutez le livre de lecture ansible pour arrêter le service tomcat.
Geekflare@MSEDGEWIN10 ~
$ 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 mis en pause pour modifier l'état du service.
Gathering Facts
En utilisant win_disk_facts ansible, vous pouvez récupérer toutes les informations de disque de l'hôte cible.
Geekflare@MSEDGEWIN10 ~
$ 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 le livre de lecture ansible pour obtenir les informations sur le disque.
Geekflare@MSEDGEWIN10 ~
$ 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
En utilisant victoire_commande ansible, vous pouvez exécuter des commandes sur l'hôte distant et obtenir des informations sur le processeur, des détails sur le périphérique et bien plus encore.
Geekflare@MSEDGEWIN10 ~
$ 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 le livre de lecture ansible pour obtenir des informations sur le système distant.
Geekflare@MSEDGEWIN10 ~
$ 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 \r\r\nIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK \r\r\n\r\r\n"
}
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0
Running Commands
Quelles que soient les commandes que vous exécutez sur une fenêtre, elles peuvent être exécutées via l'ansible victoire_commande module. Il vous suffit de spécifier la commande dans votre fichier YAML. Ici, je crée juste un répertoire.
Geekflare@MSEDGEWIN10 ~
$ 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 ansible-playbook pour effectuer l'opération win_command.
Geekflare@MSEDGEWIN10 ~
$ 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
Environment Variables
Un système Windows a plusieurs variables d'environnement, par exemple, JAVA_HOME. En utilisant le win_environment ansible, 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.
Geekflare@MSEDGEWIN10 ~
$ 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 l'ansible-playbook pour ajouter la variable d'environnement sur une machine Windows distante.
Geekflare@MSEDGEWIN10 ~
$ 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.
Add/Edit Registry
win_regedit Le module ansible est utilisé pour ajouter ou modifier les détails du registre sur une machine Windows distante. Vous devez indiquer le chemin du registre et le contenu à ajouter / mettre à jour. Ici, je crée une nouvelle entrée de registre GeekFlare à l'intérieur du chemin HKLM: \ SOFTWARE, puis j'ajoute un nom et des données à ce registre.
Geekflare@MSEDGEWIN10 ~
$ vi registry.yml
---
- hosts: win
tasks:
- name: Creating a registry
win_regedit:
path: HKLM:\SOFTWARE\GeekFlare
- name: Modifying a registry, adding name and data
win_regedit:
path: HKLM:\SOFTWARE\GeekFlare
name: Geek
data: Flare
Exécutez le livre de jeu ansible pour ajouter le registre.
Geekflare@MSEDGEWIN10 ~
$ 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.
Delete Log
win_eventlog Le module ansible 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 EventLogs présents sur la machine Windows distante.
PS C:\Users\Geekflare> 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.
Geekflare@MSEDGEWIN10 ~
$ vi log.yml
---
- hosts: win
tasks:
- name: Remove Internet Explorer Logs
win_eventlog:
name: Internet Explorer
state: absent
Exécutez le playbook ansible pour supprimer Internet Explorer de la machine Windows distante.
Geekflare@MSEDGEWIN10 ~
$ 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 répertoriez à nouveau les EventLogs, vous verrez que les journaux d'Internet Explorer ont été supprimés.
PS C:\Users\Geekflare> 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 des 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 Windows Ansible disponible.