En este artículo, definiremos el esquema para un recurso personalizado de configuración de estado deseado (DSC) de Windows PowerShell en un archivo MOF e implementaremos el recurso en un archivo de script de Windows PowerShell. Este recurso personalizado es para crear y mantener un sitio web.

Creando el esquema MOF:


El esquema define las propiedades de su recurso que se pueden configurar mediante un script de configuración de DSC.

Estructura de carpetas para un recurso MOF:


Para implementar un recurso personalizado de DSC con un esquema MOF, cree la siguiente estructura de carpetas. El esquema MOF se define en el archivo Demo_IISWebsite.schema.mof y el script de recursos se define en Demo_IISWebsite.psm1. Opcionalmente, puede crear un archivo de manifiesto de módulo (psd1).

$env:ProgramFiles\WindowsPowerShell\Modules (folder)
|- MyDscResources (folder)
|- DSCResources (folder)
|- Demo_IISWebsite (folder)
|- Demo_IISWebsite.psd1 (file, optional)
|- Demo_IISWebsite.psm1 (file, required)
|- Demo_IISWebsite.schema.mof (file, required)

Es necesario crear una carpeta denominada DSCResources debajo de la carpeta de nivel superior y que la carpeta para cada recurso debe tener el mismo nombre que el recurso.

El contenido del archivo MOF:

El siguiente es un archivo MOF de ejemplo que se puede usar para un recurso de sitio web personalizado. Para seguir este ejemplo, guarde este esquema en un archivo y llame al archivo Demo_IISWebsite.schema.mof.

[ClassVersion(«1.0.0»), FriendlyName(«Website»)]
class Demo_IISWebsite : OMI_BaseResource
{
[Key] string Name;
[Required] string PhysicalPath;
[write,ValueMap{«Present», «Absent»},Values{«Present», «Absent»}] string Ensure;
[write,ValueMap{«Started»,»Stopped»},Values{«Started», «Stopped»}] string State;
[write] string Protocol[];
[write] string BindingInfo[];
[write] string ApplicationPool;
[read] string ID;
};

Tenga en cuenta lo siguiente sobre el código anterior:

FriendlyName define el nombre que puede usar para hacer referencia a este recurso personalizado en los scripts de configuración de DSC. En este ejemplo, Sitio web es equivalente al nombre descriptivo Archivo para el recurso de Archivo integrado.


La clase que defina para su recurso personalizado debe derivar de OMI_BaseResource.

El calificador de tipo, [Clave], en una propiedad indica que esta propiedad identificará de manera única la instancia del recurso. Se requiere al menos una propiedad [Clave].

El calificador [Requerido] indica que la propiedad es obligatoria (se debe especificar un valor en cualquier secuencia de comandos de configuración que utilice este recurso).

El calificador [escribir] indica que esta propiedad es opcional cuando se utiliza el recurso personalizado en un script de configuración. El calificador [leer] indica que una propiedad no puede ser establecida por una configuración y es solo para propósitos de informes.

Valores restringe los valores que se pueden asignar a la propiedad a la lista de valores definidos en ValueMap. Para obtener más información, consulte ValueMap y Value Qualifiers.

Se recomienda incluir una propiedad llamada Garantizar con valores Presente y Ausente en su recurso como una forma de mantener un estilo coherente con los recursos DSC integrados.

Asigne un nombre al archivo de esquema para su recurso personalizado de la siguiente manera: classname.schema.mof, donde classname es el identificador que sigue a la palabra clave class en su definición de esquema.

Escribir el script de recursos:

El script de recursos implementa la lógica del recurso. En este módulo, debe incluir tres funciones denominadas Get-TargetResource, Set-TargetResource y Test-TargetResource. Las tres funciones deben tomar un conjunto de parámetros que sea idéntico al conjunto de propiedades definidas en el esquema MOF que creó para su recurso. En este documento, este conjunto de propiedades se denomina «propiedades de recursos». Almacene estas tres funciones en un archivo llamado .psm1. En el siguiente ejemplo, las funciones se almacenan en un archivo denominado Demo_IISWebsite.psm1.

Cuando ejecuta la misma secuencia de comandos de configuración en su recurso más de una vez, no debería recibir errores y el recurso debería permanecer en el mismo estado que cuando ejecutó la secuencia de comandos una vez. Para lograr esto, asegúrese de que sus funciones Get-TargetResource y Test-TargetResource dejen el recurso sin cambios, y que invocar la función Set-TargetResource más de una vez en una secuencia con los mismos valores de parámetro siempre es equivalente a invocarla una vez.

En la implementación de la función Get-TargetResource, utilice los valores de propiedad de recurso clave que se proporcionan como parámetros para comprobar el estado de la instancia de recurso especificada. Esta función debe devolver una tabla hash que enumere todas las propiedades del recurso como claves y los valores reales de estas propiedades como los valores correspondientes. El código siguiente proporciona un ejemplo.

DSC uses the Get-TargetResource function to fetch the status of the resource instance

specified in the parameters for the target machine

function Get-TargetResource
{
param
(
[ValidateSet(«Present», «Absent»)]
[string]$Ensure = «Present»,

    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [string]$Name,

    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [string]$PhysicalPath,

    [ValidateSet("Started", "Stopped")]
    [string]$State = "Started",

    [string]$ApplicationPool,

    [string[]]$BindingInfo,

    [string[]]$Protocol
)

    $getTargetResourceResult = $null;

    <#
      Insert logic that uses the mandatory parameter values to get the website and
      assign it to a variable called $Website
      Set $ensureResult to "Present" if the requested website exists and to "Absent" otherwise
    #>

    # Add all Website properties to the hash table
    # This simple example assumes that $Website is not null
    $getTargetResourceResult = @{
        Name = $Website.Name
        Ensure = $ensureResult
        PhysicalPath = $Website.physicalPath
        State = $Website.state
        ID = $Website.id
        ApplicationPool = $Website.applicationPool
        Protocol = $Website.bindings.Collection.protocol
        Binding = $Website.bindings.Collection.bindingInformation
    }

    $getTargetResourceResult

}

Continuará…

Por jioller

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *