PowerShell DSC en Linux (Primeros pasos)

PowerShell DSC en Linux es algo que todos los administradores que usamos PowerShell y que trabajamos sobre ambientes heterogéneos aparece como una luz en la oscuridad. Las posibilidades que aparecen a la hora de generar plantillas de configuración para Linux, permiten seguir optimizando recursos a la hora de realizar las tareas del día a día.

Administrar Linux con PowerShell DSC

Para la demostración que vamos a presentar, usaremos CentOS 7, y vamos a configurar aspectos básicos de la instalación como son el nombre y la IP para demostrar el potencial que ofrece PowerShell DSC no sólo en ambientes Microsoft puros.

Versiones soportadas

Comparto una lista donde se muestran las versiones soportadas de Linux para poder ser administradas desde PowerShell DSC:

  • CentOS 5, 6, and 7 (x86/x64)
  • Debian GNU/Linux 6, 7 and 8 (x86/x64)
  • Oracle Linux 5, 6 and 7 (x86/x64)
  • Red Hat Enterprise Linux Server 5, 6 and 7 (x86/x64)
  • SUSE Linux Enterprise Server 10, 11 and 12 (x86/x64)
  • Ubuntu Server 12.04 LTS, 14.04 LTS, 16.04 LTS (x86/x64)

Instalación de OMI y DSC

Dentro de los requerimientos necesarios para la instalación de DSC se encuentra OMI (Open Management Infraestructure). A su vez existen algunas dependencias requeridas para su correcto funcionamiento:

Required packages

Ahora sí, para instalar OMI y DSC en CentOS es necesario ejecutar los siguientes comandos:

wget https://github.com/Microsoft/omi/releases/download/v1.1.0-0/omi-1.1.0.ssl_100.x64.rpm

wget https://github.com/Microsoft/PowerShell-DSC-for-Linux/releases/download/v1.1.1-294/dsc-1.1.1-294.ssl_100.x64.rpm

sudo rpm -Uvh omi-1.1.0.ssl_100.x64.rpm dsc-1.1.1-294.ssl_100.x64.rpm

Se utilizan los enlaces con ssl_100, debido a que la versión de CentOS 7 ya viene con OpenSSL 1.0. En caso >de desconocer que versión de OpenSSL se encuentra instalda en el equipo, es necesario ejecutar:

openssl version

Generando el archivo de configuración MOF

Ya con todo instalado y listo, es necesario generar los archivos de configuración que permitan modificar nuestro servidor CentOS.

Si vamos a trabajar desde una máquina con Windows, es necesario contar con una versión igual o superior de PowerShell v4.0. En segundo lugar también se requiere disponer del módulo nx, llamado Linux Resource Provider MOF:

Install-Module nx

Y vamos a permitir esa instalación desde la galería de PowerShell, confirmando el mensaje que aparece.

Para comenzar a trabajar sobre la configuración de nuestro servidor de Linux, vamos a invocar el módulo nx en la configuración de nuestro archivo DSC, de la siguiente manera, siempre trabajando desde nuestro equipo con Windows y sobre la consola de PowerShell:

Configuration ExampleConfiguration{
    Import-DSCResource -Module nx
}

Ahora bien, vamos a probar con algo sencillo: vamos a generar un archivo con una cadena de texto. Para ello utilizaremos el siguiente fragmento de código, tomando lo detallado anteriormente:

Configuration LinuxConfiguration{
    Import-DscResource -Module nx

    Node  "192.168.1.21" {
        nxFile ExampleFile {
            DestinationPath = "/tmp/exampledsc"
            Contents = "Hello PoSh World `n"
            Ensure = "Present"
            Type = "File"
        }
    }
}

LinuxConfiguration -OutputPath:"C:\DSC"

En el bloque anterior detallamos el uso del módulo de DSC para Linux y también en que nodo vamos a estar trabajando (en mi caso solamente ingresé la IP del server con CentOS). Luego se describe un archivo de prueba, con la ruta donde se va a generar y el texto que va a tener “ Hello PoSh World” .

Si bien todo se encuentra controlado, tenemos que habilitar en el Firewall del servidor de Linux el puerto que vamos a utilizar para poder acceder, ejecutando:

firewall-cmd --add-port=5986/tcp --permanent
firewall-cmd --reload

Aplicar la configuración al servidor Linux

Continuado a lo anterior debemos ejecutar en el equipo Windows lo siguiente:

#Servidor CentOS
$Node = "192.168.1.21"
#Credenciales para ingresar al servidor
$Credential = Get-Credential -UserName:"root" -Message:"Contraseña:"
#Definimos las opciones de SSL que usará la sesión (que queremos obviar por no confiar en la CA)
$opt = New-CimSessionOption -UseSsl:$true -SkipCACheck:$true -SkipCNCheck:$true -SkipRevocationCheck:$true
#Definimos la sesión para poder conectarnos con el servidor
$Sess=New-CimSession -Credential:$credential -ComputerName:$Node -Port:5986 -Authentication:basic -SessionOption:$opt -OperationTimeoutSec:90

Y por último:

Start-DscConfiguration -Path:"C:\DSC" -CimSession:$Sess -Wait -Verbose

Que si todo va OK, debería generar el archivo de ejemplo llamado exampledsc con el texto que definimos. Aquí la captura de pantalla que comprueba que ha funcionado correctamente:

PowerShell DSC en Linux

En próximas entregas vamos a ir avanzando en las configuraciones a realizar, así como en la complejidad de los escenarios.

Happy scripting!

Comments