PowerShell DSC et les configurations partielles

I. DSC, un outil collaboratif

Avec PowerShell 5.0, PowerShell DSC permet la gestion des configurations fragmentées, et à partir de plusieurs sources. En fait, la configuration globale d’un serveur peut-être scindée en plusieurs configurations partielles, que le LCM du nœud cible se chargera de récupérer et d’assembler, pour ensuite appliquer la configuration de manière générale.

Ce découpage des configurations peut être très intéressant si plusieurs équipes travaillent sur les mêmes serveurs, on peut imaginer une équipe en charge du système d’exploitation et une autre de la partie applicative. Ainsi, chaque équipe pourra gérer sa partie de la configuration, le tout sera assemblé en toute transparence.

Les configurations partielles peuvent-être utilisées en mode push, en mode pull ou même les deux. Dans le cadre de ce cours, on s’intéressera tout particulièrement à la méthode en mode pull.

II. Configurer le LCM

Vous vous souvenez que le LCM est configuré de manière à savoir si le mode pull ou le mode push doit être utilisé, ainsi qu’un lot d’autres paramètres. Il y a également le paramètre « ConfigurationRepositoryWeb » dans lequel on pourra indiquer l’URL de notre serveur Pull (ou « ConfigurationRepositoryShare » s’il s’agit d’un mode pull en SMB).

On va donc créer un fichier de configuration dans lequel on indiquera au LCM quelles sont les configurations partielles et sur quel(s) serveur(s) pull il faut aller chercher les configurations. L'en-tête "[DscLocalConfigurationManager()]" est indispensable pour créer une configuration DSC qui touche directement au LCM.

[DscLocalConfigurationManager()]
Configuration DeclarePartialConfig{
   param([parameter(Mandatory=$true)][string]$Node)
   Node $Node{
       ConfigurationRepositoryWeb MANAGER01
       {
            ServerURL = "http://manager01.it-connect.local:8080/PSDSCPullServer.svc"
       }
       PartialConfiguration SNMPWindowsLight
       {
            Description = "Installer SNMP et les subfeatures"
            ConfigurationSource = "[ConfigurationRepositoryWeb]MANAGER01"
       }
   }
}

On déclarera chaque morceau de configuration au sein d’un bloc « PartialConfiguration » suivit d’un nom de configuration, un nom qu’il faudra réutiliser lorsque l’on créera le fichier de configuration correspondant à cette configuration.

Par ailleurs, pour chaque configuration partielle, on indique un paramètre « ConfigurationSource » ce qui permet d’indiquer différents serveurs Pull si vos différents morceaux de configuration ne sont pas publiés au même endroit. Dans cet exemple, on fait référence au bloc que l’on a déclaré précédemment c’est pour ça que l’on indique « [ConfigurationRepositoryWeb]MANAGER01 ».

Dès lors que votre fichier de configuration du LCM est prêt, il faut générer les fichiers méta associés à chaque hôte (nom.meta.mof) en appelant le nom de la configuration. On récupèrera le GUID à partir du CSV que l'on a généré dans un chapitre précédentpour générer le .mof ainsi que son checksum indispensable en mode pull comme dans cet exemple.

$CSV = Import-Csv "C:\DSC\CSV\ad-guid.csv" -Delimiter ";"
foreach($entry in $CSV){
    DeclarePartialConfig -Node $entry.ObjectGUID
    New-DscChecksum -Path "C:\Program Files\WindowsPowerShell\DscService\Configuration"
}

Enfin, on pourra pousser la configuration du LCM sur les différents nœuds avec « Set-DscLocalConfigurationManager » comme ceci :

Set-DscLocalConfigurationManager -Path "C:\Program Files\WindowsPowerShell\DscService\Configuration" -Verbose -Credential (Get-Credential)

III. Où placer les fichiers de configuration ? Comment les nommer ?

Compte-tenu de la configuration que nous avons effectués et que nous sommes restés dans du classique, les fichiers de configuration doivent être placés dans le répertoire indiqué ci-dessous, comme s’il s’agissait d’une configuration classique (non découpée) :

C:\Program Files\WindowsPowerShell\DscService\Configuration

En temps normal, il y a un fichier de configuration par hôte avec à chaque fois le GUID du nœud en guise de nom, ou son nom lorsque le mode push est utilisé. Alors comment faire dans le cadre des configurations partielles car il y aurait plusieurs fichiers avec le même nom... ?

Tout simplement, le fichier MOF se nommera : NomConfiguration.GUIDNoeud.mof

dsc-partial-configuration

On ajoute donc dans le nom du fichier MOF le nom de la configuration (partielle) en début du nom de fichiers, ce qui permet d’identifier facilement chaque fichier MOF et de ne pas avoir de doublons. Il faut également stocker le fichier de configuration partielle sous la forme "NomConfigurationPartielle.mof" dans ce même répertoire.

IV. Que faire ensuite ?

Comme les nœuds disposent d’un LCM configuré en mode pull, il ne reste plus qu’à attendre que le rafraîchissement soit déclenché automatiquement (selon le délai indiqué pour la propriété « RefreshFrequencyMins »). Sinon, vous pouvez forcer le rafraîchissement en exécutant ces deux commandes sur un nœud :

Update-DscConfiguration
Start-DSCConfiguration -UseExisting
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau et cofondateur d'IT-Connect. 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.

florian has 3218 posts and counting.See all posts by florian