15/11/2024

PowerShell DSC – Créer sa première configuration en mode Pull

I. Le mode Pull en action

Nous avons précédemment vu comment mettre en place un serveur pull basé sur IIS, puis nous avons profité de cette mise en place pour configurer nos nœuds cibles pour qu’ils passent du mode « Push » au mode « Pull ». Sur ces mêmes nœuds, nous avons également configurés dans le LCM un GUID propre à chaque nœud permettant de l’identifier, à cette occasion on avait utilisé le GUID des objets dans l’AD (mais on aurait pu le générer avec une commande adéquate).

Dans ce chapitre, nous allons créer une première configuration adaptée à des nœuds qui fonctionne en mode pull. En fait, la structure de la configuration en elle-même reste la même, c’est surtout pour la génération des fichiers compilés que c’est différent. Voyons cela ensemble.

II. Rédiger une configuration DSC pour le mode Pull

Dans cet exemple, on installera le rôle « DHCP » sur un ensemble de nœuds cibles, ceci peut constituer la première étape de la mise en place d’un cluster de serveurs DHCP. J’ai inclus seulement l’installation de la fonctionnalité pour simplifier la configuration.

Voici le code de la configuration :

Configuration DHCPInstall{
    param([parameter(Mandatory=$true)][string]$NodeGUID)
    # Importer les ressources DSC
    Import-DscResource –ModuleName PSDesiredStateConfiguration
    # Noeud localhost
    Node $NodeGUID {
        # Installer DHCP
        WindowsFeature DHCPServer
        {
            Name = "DHCP"
            Ensure = "Present"
        }
    }
}

Le code est très simple et semblable à ce que l’on a vu auparavant sauf pour une chose : le paramètre « NodeGUID ». L’objectif de ce paramètre est de générer un fichier .mof par nœud, non pas par le nom mais par le GUID, car c’est la règle en mode pull. On déclare le paramètre « NodeGUID » de la manière suivante :

param([parameter(Mandatory=$true)][string]$NodeGUID)

On indique que c’est un paramètre de type chaîne de caractères (string) et qu’il est obligatoire grâce à l’option mandatory.

On va ensuite ajouter sous le bloc de configuration, les trois variables suivantes :

$CSV = Import-Csv "C:\DSC\CSV\ad-guid.csv" -Delimiter ";"
$DSCConfigDir = "$env:ProgramFiles\WindowsPowerShell\DscService\Configuration"
$DSCConfigName = " DHCPInstall"

Qui correspondent à :

- $CSV : Chemin vers le fichier CSV qui contient la liste des GUID de nos serveurs ciblés, il s’agit du fichier que nous avons générés et utilisés précédemment.

- $DSCConfigDir : Chemin vers le répertoire local sur le serveur Pull qui doit être utilisé pour stocker les configurations, conformément au paramétrage effectué lors de l’installation du serveur pull.

- $DSCConfigName : Le nom de la configuration DSC

Dès lors que ces trois lignes sont ajoutées, on peut finir par ce bloc de code :

cd $DSCConfigDir
foreach($entry in $CSV){
    SNMPWindows -NodeGUID $entry.ObjectGUID
    $FileMOF = $DSCConfigDir + "\" + $DSCConfigName + "\" + $entry.ObjectGUID + ".mof"
    New-DscChecksum $FileMOF
}

Son objectif est de nous placer dans le répertoire qui stocke les configurations, puis pour chaque ligne du CSV (parcours du CSV avec le foreach) on génère le fichier de configuration avec le GUID du serveur. Mais ce n’est pas tout ! On génère également un fichier checksum pour ce fichier de configuration, qui est obligatoire dans le mode pull pour assurer l’intégrité du fichier de configuration.

En résumé, cette boucle va générer deux fichiers par nœud, un correspondant au fichier de compilation avec le GUID dans le nom, et l’autre correspondant au checksum de ce fichier de configuration.

Le code complet :

Configuration DHCPInstall{
    param([parameter(Mandatory=$true)][string]$NodeGUID)
    # Importer les ressources DSC
    Import-DscResource –ModuleName PSDesiredStateConfiguration
    # Noeud localhost
    Node $NodeGUID {
        # Installer DHCP
        WindowsFeature DHCPServer
        {
            Name = "DHCP"
            Ensure = "Present"
        }
    }
}
# Générer les fichiers MOF basés sur le GUID de chaque serveur cible
$CSV = Import-Csv "C:\DSC\CSV\ad-guid.csv" -Delimiter ";"
$DSCConfigDir = "$env:ProgramFiles\WindowsPowerShell\DscService\Configuration"
$DSCConfigName = "DHCPInstall"
cd $DSCConfigDir
foreach($entry in $CSV){
    SNMPWindows -NodeGUID $entry.ObjectGUID
    $FileMOF = $DSCConfigDir + "\" + $DSCConfigName + "\" + $entry.ObjectGUID + ".mof"
    New-DscChecksum $FileMOF
}

La configuration est désormais prête et en production, elle sera appliquée sur vos nœuds lors de la prochaine actualisation de la configuration. Ceci s’effectue par défaut toutes les 15 minutes comme c’est indiqué dans la configuration du LCM de chaque nœud (ce qui peut être configuré indépendamment d’un serveur à l’autre).

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail