9 Ejemplo de Playbooks de Ansible para la administración de Windows

Le mostraré varias operaciones que un administrador puede realizar en un sistema remoto de Windows usando ansible-playbook.

Ansible es una de las herramientas DevOps más utilizadas en el mercado actual. Proporciona un montón de módulos de Windows que se utilizan para configurar y administrar el servidor de Windows. Supongo que ya tiene instalado Ansible en Windows desde donde desea administrar los servidores de Windows.

Las siguientes son algunas de las tareas más utilizadas que realizan los administradores de Windows a diario. Te sorprenderá ver lo fácil que es administrar Windows usando Ansible.

La dirección IP de mi máquina controladora de Windows Ansible es 192.168.0.106 y la dirección IP de mi sistema Windows remoto es 192.168.0.102. Antes de comenzar, asegúrese de ejecutar un módulo win_ping para verificar si puede conectarse al servidor remoto de Windows o no.

[email protected] ~
$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Mi conexión a un host remoto es exitosa.

Entonces, comencemos con Ansible Playbooks…

Copiando documentos

win_copy es un módulo ansible que copia un archivo del servidor local a un host de Windows remoto. Usaré este módulo para copiar un solo PDF.

Use el siguiente código YAML, proporcione las rutas de origen y destino.

[email protected] ~
$ vi copy.yml
---

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Ejecute el libro de jugadas ansible para 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

El archivo se ha copiado correctamente en la ubicación de destino en un sistema Windows remoto.

Instalar/Desinstalar MSI

Para instalar una aplicación usando el archivo MSI, necesita usar win_get_url para mencionar la ruta del archivo MSI para descargar y luego usar el módulo win_package para instalarlo. El estado presente significa que el MSI se instalará en la máquina y la aplicación se encuentra en el estado actual.

Aquí, estoy instalando Apache.

Código YAML a utilizar:

[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

Ejecute ansible-playbook para instalar usando 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

Ahora, vaya al sistema de Windows y verifique si la aplicación Apache se instaló correctamente.

C:Userskirukiru.es>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

También puede instalar aplicaciones usando MSI con argumentos. A continuación se muestra el mismo ejemplo que el anterior, pero en lugar de un estado, estamos usando un argumento de instalación para instalar apache.

  Cómo obtener la puntuación del índice de experiencia de Windows en Windows 10

Código YAML a utilizar:

---

- 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

Para desinstalar una aplicación usando el archivo MSI, necesita usar el módulo win_package. El estado ausente significa que la aplicación se desinstalará utilizando el archivo MSI.

Aquí, estoy desinstalando 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

Ejecute ansible-playbook para desinstalar usando 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

Ahora, si verifico la versión de apache, obtendré el siguiente resultado a medida que se desinstaló la aplicación.

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.

Desinstalar software (.EXE)

También puede desinstalar el software con el archivo .exe usando la identificación del producto de ese software.

[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

Ejecute ansible-playbook para desinstalar 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

Detener/Iniciar/Reiniciar Servicios de Windows

El módulo ansible win_service se utiliza para iniciar, detener o reiniciar un servicio. Aquí, le mostraré cómo detener el servicio tomcat.

Debe mencionar el nombre del servicio en el archivo YAML y configurar el estado para que se detenga.

[email protected] ~
$ vi service.yml
---
- hosts: win 

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Ejecute ansible-playbook para detener el servicio 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 verifica el servicio tomcat en el sistema de Windows, ahora está en estado detenido.

Puede definir el estado en iniciado, reiniciado o en pausa para cambiar el estado del servicio.

Recopilación de hechos

Con el módulo ansible win_disk_facts, puede recuperar toda la información del disco del host de destino.

[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'

Ejecute ansible-playbook para obtener la información del disco.

[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

Con el módulo ansible win_command, puede ejecutar comandos en el host remoto y obtener información de la CPU, detalles del dispositivo y mucho más.

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 }}"

Ejecute ansible-playbook para obtener información del sistema remoto.

[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

Ejecución de comandos

Independientemente de los comandos que ejecute en una ventana, se pueden ejecutar a través del módulo ansible win_command. Solo necesita especificar el comando en su archivo YAML. Aquí, solo estoy creando un directorio.

[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

Ejecute ansible-playbook para realizar la operación 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 de entorno

Un sistema de Windows tiene múltiples variables de entorno, por ejemplo, JAVA_HOME. Con el módulo ansible win_environment, puede agregar o modificar variables de entorno en un sistema Windows. En este ejemplo, estoy agregando una nueva variable a la lista de variables de entorno de 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

Ejecute ansible-playbook para agregar la variable de entorno en una máquina remota con Windows.

[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

Vaya a la ventana de variables de entorno; verá que la nueva variable que acaba de agregar está presente aquí.

  Cómo vaciar su DNS en Windows 10

Agregar/Editar registro

El módulo ansible win_regedit se usa para agregar o editar detalles del registro en una máquina remota con Windows. Debe proporcionar la ruta del registro y el contenido que se agregará/actualizará. Aquí estoy creando una nueva entrada de registro kirukiru.es dentro de la ruta HKLM:SOFTWARE y luego agregando nombre y datos a este registro.

[email protected] ~
$ vi registry.yml
---

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREkirukiru.es

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREkirukiru.es

      name: Geek

      data: Flare

Ejecute ansible-playbook para agregar el registro.

[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 va al Editor del Registro en el sistema remoto, puede ver que este registro se ha agregado correctamente con los parámetros Nombre y Datos.

  Cómo ver el historial del Portapapeles en Windows 11

Eliminar registro

El módulo ansible win_eventlog se usa para agregar, borrar o eliminar registros de eventos de Windows del sistema de Windows.

Vaya a Windows Powershell y enumere los registros de eventos presentes en la máquina remota de Windows.

PS C:Userskirukiru.es> 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

Ahora, mostraré cómo eliminar registros de todas las fuentes para Internet Explorer.

[email protected] ~
$ vi log.yml
---
- hosts: win 
  tasks:
   - name: Remove Internet Explorer Logs
     win_eventlog:
      name: Internet Explorer
      state: absent

Ejecute ansible-playbook para eliminar Internet Explorer de la máquina remota de Windows.

[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

Ahora, si vuelve a enumerar los registros de eventos, verá que se han eliminado los registros de Internet Explorer.

PS C:Userskirukiru.es> 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

Entonces, eso fue todo sobre los libros de jugadas de Ansible, que se pueden usar para la administración remota de Windows. Continúe y pruebe estos libros de jugadas. También puedes probar otros Módulos de Windows Ansible disponible.