Controlando Windows a través de Ansible

Para muchos ingenieros de sistemas Linux, Ansible se ha convertido en una forma de vida. Usan Ansible para orquestar procesos de implementación complejos, para definir múltiples sistemas con una herramienta de administración de configuración rápida y simple, o en algún punto intermedio.

Sin embargo, los usuarios de Microsoft Windows generalmente requieren un conjunto diferente de herramientas para administrar los sistemas. También a menudo necesitaban una mentalidad diferente sobre cómo manejarlos.

Recientemente, Ansible ha mejorado bastante esta situación. El lanzamiento de Ansible 2.3 incluía un montón de nuevos módulos para este propósito. Ansible 2.3.1 ya está disponible para Fedora 26

En AnsibleFest Londres 2017 , Matt Davis, ingeniero principal sénior de software de Ansible, dirigirá una sesión que cubrirá este tema con cierto detalle. En este artículo, veremos cómo preparar los sistemas Windows para habilitar esta funcionalidad junto con algunas cosas que podemos hacer con ella.

Preparación de los sistemas de destino

Hay un par de requisitos previos necesarios para preparar un sistema Windows para permitir que ansible se conecte. El tipo de conexión utilizado para esto es “winrm”, que es el Gestión remota de Windows protocolo.

Cuando se usa, ansible ejecuta powershell en el sistema de destino. Esto requiere una versión mínima de Powershell 3.0 aunque se recomienda instalar la versión más reciente de Marco de administración de Windows que en el momento de escribir este artículo es 5.1 e incluye Powershell 5.1 como parte de él.

Con eso en su lugar, el servicio WinRM debe configurarse en el sistema Windows. La forma más fácil de hacer esto es con el secuencia de comandos powershell ansible .

Por defecto, los comandos, pero no los scripts, pueden ser ejecutados por el Política de ejecución . Sin embargo, cuando se ejecuta el script a través del ejecutable de PowerShell, esto se puede omitir.

Ejecute powershell como usuario administrativo y luego:

                      powershell.exe  -ExecutionPolicy Bypass -File ConfigureRemotingForAnsible.ps1 -CertValidityDays 3650 -Verbose

                    

Después de esto, el servicio WinRM estará escuchando y cualquier usuario con privilegios administrativos podrá autenticarse y conectarse.

Aunque es posible usar CredSSP o Kerberos para delegado (inicio de sesión único), el método más simple solo usa el nombre de usuario y la contraseña a través de la autenticación NTLM.

Para configurar el conector winrm en sí, hay algunos diferentes variables pero lo mínimo necesario para que esto funcione para cualquier sistema Windows necesitará:

                      ansible_user: 'localAdminUser'
ansible_password: 'P455w0rd'
ansible_connection: 'winrm'
ansible_winrm_server_cert_validation: 'ignore'

                    

La última línea es importante con los certificados autofirmados predeterminados que usa Windows para WinRM, pero se puede quitar si se usan certificados verificados de una CA central para los sistemas.

Entonces, con eso en su lugar, ¿qué tan flexible es? ¿Cuánto se puede controlar y configurar realmente de forma remota?

Bueno, el primer paso en la computadora de control es instalar ansible y las bibliotecas winrm:

                      dnf -y install ansible python2-winrm

                    

Con eso listo, hay un buen número de módulos principales disponibles pero la mayoría de las tareas son de módulos específicos de Windows .

Actualizaciones remotas de Windows

El uso de ansible para definir las actualizaciones de sus sistemas Windows les permite verificarlas e implementarlas de forma remota, ya sea que provengan directamente de Microsoft o de un servicio interno de actualización de Windows Server:

                      ansible -i mywindowssystem, -c winrm -e ansible_winrm_server_cert_validation=ignore -u administrator -k -m win_updates

