Le mostraré varias operaciones que un administrador puede realizar en un sistema windows remoto utilizando ansible-playbook.
Ansible es una de las herramientas DevOps más utilizadas actualmente en el mercado. Proporciona un montón de módulos de Windows que se utilizan para configurar y administrar el servidor Windows. Asumo que ya tiene Ansible instalado en Windows desde donde quiere gestionar los servidores Windows.
Las siguientes son algunas de las tareas más comunes que realizan los administradores de Windows a diario. Se sorprenderá al ver lo fácil que es administrar Windows utilizando Ansible.
La dirección IP de mi máquina controladora de Windows con Ansible es 192.168.0.106, y la dirección IP de mi sistema Windows remoto es 192.168.0.102. Antes de empezar, asegúrese de ejecutar un módulo win_ping
para comprobar si puede conectarse al servidor remoto Windows o no.
Geekflare@MSEDGEWIN10 ~
ansible win -m win_ping
192.168.0.102 | ÉXITO => {
"cambiado": false
"ping": "pong"
}
Mi conexión a un host remoto tiene éxito.
Así que, empecemos con Ansible Playbooks…
Copiando archivos
win_copy es un módulo ansible que copia un archivo del servidor local a un host Windows remoto. Utilizaré este módulo para copiar un único PDF.
Utilice el siguiente código YAML, indique las rutas de origen y destino.
Geekflare@MSEDGEWIN10 ~
vi copy.yml
---
- hosts: win
tareas:
- nombre: Copiar archivo
win_copy:
src: C:\output.pdf
dest: C:\ansible_examples\
remote_src: yes
Ejecute el ansible-playbook para win_copy.
Geekflare@MSEDGEWIN10 ~
ansible-playbook copia.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Copy File] *****************************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
omitido=0 rescatado=0 ignorado=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 utilizando el archivo MSI, debe utilizar win_get_url para mencionar la ruta del archivo MSI a descargar y, a continuación, utilizar el módulo win_package para instalarlo. El estado presente significa que el MSI se instalará en la máquina y que la aplicación se encuentra en el estado presente.
Aquí estoy instalando Apache.
Código YAML a utilizar:
Geekflare@MSEDGEWIN10 ~
$ vi msi.yml
---
- nombre: Instalando Apache MSI
hosts: win
tareas:
- nombre: Descargar el instalador de Apache
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
- nombre: Instalar MSI
win_paquete
ruta: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
estado: presente
Ejecute el ansible-playbook para instalar mediante MSI.
Geekflare@MSEDGEWIN10 ~
ansible-playbook msi.yml
PLAY [Installing Apache MSI] *****************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TAREA [Descargar el instalador de Apache] *********************************************************************************************************
cambiado: [192.168.0.102]
TASK [Install MSI] ***************************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescatado=0 ignorado=0
Ahora, vaya al sistema windows y compruebe si la aplicación apache se ha instalado correctamente.
C:\Users\geekflare>cd C:\Archivos de Programa (x86)\Apache Software Foundation\Apache2.2\bin
C:\Archivos de programa (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v
Versión del servidor: Apache/2.2.25 (Win32)
Servidor construido: Jul 10 2013 01:52:12
También puede instalar aplicaciones utilizando MSI con argumentos. A continuación se muestra el mismo ejemplo anterior, pero en lugar de un estado, estamos utilizando un argumento install para instalar apache.
Código YAML a utilizar:
---
- nombre: Instalar Apache MSI
hosts: win
tareas:
- nombre: Descargar el instalador de Apache
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
- nombre: Instalar MSI
win_package:
ruta: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
argumentos:
- /instalar
- /pasivo
- /norestart
Para desinstalar una aplicación utilizando el archivo MSI, es necesario utilizar el módulo win_package. El estado ausente significa que la aplicación se desinstalará utilizando el archivo MSI.
Aquí estoy desinstalando Apache.
Geekflare@MSEDGEWIN10 ~
vi desinstalar_msi.yml
---
- nombre: Desinstalar Apache MSI
hosts: win
tareas:
- nombre: Desinstalar MSI
win_package:
ruta: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
estado: ausente
Ejecute el ansible-playbook para desinstalar mediante MSI.
Geekflare@MSEDGEWIN10 ~
ansible-playbook uninstall_msi.yml
PLAY [UnInstalling Apache MSI] *****************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [UnInstall MSI] *************************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescatado=0 ignorado=0
Ahora, si compruebo la versión de apache, obtendré la siguiente salida ya que la aplicación se ha desinstalado.
C:\Archivos de programa (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v 'httpd' no se reconoce como un comando interno o externo,
programa operable o archivo por lotes.
Desinstalar software (.EXE)
También puede desinstalar software con archivo .exe utilizando el id de producto de dicho software.
Geekflare@MSEDGEWIN10 ~
vi uninstall.yml
---
- hosts: win
tareas:
- nombre: Desinstalar 7-Zip del exe
win_package:
ruta: C:\Archivos de programa\7-Zip\Uninstall.exe
product_id: 7-Zip
argumentos: /S
estado: ausente
Ejecute el ansible-playbook para desinstalar 7-Zip.
Geekflare@MSEDGEWIN10 ~
ansible-playbook uninstall.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]
TASK [Uninstall 7-Zip from the exe] ***********************************************************************************************************************************************************
cambiado: [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 los servicios de Windows
el módulo ansiblewin_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 establecer el estado en stop.
Geekflare@MSEDGEWIN10 ~
vi service.yml
---
- hosts: win
tareas:
- nombre: Detener servicio Tomcat
win_service:
nombre: Tomcat8
estado: detenido
Ejecute el ansible-playbook para detener el servicio tomcat.
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook service.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Stop service Tomcat] ****************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescatado=0 ignorado=0
Si comprueba el servicio tomcat en el sistema windows, ahora está en estado detenido.
Puede definir el estado a iniciado o reiniciado o pausado para cambiar el estado del servicio.
Recopilación de datos
Utilizando el módulo ansible win_disk_facts, puede recuperar toda la información del disco del host de destino.
Geekflare@MSEDGEWIN10 ~
vi disk.yml
---
- hosts: win
tareas:
- nombre: Obtener datos del disco
win_disk_facts:
- name: Obtener primer tamaño de disco
depurar:
var: ansible_facts.discos<x>[0]</x>.tamaño
- name: Convierte el primer disco del sistema en varios formatos
depurar:
msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
vars:
# Obtener el primer disco del sistema
disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}'
# Mostrar el tamaño del disco en Gibibytes
disksize_gib_human: '{{ disk.size|filesizeformat(true) }}'
disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'
Ejecute el ansible-playbook para obtener la información del disco.
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook disco.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Get disk facts] ************************************************************************************************************************
ok: [192.168.0.102]
TAREA [Obtener primer tamaño de disco] ****************************************************************************************************************
ok: [192.168.0.102] => {
"ansible_facts.disks<x>[0]</x>.size": "1000204886016"
}
TAREA [Convertir el primer disco del sistema en varios formatos] ****************************************************************************************
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 rescatado=0 ignorado=0
Utilizando 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.
Geekflare@MSEDGEWIN10 ~
vi check.yml
---
- hosts: win
tasks:
- nombre: Obtener datos del disco
win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status
registro: uso
- debug: msg="{{ usage.stdout }}"
Ejecute el ansible-playbook para obtener información del sistema remoto.
Geekflare@MSEDGEWIN10 ~
ansible-playbook check.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Get facts] ************************************************************************************************************************
cambiado: [192.168.0.102]
TASK [debug] *********************************************************************************************************************************
ok: [192.168.0.102] => {
"msg": "Caption DeviceID MaxClockSpeed
Nombre
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\n"
}
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
omitido=0 rescatado=0
ignorado=0
Comandos en ejecución
Sean cuales sean los comandos que ejecute en una ventana, pueden ejecutarse a través del módulo win_command de ansible. Sólo tiene que especificar el comando en su archivo YAML. Aquí, sólo estoy creando un directorio.
Geekflare@MSEDGEWIN10 ~
$ vi comandos.yml
---
- hosts: win
tareas:
- nombre: ejecutar un ejecutable utilizando win_command
win_command: whoami.exe
- nombre: ejecutar un comando cmd
win_command: cmd.exe /c mkdir C:\test
Ejecute el ansible-playbook para realizar la operación win_command.
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook comandos.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TAREA [ejecutar un ejecutable usando win_command] ***************************************************************************************************
cambiado: [192.168.0.102]
TAREA [ejecutar un comando cmd] *********************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescatado=0 ignorado=0
Variables de entorno
Un sistema windows tiene múltiples variables de entorno, por ejemplo, JAVA_HOME. Utilizando el módulo ansible win_environment, puede añadir o modificar variables de entorno en un sistema windows. En este ejemplo, estoy añadiendo una nueva variable a la lista de variables de entorno de windows.
Geekflare@MSEDGEWIN10 ~
$ vi env.yml
---
- hosts: win
tareas:
- name: Establecer una variable de entorno para todos los usuarios
win_environment:
estado: presente
nombre: NuevaVariable
valor: NuevoValor
nivel: máquina
Ejecute el ansible-playbook para añadir la variable de entorno en una máquina windows remota.
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook env.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TAREA [Establecer una variable de entorno para todos los usuarios] *********************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
omitido=0 rescatado=0 ignorado=0
Vaya a la ventana de variables de entorno; verá que la nueva variable que acaba de añadir está presente aquí.
Añadir/Editar Registro
el módulo ansiblewin_regedit se utiliza para añadir o editar detalles del registro en una máquina Windows remota. Necesita dar la ruta del registro y el contenido a añadir/actualizar. Aquí estoy creando una nueva entrada de registro GeekFlare dentro de la ruta HKLM:\SOFTWARE y luego agregando nombre y datos a este registro.
Geekflare@MSEDGEWIN10 ~
vi registry.yml
---
- hosts: win
tareas:
- nombre: Creación de un registro
win_regedit:
ruta: HKLM:\SOFTWARE\GeekFlare
- nombre: Modificar un registro, añadir nombre y datos
win_regedit:
ruta: HKLM:\SOFTWARE\GeekFlare
nombre: Geek
datos: Flare
Ejecute el ansible-playbook para añadir el registro.
Geekflare@MSEDGEWIN10 ~
ansible-playbook registro.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Creating a registry] *******************************************************************************************************************
cambiado: [192.168.0.102]
TAREA [Modificar un registro, añadir nombre y datos] ********************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
omitido=0 rescatado=0 ignorado=0
Si va al Editor del Registro en el sistema remoto, podrá ver que este registro se ha añadido correctamente con los parámetros Nombre y Datos.
Borrar Registro
el módulowin_eventlog ansible se utiliza para añadir, borrar o eliminar registros de eventos de windows del sistema windows.
Vaya a Windows Powershell, y liste los EventLogs presentes en la máquina windows remota.
PS C:³³Usuarios³Geekflare> Get-EventLog -List
Max(K) Retener Entradas OverflowAction Log
------ ------ -------------- ------- ---
20.480 0 OverwriteAsNeeded 33.549 Aplicación
20.480 0 SobrescribirComoNecesario 0 HardwareEvents
512 7 SobrescribirComoNecesario 20 Internet Explorer
20.480 0 SobrescribirComoNecesario 0 Servicio de gestión de claves
128 0 SobrescribirComoNecesario 190 OAlertas
Seguridad
20.480 0 SobrescribirComoNecesario 44.828 Sistema
15.360 0 Sobrescribir como necesario 3.662 Windows PowerShell
Ahora, voy a mostrar cómo eliminar los registros de todas las fuentes para Internet Explorer.
Geekflare@MSEDGEWIN10 ~
vi log.yml
---
- hosts: win
tasks:
- name: Eliminar registros de Internet Explorer
win_eventlog:
nombre: Internet Explorer
estado: ausente
Ejecute el ansible-playbook para eliminar el Internet Explorer de la máquina windows remota.
Geekflare@MSEDGEWIN10 ~
ansible-playbook log.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]
TASK [Remove Internet Explorer Logs] **********************************************************************************************************************************************
cambiado: [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 listar los EventLogs, verá que se han eliminado los registros de Internet Explorer.
PS C:³Users\Geekflare> Get-EventLog -List
Max(K) Retener Registro de Entradas OverflowAction
------ ------ -------------- ------- ---
20.480 0 OverwriteAsNeeded 33.549 Aplicación
20.480 0 SobrescribirComoNecesario 0 HardwareEvents
20.480 0 Sobrescribir como necesario 0 Servicio de gestión de claves
128 0 SobrescribirComoNecesario 190 OAlertas
Seguridad
20.480 0 SobrescribirComoNecesario 44.835 Sistema
15.360 0 Sobrescribir como necesario 56 Windows PowerShell
Así que, eso fue todo acerca de los playbooks de Ansible, que pueden ser utilizados para la administración remota de Windows. Siga adelante y pruebe estos playbooks. También puede probar otros módulos An sible Windows disponibles.