DEVOPS Powershell DSC : le Devops selon Microsoft
DSC est la solution Devops de Microsoft disponible à partir de la version 4 de Powershell pour Windows et de la 6 core pour Linux.
La mode, Devops oblige, est aux systèmes de gestion de configuration. Puppet, Chef et autres Ansible permettent de configurer un ensemble de machines de manière idempotente et en un temps record. Rappelons que l’idempotence est, en l’occurrence, la caractéristique d’une opération à toujours reproduire le même résultat, peu importe l’environnement. Dans le cas présent, il s’agit de vérifier si toutes les machines ont la même configuration et, si ce n’est pas le cas, de la réappliquer sur les machines concernées. Microsoft a créé à cette fin DSC ( Desired State Configuration). DSC permet d’éviter les “dérives ” de configuration et, si le cas se présente, il est normalement capable de remédier immédiatement à la situation.
L’autre avantage sur la gestion de configuration est le temps gagné en terme de résolution d’incidents. À quoi bon se décarcasser une journée entière sur un serveur en panne alors qu’il peut être redéployé, et à nouveau opérationnel, en moins de 30 minutes ? Cela représente un réel atout dans une stratégie de Cloud. Microsoft l’a d’ailleurs rendu utilisable depuis sa plate- forme de Cloud Azure. Jusqu’alors, il était possible d’utiliser les GPO ( stratégies de groupes) pour faire descendre des configurations sur un domaine ou une forêt ou une arborescence AD ( Active Directory, le Ldap de Microsoft), mais pas de manière aussi souple, et cela ne pouvait fonctionner sur des machines hors domaine Active Directory. Le problème ne se pose plus avec DSC qui prend en charge tous les cas de figure, celui- ci compris.
Powershell DSC et le Devops
DSC est une fonctionnalité disponible sous Windows Server et aussi sous Linux permettant de gérer la configuration de ses serveurs par l’intermédiaire de Powershell. DSC se traduit presque littéralement par État de configuration souhaité car il applique sur vos machines la configuration que vous souhaitez à votre place. La prise en charge des systèmes Linux et l’ouverture sur l’open Source de Powershell avec la version Core ( 6.2 pour la dernière release, 7 en beta) qui va de pair avec
la version core de . Net devrait fortement profiter à l’évolution de DSC. Il est possible depuis déjà quelque temps de configurer des machines Linux depuis une machine Windows. Il faut maintenant rendre cela faisable d’un serveur Linux. Powershell DSC est clairement dans la philosophie Devops. Les scripts de configuration DSC sont capables de faire évoluer les configurations au fil du temps. La gestion des configurations touche aussi bien à la configuration du système qu’à celle d’une application. L’objectif de Powershell DSC est de faciliter le scripting avec des fichiers de configuration et une syntaxe relativement simple. Ce qui est particulier avec Powershell DSC, c’est que vous lui dites par exemple « Assures toi que le rôle DNS est installé sur ces dix serveurs » et il vérifiera et l’installera si besoin, alors qu’autrement il faudrait écrire du code plus lourd – et plus long – à coups de if- else. À partir d’un fichier de configuration, Powershell DSC va générer un fichier compilé propre à chaque serveur ciblé pour ensuite appliquer la dite configuration à l’ensemble des serveurs ciblés à configurer, les fameux noeuds ou nodes. À partir de la version 5 de Powershell, il est possible d’utiliser des classes, écrites en Powershell, à la place des fichiers compilés.
Mode Push et mode Pull
Powershell DSC propose deux modes de fonctionnement différents : push, le mode par défaut, qui consiste à pousser les configurations sur les noeuds distants, et le mode pull qui demande aux noeuds de venir récupérer les configurations sur un serveur prévu à cet effet. En mode push, aucune mise en place particulière n’est nécessaire puisque c’est vous qui pilotez l’envoi des configurations sur les nodes. En mode pull, les noeuds viennent récupérer leur configuration sur le serveur à intervalle régulier – toutes les 15 minutes, par défaut. Le mode push est à privilégier pour des configurations one shot, et le mode pull est lui plus intéressant pour gérer votre infrastructure sur la durée. Powershell DSC n’est pas seulement capable de configurer des noeuds
sous Windows mais aussi sur son Cloud Azure, ou encore sous Linux, avec un peu de Python, néanmoins.
Principe de fonctionnement
Une configuration Powershell DSC commence toujours par l’écriture d’un fichier de configuration au format ps1. Ce fichier contient la déclaration de la configuration et la ou les cibles ( nodes). La compilation de cette configuration produit des fichiers MOF, un par serveur ( node) cible. Ce fichier MOF prendra, en mode push, le nom du noeud ciblé. En mode pull, il prend pour nom un GUID associé au serveur. La dernière étape consiste à appliquer la configuration sur les noeuds distants. Soit en la poussant, en mode push, soit en laissant le noeud cible venir la chercher en mode pull. Sur le noeud distant, le composant en charge d’appliquer la configuration est le LCM, pour Local Configuration Manager. Il s’agit en fait d’un moteur DSC en local sur chaque noeud cible. C’est lui qui doit être paramétré pour passer notamment du mode push au mode pull, ou même inversement. Le LCM peutêtre configuré via Powershell DSC. Il existe même une ressource dédiée à sa configuration en Powershell 5 ou version supérieure. Powershell DSC permet donc, comme Ansible, Puppet et autres Chef, de simplifier la configuration de son infrastructure, d’éviter les
dérives de configuration, de déployer des configurations en continu et d’éviter au maximum les erreurs humaines. DSC est officiellement pris en charge pour les versions suivantes des distributions Linux : Centos 5 à 8, Debian 6 à 11, Oracle Linux 5 à 8, Red Hat Enterprise Linux Server 5 à 8, SUSE Linux Enterprise Server 10 à 15 et Ubuntu Server 12.04 LTS à 20.04 LTS. L’installation de DSC pour Linux nécessite au préalable celle D’OMI ( Open Management Infrastructure). Le serveur CIM D’OMI peut être téléchargé sur le site de l’open Group à l’adresse https:// github. com/ Microsoft/ omi. Vous devrez installer le package approprié à votre distribution Linux (. rpm ou . deb)
et à la version d’openssl ( ssl_ 098 ou ssl_ 100). DSC pour Linux est disponible en téléchargement à cette adresse : https:// github. com/ Microsoft/ Powershell- DSC- for- Linux/ releases/ tag/ v1.1.1- 294
Création d’un document MOF de configuration pour Linux
Le mot clef Configuration permet de créer une configuration pour les ordinateurs Linux, tout comme pour les ordinateurs Windows. Si vous souhaitez créer un document de configuration pour une machine Linux en Powershell, commencez par importer le module nx. Ce module contient le schéma des ressources DSC intégrées pour Linux. Il doit être installé sur votre ordinateur local et importé dans la configuration. Installez pour cela le module nx, copiez le répertoire du module nx vers $ env: USERPROFILE\ Documents\ Windowspowershell\ Modules\ ou $ PSHOME\ Modules. Le module nx est inclus dans le package d’installation ( MSI) de DSC pour Linux. Pour importer le module nx dans votre configuration, le plus simple est d’utiliser la commande Import- Dscresource : Configuration Exampleconfiguration{ Import- Dscresource - Module nx
} Définissez ensuite une configuration et créez le
fichier MOF associé : Configuration Exampleconfiguration { Import- Dscresource - Module nx Node "linuxhost. contoso. com" { nxfile Examplefile { Destinationpath = "/ tmp/ example" Contents = "hello world ` n" Ensure = "Present"
Type = "File" } } }
Il ne vous reste plus qu’à la lancer : Exampleconfiguration - Outputpath:" C:\ temp"
Transmission de la configuration en mode Push à l’ordinateur Linux
Vous pouvez effectuer une transmission Push des documents de configuration ( fichiers MOF) vers l’ordinateur Linux grâce à l’applet de commande Start- Dscconfiguration. Pour utiliser cette applet de commande avec les applets de commande Get- Dscconfiguration ou Test- Dscconfiguration à distance sur un ordinateur Linux, vous devez utiliser une session Cimsession. C’est l’applet de commande New- Cimsession permet de créer une session Cimsession sur l’ordinateur Linux. Voici un exemple de code, tiré du site de Microsoft, permettant de créer une session Cimsession pour DSC sous Linux : $ Node = "ostc- dsc- 01"
$ Credential = Get- Credential - Username:" root" - Message:" Enter Password:"
# Ignore SSL certificate validation
#$ opt = New- Cimsessionoption - Usessl:$ true - Skipcacheck:$ true - Skipcncheck:$ true - Skiprevocationcheck:$ true
# Options for a trusted SSL certificate
$ opt = New- Cimsessionoption - Usessl:$ true $ Sess= New- Cimsession - Credential:$ credential - Computername:$ Node - Port: 5986 - Authentication: basic - Sessionoption:$ opt - Operationtimeoutsec: 90
En mode Push, les informations d’identification de l’utilisateur doivent correspondre à l’utilisateur racine sur l’ordinateur Linux. Seules les connexions SSL/ TLS sont prises en charge pour DSC pour Linux. L’applet de commande New- Cimsession doit être utilisée avec le paramètre – USESSL défini à la valeur $ true. Le certificat SSL utilisé par OMI ( pour DSC) est spécifié dans le fichier / opt/ omi/ etc/ omiserver. conf avec les propriétés pemfile et keyfile. Si ce certificat n’est pas approuvé par l’ordinateur Windows sur lequel l’applet de commande NewCimsession est exécutée, vous pouvez éventuellement choisir d’ignorer la validation des certificats en spécifiant les options Cimsession suivantes : - Skipcacheck:$ true - Skipcncheck:$ true - Skiprevocationcheck:$ true
Pour transmettre en mode Push la configuration DSC vers le noeud Linux, exécutez la commande suivante : Start- Dscconfiguration - Path:" C:\ temp" - Cimsession:$ Sess - Wait – Verbose
Ressources DSC
Les ressources DSC fournissent les éléments de base d’une configuration.
Une ressource expose les propriétés qui peuvent être configurées ( le schéma) et contient les fonctions de scripts Powershell dont le gestionnaire de configuration local se sert pour l'exécution. Une ressource peut modéliser un élément générique comme un fichier ou spécifique comme un paramètre de serveur IIS. Les groupes de ce type de ressources sont combinés dans un module DSC qui organise tous les fichiers nécessaires dans une structure portable incluant les métadonnées qui permettent d'identifier la façon dont sont utilisées les ressources. Chaque ressource comporte un schéma qui détermine la syntaxe nécessaire pour utiliser la ressource dans une configuration. Le schéma d'une ressource peut être défini de la manière suivante : Un fichier Schema. Mof. La plupart des ressources définissent leur schéma dans un fichier Schema. MOF ( Managed Object Format).
Un fichier < Nom de la ressource>. schema. psm1. Les ressources composites définissent leur schéma dans un fichier '. schema. psm1' à l'aide d'un bloc de paramètres.
Un fichier < Nom de la ressource>. psm1. Les ressources DSC basées sur une classe définissent leur schéma dans la définition de la classe. Les éléments descriptifs de la ressource sont déclarés en tant que propriétés d'instance de la classe. Vous pouvez récupérer la syntaxe d'une ressource DSC grâce à l'applet de commande Get- Dscresource ( avec le paramètre – Syntax). Vous pouvez aussi utiliser la cmdlet GetCommand avec le même paramètre (- Syntax). Cela aura pour effet d'afficher le modèle utilisé pour le bloc de ressources correspondant à la ressource spécifiée : Get- Dscresource - Syntax Service ou GetCommand – Syntax Service
Le résultat obtenu devrait être similaire à ce qui suit. Comme dans la syntaxe de l'applet de commande, les clefs affichées entre crochets sont facultatives. Les types spécifient le type de données attendu par chaque clef : Service [ String] # Resourcename { Name = [ string]
[ Builtinaccount = [ string]{ Localservice | Localsystem | Networkservice }]
[ Credential = [ Pscredential]]
[ Dependencies = [ string[]]]
[ Dependson = [ string[]]]
[ Description = [ string]]
[ Displayname = [ string]]
[ Ensure = [ string]{ Absent | Present }]
[ Path = [ string]]
[ Psdscrunascredential = [ Pscredential]] [ Startuptype = [ string]{ Automatic | Disabled | Manual }]
[ State = [ string]{ Running | Stopped }] }
Le bloc de ressources Service d'une configuration peut par exemple garantir que le service Spooler est en cours d'exécution. Avant d'utiliser une ressource dans une configuration, il faut l'importer à l'aide de la commande Import- Dscresource. Configuration Testconfig
{
# Il est fortement conseillé d’importer