mywindowssytem | SUCCESS => {
    "changed": true, 
    "failed_update_count": 0, 
    "found_update_count": 3, 
    "installed_update_count": 3, 
    "reboot_required": true, 
    "updates": {
        "488ad51b-afca-46b9-b0de-bdbb4f56672f": {
            "id": "488ad51b-afca-46b9-b0de-bdbb4f56672f", 
            "installed": true, 
            "kb": [
                "4022726"
            ], 
            "title": "2017-06 Security Monthly Quality Rollup for Windows 8.1 for x64-based Systems (KB4022726)"
        }, 
        "94e2e9ab-e2f7-4f8c-9ade-602a0511cc08": {
            "id": "94e2e9ab-e2f7-4f8c-9ade-602a0511cc08", 
            "installed": true, 
            "kb": [
                "4022730"
            ], 
            "title": "2017-06 Security Update for Adobe Flash Player for Windows 8.1 for x64-based Systems (KB4022730)"
        }, 
        "ade56166-6d55-45a5-9e31-0fac924e4bbe": {
            "id": "ade56166-6d55-45a5-9e31-0fac924e4bbe", 
            "installed": true, 
            "kb": [
                "890830"
            ], 
            "title": "Windows Malicious Software Removal Tool for Windows 8, 8.1, 10 and Windows Server 2012, 2012 R2, 2016 x64 Edition - June 2017 (KB890830)"
        }
    }
}


                    

También es posible reiniciar automáticamente con un pequeño libro de jugadas:

                      - hosts: windows
  tasks:
    - name: apply critical and security windows updates 
      win_updates:
        category_names: 
          - SecurityUpdates
          - CriticalUpdates
      register: wuout
    - name: reboot if required
      win_reboot:
      when: wuout.reboot_required

                    

Gestión de paquetes

Hay dos formas de manejar las instalaciones de paquetes en Windows usando ansible.

El primero es usar win_package que puede instalar cualquier msi o ejecutar un instalador ejecutable desde un recurso compartido de red o uri. Esto es útil para redes internas más bloqueadas sin conexión a Internet o para aplicaciones que no están conectadas. chocolatoso . Para evitar volver a ejecutar un instalador y mantener las jugadas seguras, es importante buscar el ID del producto en el registro para que win_package pueda detectar si ya está instalado.

El segundo es usar el Chocolatey al que se hace referencia brevemente. No se requiere configuración para esto en el sistema de destino ya que el módulo win_chocolatey instalará automáticamente el administrador de paquetes Chocolatey si aún no está presente. Instalar Java 8 Runtime Environment a través de Chocolatey es tan simple como:

                      ansible -i mywindowssystem, -c winrm -e ansible_winrm_server_cert_validation=ignore -u administrator -k -m win_chocolatey -a "name=jre8"
mywindowssystem | SUCCESS => {
    "changed": true, 
    "rc": 0
}

                    

Y el resto…

La lista crece a medida que continúa el desarrollo de ansible, así que consulte siempre la documentación para conocer el conjunto actualizado de módulos de Windows admitidos. Por supuesto, siempre es posible simplemente ejecutar powershell sin procesar también:

                      ansible -i mywindowssystem, -c winrm -e ansible_winrm_server_cert_validation=ignore -u administrator -k -m win_shell -a "Get-Process"
mywindowssystem | SUCCESS | rc=0 >>

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName          
-------  ------    -----      -----     ------     --  -- -----------          
     28       4     2136       2740       0.00   2452   0 cmd                  
     40       5     1024       3032       0.00   2172   0 conhost              
    522      13     2264       5204       0.77    356   0 csrss                
     83       8     1724       3788       0.20    392   1 csrss                
    106       8     1936       5928       0.02   2516   0 dllhost              
     84       9     1412        528       0.02   1804   0 GoogleCrashHandler   
     77       7     1448        324       0.03   1968   0 GoogleCrashHandler64 
      0       0        0         24                 0   0 Idle                 
      

                    

Con la colección de módulos ya disponibles y la ayuda de utilidades como Chocolatey, ya es posible administrar la gran mayoría del estado de Windows con ansible, lo que permite muchas de las mismas técnicas y mejores prácticas ya integradas en la cultura de Linux para hacer la transición. , incluso con acciones más complejas como unirse o crear un dominio de Active Directory.

                      ansible -i mywindowssystem, -c winrm -e ansible_winrm_server_cert_validation=ignore -u administrator -k -m win_say -a "msg='I love my ansible, and it loves me'"

                    

Related Posts