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 conjunto de módulos Windows que pueden utilizarse para configurar y administrar el servidor Windows. Asumo que ya tiene Ansible instalado en Windows desde quiere gestionar los servidores Windows
Las siguientes son algunas de las tareas más comunes que realizan los administradores de Windows a diario. Le sorprenderá 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 | SUCCESS => {
"changed": 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
tasks:
- name: 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 copy.yml
PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102
]
TASK [
Copiar archivo] *****************************************************************************************************************************
changed: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 i
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, es necesario 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 el MSI de Apache
hosts: win
tasks:
- 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
- name: Instalar MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
state: presente
Ejecute el ansible-playbook para instalar mediante MSI
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook msi.yml
PLAY [Instalando el MSI de Apache] *****************************************************************************************************************
TASK [Recopilando datos] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Descargando el instalador de Apache] *********************************************************************************************************
cambiado: [192.
168.
0.102]
TAREA [Instalar MSI] ***************************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 cambiado=2 inalcanzable=0 fallido=0
saltado=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:\Program Files (x86)\Apache Software
Foundation\Apache2
.2\bin
C
:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v
Versión del servidor: Apache/2.2.25 (Win32)
Server built: 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: Installar Apache MSI
hosts: win
tasks:
- 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
- name: Instalar MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
arguments:
- /install
- /passive
- /norestart
Para desinstalar una aplicación mediante 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 uninstall_msi.yml
---
– nombre: Desinstalar Apache
MSI
hosts: win
tasks:
- nombre: Desinstalar MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
state:
absent
Ejecute el ansible-playbook para desinstalar mediante MSI
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook uninstall_msi.yml
PLAY [Desinstalación de Apache MSI] *****************************************************************************************************************
TASK [Recopilación de datos] ***********************************************************************************************************************
ok: [192.168.0.102]
TAREA [Desinstalar MSI] *************************************************************************************************************************
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 compruebo la versión de apache, obtendré la siguiente salida ya que la aplicación se ha desinstalado
C:\Program Files (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 un archivo .exe utilizando el ID de producto del software
Geekflare@MSEDGEWIN10 ~
$
vi uninstall.yml
---
–
hosts: win
tasks:
- name: Desinstalar 7-Zip del exe
win_package:
path: C:\Program Files\7-Zip\Uninstall.exe
product_id: 7-Zip
arguments: /S
state: absent
Ejecute el ansible-playbook para desinstalar 7-Zip
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook uninstall.yml
PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]
TAREA [Desinstalar 7-Zip del 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 los servicios de Windows
el módulo ansible win_service se utiliza para iniciar, detener o reiniciar un servicio. He aquí cómo detener el servicio tomcat
Necesita mencionar el nombre del servicio en el archivo YAML y establecer el estado a stop
Geekflare@MSEDGEWIN10 ~
$
vi service.yml
---
–
hosts: win
tasks:
- name: Stop service Tomcat
win_service:
name: Tomcat8
state: stopped
Ejecute el ansible-playbook para detener el servicio tomcat
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook service.yml
PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TAREA [Detener el servicio Tomcat] ****************************************************************************************************************
cambiado: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 cambiado=1 inalcanzable=0 fallido=0
saltado=0 rescatado=0 ignorado=0
Si comprueba el servicio tomcat en el sistema windows, ahora está en estado detenido
Puede establecer el estado en iniciado, reiniciado o pausado para cambiar el estado del servicio
Copia 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
tasks:
- name: Obtener datos del disco
win_disk_facts:
- name: Obtener el tamaño del primer disco
debug:
var: ansible_facts.disks<x><x>[0]</x></x>.size
- name: Convierte el primer disco del sistema en varios formatos
debug:
msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
vars:
# Obtiene 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 disk.yml
PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Obtener datos del disco] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Obtener datos del disco] ************************************************************************************************************************
ok: [192.168.0.102]
TAREA [Obtener el tamaño del primer disco] ****************************************************************************************************************
ok: [192.168.0.102] => {
"ansible_facts.disks<x><x>[0]</x></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 rescued=0 ignored=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:
- name: Get disk facts
win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status
register: usage
- 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><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
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\nIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK \r\r\n"
}
PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0
Comandos de ejecución
Sean cuales sean los comandos que se ejecuten 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 commands.yml
---
–
hosts: win
tasks:
- name: ejecutar un ejecutable usando win_command
win_command: whoami.exe
- name: 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 commands.yml
PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [ejecutar un ejecutable usando win_command] ***************************************************************************************************
cambiado: [192.
168.
0.0.102]
TAREA [ejecutar un comando cmd] *********************************************************************************************************************
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 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
tasks:
- name: Establecer una variable de entorno para todos los usuarios
win_environment:
state: present
name: NuevaVariable
value: Nuevo Valor
level: machine
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><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></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] *********************************************************************************************
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 añadir está presente aquí
Añadir/editar registro
el módulo ansible win_regedit se utiliza para añadir o editar detalles del registro en una máquina Windows remota. Debe especificar el nombre del registro y el contenido que desea 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
tasks:
- name: Creación de un registro
win_regedit:
path: HKLM:\SOFTWARE\GeekFlare
- name: Modificación de un registro, añadiendo nombre y datos
win_regedit:
path: HKLM:\SOFTWARE\GeekFlare
name: Geek
data: Flare
Ejecute el ansible-playbook para añadir el registro
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook registry.yml
PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Recopilación de datos] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Creación de un registro] *******************************************************************************************************************
changed: [192.
168.
0.102]
TAREA [Modifierar un registro, añadir nombre y datos] ********************************************************************************************
cambiado: [192.168.0.102]
REPRODUCIR ***********************************************************************************************************************************
192.168.0.102
: ok=3 cambiado=2 inalcanzable=0 fallido=0
saltado=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
Cerrar Registro
el módulo ansible win_eventlog 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 remota windows
PS C:\Usuarios\Geekflare> Get-EventLog -List
Max(K) Retener Entradas OverflowAction Log
------ -------------- ------- ---
20,480 0 SobrescribirComoNecesario 33,549 Aplicación
20,480 0 SobrescribirComoNecesario 0 HardwareEvents
512 7 SobrescribirComoNecesario 20 Internet Explorer
20,
480 0
SobrescribirComoNecesario 0 Key Management Service
128 0 SobrescribirComoNecesario 190 OAlerts
Security
20,480 0 SobrescribirComoNecesario 44,828 System
15,360 0 SobrescribirComoNecesario 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: Remove Internet Explorer Logs
win_eventlog:
name: Internet Explorer
state: absent
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><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************
TASK
[Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]
TASK
[Remove Internet Explorer Logs] **********************************************************************************************************************************************
changed: [192.168.0.102]
PLAY RECAP ***********************************************************************************************************************************************************
Ahora, si vuelve a listar los EventLogs, verá que se han eliminado los registros de Internet Explorer
PS C:\Usuarios\Geekflare> Get-EventLog -List
Max(K) Retain OverflowAction Entries Log
------ -------------- ------- ---
20,480 0 OverwriteAsNeeded 33,549 Application
20,480 0 OverwriteAsNeed 0 HardwareEvents
20,
480 0 SobrescribirComoNecesario 0
Key Management Service
128 0 SobrescribirComoNecesario 190 OAlerts
Security
20,480 0 SobrescribirComoNecesario 44,835 System
15,360 0 SobrescribirComoNecesario 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 disponibles de Ansible para Windows.
-
Avi es un entusiasta de la tecnología con experiencia en tecnologías de tendencia como DevOps, Cloud Computing, Big Data y muchas más. Le apasiona aprender tecnologías de vanguardia y compartir sus conocimientos con los demás a través de... Seguir leyendo