Introduction
Cet article fait partie d’une série de 5 billets sur Desired State Configuration :
- Partie 1 : introduction et syntaxe
- Partie 2 : configuration du mode push
- Partie 3 : configuration du mode pull (via smb)
- Partie 4 : configuration du mode pull (via web service)
- Partie 5 : création d’une ressource personnalisée
Desired State Configuration est disponible comme Powershell 4.0 sur Windows 2012 R2/8.1, Windows 2012/8 et Windows 2008 R2/7.
Lors du précédent article nous avons vu l’implémentation du mode Pull via un web service.
Desired State Configuration est fourni avec un certain nombre de ressources. Malgré qu’il y en ai peu, et comme évoqué dans le précédent article, Microsoft et la communauté se sont employés à créer des nouvelles ressources. Dans cette cinquième et dernière partie, nous évoquerons la création d’une ressource personnalisée. Cette dernière permettra de prendre en charge un scénario non présent dans les ressources existantes : la présence d’un partage NFS.
Fonctionnement
Une ressource est constituée de plusieurs fichiers :
- Un fichier .SCHEMA.MOF contenant sa définition et plus particulièrement toutes les propriétés que l’on pourra renseigner.
- Un module Powershell contenant quelques fonctions obligatoires (.PSM1)
- Un fichier .PSD1 représentant le manifest du module Powershell. Ce dernier contiendra les fonctions a exporter de notre module. Ce dernier est principalement utilisé pour versionner le module et avoir quelques informations dessus.
Le module Powershell doit obligatoirement comporter trois fonctions. Elles seront appelées lorsqu’un fichier de configuration contiendra une ressource du type que l’on aura créé. “Get-TargetResource” permet de récupérer la configuration telle qu’elle a été définie. “Set-TargetResource” applique une configuration (création, modification et suppression) et “Test-TargetResource” effectue le test de validité (elle retourne un booléen).
Il convient à la personne créant le module de développer le corps de ces fonctions (le squelette étant toujours identique), c’est à dire les paramètres et les process effectués.
Pré-requis
Au lancement de Powershell 4.0, il pouvait être fastidieux de développer ses propres ressources car il fallait respecter une certaine syntaxe. Cependant, Microsoft a développé un module permettant de faciliter la création de ressource à destination de DSC : xDscResourceDesigner. Ce dernier va nous permettre de générer nos fichiers automatiquement. Il est disponible en suivant le lien ci-dessous : http://gallery.technet.microsoft.com/scriptcenter/xDscResourceDesigne-Module-22eddb29
Il suffit ensuite de placer ce module dans le dossier :
“C:\Program Files\WindowsPowerShell\Modules”.
Création de la ressource
Pour créer la ressource, on commence par définir ses propriétés avec la cmdlet “New-xDscResourceProperty”. Celles-ci possèdent à minima un nom, un type et des attributs. Ces derniers permettent de définir l’accessibilité (lecture, écriture,…). Lorsque l’on définit une nouvelle ressource, au moins une de ses propriétés devra posséder l’attribut “Key” et ne pourra être un tableau. Cet attribut permet d’indiquer la propriété utilisée lors de la recherche d’une ressource.
Dans l’exemple ci-dessous, on définit 3 propriétés :
-
le nom du partage
-
le chemin vers lequel le partage pointe
-
la présence ou l’abscence du partage
Un module Powershell qui ne comprend pour l’instant que le fichier .PSM1 a aussi été généré. Il faut maintenant définir la logique de nos 3 fonctions à l’intérieur de ce module.
Get-TargetResource
Set-TargetRessource
NB : Lors de la génération du template de module à remplir, il est indiqué dans le corps de la fonction qu’il faut positionné la variable globale “$global:DSCMachineStatus” avec la valeur 1 si une configuration nécessite un reboot après son application.
Test-TargetResource
A noter, qu’à la fin de notre module, la cmdlet “Export-ModuleMember” est présente et obligatoire afin que Powershell découvre correctement les méthodes de la ressource.
Génération du manifest
Les autres champs du fichier .PSD1 généré peuvent aussi être spécifiés via la cmdlet précédente ou en remplissant manuellement le fichier (via un éditeur de texte). Certaines propriétés seront même automatiquement remplies (exemple : auteur avec le samaccountname de l’utilisateur ayant lancé la commande).
Voici un lien menant vers le manifest généré pour cette ressource : Manifest
Import de la ressource et utilisation
Il suffit de placer notre ressource (Répertoire C:\NFSShare dans notre exemple) dans “C:\Program Files\WindowsPowerShell\Modules\”
Conclusion
Lors de cet article, nous avons vu la création d’une ressource permettant de gérer des partages NFS. Il est possible de l’améliorer en gérant d’autres propriétés de ce type de partage comme les permissions.
0 commentaires