¿Alguna vez pensó en probar DSC pero sintió que la curva de aprendizaje es demasiado pronunciada? ¿O tal vez nunca te viste usándolo en producción, así que no te molestaste?
Usar DSC no tiene por qué ser difícil ni complejo, y no se necesita una infraestructura gigantesca para que valga la pena. Este artículo hablará sobre DSC y cómo dar los primeros pasos, e incluye ejemplos de cómo comenzar aplicándolo a pequeña escala en la producción.
¿Qué es DSC?
La configuración de estado deseada (DSC) es un sistema de gestión de configuración integrado en Windows y le permite configurar su sistema como código. Utiliza una configuración escrita en PowerShell que luego se convierte a un formato de objeto administrado (MOF).
Posteriormente, el servicio de administrador de configuración local lee y aplica el archivo MOF en el nodo de destino (computadora).
La configuración que se crea y ejecuta utiliza diferentes DSC recursos de Módulos DSC. Los módulos DSC son como un módulo PowerShell normal y los recursos son sus funciones. Por ejemplo, puede instalarlos usando
Install-Module
y se almacenan en PSModulePath.
¿Para qué puedo utilizar DSC?
Para muchos, la parte más difícil de DSC es encontrar casos de uso. La gente tiende a hablar y escribir sobre DSC solo cuando se trata de orquestar y poner en marcha entornos grandes, o pruebas y control de calidad para diferentes aplicaciones, lo cual es un tema lejano para muchos administradores.
Podemos utilizar DSC para nuestras rutinas diarias y mucho más, sin tener que reestructurar toda nuestra organización. He compilado una lista de algunas áreas que puedes automatizar total o parcialmente con DSC:
Ejemplo: lectura y escritura de una configuración DSC
Unas pocas líneas de DSC pueden equivaler a cientos de líneas con PowerShell sin formato, por eso puede ser tan increíblemente poderoso.
Una configuración DSC consiste principalmente en 2 partes: La configuración DSC y los datos de configuración.
Los datos de configuración (que se explican más adelante) pueden incluirse externamente, generalmente desde un archivo PSD, o incluirse en el archivo de configuración. El enfoque recomendado y más fácil de mantener es incluirlo desde un archivo separado.
A continuación se muestra un ejemplo de cómo crear un DSC MOF que descarga e instala un MSI genérico cuando se aplica:
Configuration MyDSCConfiguration {
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"
Node "fileserver-1" {
File SoftwarePackagesDirectory {
DestinationPath = "C:ProgramDataSoftwarePackages"
Type = "Directory"
Ensure = "Present"}
xRemoteFile DownloadBackupAgent {
DependsOn = "[File]SoftwarePackagesDirectory"
Uri = "http://web.contoso.com/packages/backupagent.msi"
DestinationPath = "C:ProgramDataSoftwarePackagesBackupAgent.msi"
}
xMsiPackage InstallBackupAgent {
DependsOn = "[xRemoteFile]DownloadBackupAgent"
ProductId = "d29c3fa9-e03e-40e0-a6ed-556c6f05476a"
Path = "C:ProgramDataSoftwarePackagesBackupAgent.msi"
Ensure = "Present"}
}
}
Después de ejecutar este código, crea una función de configuración en la sesión actual de PowerShell que se puede usar. Crea una subcarpeta con el mismo nombre que la configuración donde guarda los archivos MOF generados:
PS51> MyDSCConfigurationDirectory: C:TutorialsDSCMyDSCConfiguration
Mode LastWriteTime Length Name
-a---- 2019-10-28 16:38 3952 fileserver-1.mof
Puede aplicar todas las configuraciones de DSC en la carpeta MyDSCConfiguration a su host ejecutando:
PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait
Usando DSC con ConfigurationData
Los datos de configuración contienen datos de configuración para la configuración de DSC. La información incluye un nombre de nodo (nombre de la computadora) y puede contener otros datos como información sobre cómo instalar un paquete MSI o valores de clave de registro, etc. Esto nos brinda un enfoque dinámico y más versátil para DSC, de modo que pueda reutilizarse. y fácilmente modificable.
Digamos que tiene estos tres servidores y cada uno necesita una combinación única de paquetes:
- servidor de archivos-1
- base de datos-1
- Necesidades: BackupAgent, BackupAgent-DatabaseAddon
- servidor de aplicaciones-1
- Necesidades: BackupAgent, MonitoringAgent
El mejor enfoque es crear un archivo con los datos de configuración que necesita, no solo especificando los nodos (servidores), sino también agregando una lista de paquetes:
@{
AllNodes = @(
@{
NodeName = "*"
}
@{
NodeName = "fileserver-1"
Role = "Fileserver"
Packages = @(
'BackupAgent'
)
},
@{
NodeName = "database-1"
Role = "Database"
Packages = @(
'BackupAgent',
'BackupAgent-DataBaseAddon'
)
},
@{
NodeName = "appserver-1"
Role = "Appserver"
Packages = @(
'BackupAgent',
'MonitoringAgent'
)
}
)
Packages = @(
@{
Name = "BackupAgent"
ProductId = "3c4e21b5-8de2-408e-84e0-a42b0507b8b1"
FileName = "BackupAgent.msi"
Ensure = "Present"
},
@{
Name = "BackupAgent-DataBaseAddon"
ProductId = "97f860f6-0a58-4bf3-aef8-abc0f796e9df"
FileName = "BackupAgent-DataBaseAddon.msi"
Ensure = "Present"
},
@{
Name = "MonitoringAgent"
ProductId = "77b29b12-c222-4d85-b812-bbd4136ad0ff"
FileName = "MonitoringAgent.msi"
Ensure = "Present"
}
)
}
Ahora puede utilizar este archivo de datos de configuración para generar dinámicamente configuraciones DSC para sus servidores:
Configuration MyDSCConfiguration {
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"
$Packages = $ConfigurationData.Packages
Node $AllNodes.NodeName {
File SoftwarePackagesDirectory {
DestinationPath = "C:ProgramDataSoftwarePackages"
Type = "Directory"
Ensure = "Present"
}
Foreach($PackageName in $Node.Packages){$Package = $Packages.Where{$_.Name -eq $PackageName}
xRemoteFile "PackageDownload-$($Package.Name)" {
DependsOn = "[File]SoftwarePackagesDirectory"
DestinationPath = "C:SoftwarePackages$($Package.FileName)"
Uri = "http://web.contso.com/packages/$($Package.FileName)"
}xMsiPackage "Install$($Package.Name)" {
DependsOn = "[xRemoteFile]PackageDownload-$($Package.Name)"
ProductId = $Package.ProductId
Path = "C:ProgramDataSoftwarePackages$($Package.FileName)"
Ensure = $Package.Ensure
}
}
}
}
Si ejecuta esto, la función DSC genera un archivo MOF para cada uno de sus servidores que puede usarse para instalar los paquetes que definió en el archivo ConfigurationData.psd1:
PS51> MyDSCConfiguration -ConfigurationData .ConfigurationData.psd1Directory: C:TutorialsDSCMyDSCConfiguration
Mode LastWriteTime Length Name
-a---- 2019-10-28 17:25 3962 fileserver-1.mof
-a---- 2019-10-28 17:25 6012 database-1.mof
-a---- 2019-10-28 17:25 5894 appserver-1.mof
PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait
Si desea agregar nuevos paquetes, modifique su archivo ConfigurationData.psd1 y ejecute el código anterior una vez más.
Conclusión
Puede ser una curva de aprendizaje bastante corta y empinada comenzar con DSC. Pero la parte más difícil para muchos es encontrar casos de uso en los que puedan utilizarlo.
Usar el método anterior que utiliza HTTP (o HTTPS) para recuperar paquetes le brinda una forma versátil de distribuir software a sus servidores. Y como es HTTPS, también es más fácil de exponer y puede usarlo para administrar software en DMZ y otras redes menos confiables.
Además, utilizar datos de configuración en lugar de codificar todo en sus configuraciones DSC le brinda un enfoque de mantenimiento mucho más fácil. Incluso puedes generar estos datos de configuración desde fuentes externas como CSV, SQL, Sharepoint y todo lo demás que se pueda leer con PowerShell.
Espero que tengas algunas ideas para tu entorno para empezar a facilitar tus tareas diarias con DSC.