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…
Tabla de contenido
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ó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í.
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.
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.