PowerShell Desired State Configuration

Windows PowerShell è una interfaccia a riga di comando introdotta in Windows Server diversi anni fa. Tramite PowerShell è possibile configurare sia il sistema operativo sia gli applicativi. Microsoft Exchange Server e System Center Virtual Machine Manager sono stati i primi software ad essere basati interamente su PowerShell.

Col tempo Microsoft ha introdotto la possibilità di gestire anche tutte le funzioni del sistema operativo e anche altri importanti Vendor hanno iniziato ad implementare la gestione delle proprie applicazioni utilizzando PowerShell.

Questo tipo di approccio fa sì che dopo aver imparato ad utilizzare PowerShell siamo in grado di creare script complessi che ci permettono di interagire con software non Microsoft, di automatizzare alcune operazioni ripetitive utilizzando un unico tool e di eseguire operazioni che non sono disponibili dall’interfaccia grafica (GUI).

PowerShell Desired State Configuration

In questo articolo vi voglio descrivere la funzionalità Windows PowerShell DSC (Desired State Configuration), introdotta in PowerShell v4 e presente di default in Windows Server 2012 R2. DSC è una piattaforma di gestione di Windows PowerShell che consente di distribuire e gestire dati di configurazione per i software, nonché di gestire l’ambiente in cui vengono eseguiti questi software. DSC fornisce anche un set di estensioni di Windows PowerShell, nuovi cmdlet e risorse che è possibile usare per configurare le applicazioni o lo stato del sistema operativo.

Obiettivo di DSC è quello di configurare in modo automatico un insieme di computer ed in particolar modo:

  • Abilitare o disabilitare funzionalità e ruoli del server
  • Gestire il Registro di sistema
  • Gestire file e directory
  • Avviare, arrestare e gestire processi e servizi
  • Gestire gruppi e account utente
  • Distribuire nuovo software
  • Gestire le variabili di ambiente
  • Eseguire script di Windows PowerShell
  • Correggere una configurazione che non sia quella desiderata

Quando viene eseguita la configurazione DSC (e le risorse chiamate dalla configurazione), gli script si assicurano che il risultato sia quello desiderato, facendo in modo che lo stato del sistema corrisponda a quanto definito dalla configurazione.

Esiste anche una versione di DSC per Linux. Vi rimando all’articolo Installare e configurare PowerShell Desired State Configuration for Linux per maggiori approfondimenti.

Prerequisiti

Per poter utilizzare DSC avete bisogno dei seguenti prerequisiti:

  • Windows Management Framework 4.0
  • .Net Framework 4.5
  • Windows Server 2008 R2 SP1 e successivi
  • Windows 7 SP1 e successivi

È consigliabile utilizzare Windows Server 2012 e soprattutto se usate Windows 8.1 o Windows Server 2012 R2 assicuratevi di aver installato la KB2883200

È importante anche che PowerShell Remoting sia abilitato.

Componenti di Desired State Configuration

DSC è una piattaforma costituita da 3 componenti principali:

  • Configurazioni. Le configurazioni sono script di PowerShell che definiscono e configurano le istanze delle risorse. Quando viene eseguita la configurazione, DSC si assicura semplicemente che il risultato sia quello desiderato.
  • Risorse. Le risorse si trovano all’interno dei moduli di PowerShell e possono essere scritte per modellare un elemento generico, come un file o un processo di Windows, o un elemento specifico, come un server IIS o una VM in esecuzione in Azure.
  • Local Configuration Manager. È il motore usato da DSC per semplificare l’interazione tra risorse e configurazioni. Esegue regolarmente il polling del sistema per garantire che lo stato definito da una configurazione venga mantenuto.

Configurazioni DSC

Le configurazioni DSC sono script di PowerShell che definiscono una funzione. Per definire una configurazione bisogna usare la parola chiave Configuration. Nell’esempio sotto viene definito con Node il sistema target su cui fare la verifica della configurazione (presenza del ruolo IIS e della fuzionalità ASP.NET 4.5)

Dopo aver dichiarato la configurazione DSC è sufficiente creare un file MOF (Management Object Format) che potrà essere utilizzato per richiamare qualsiasi funzione PowerShell, utilizzando il comando:

ICTPowerWebsite –MachineName “Server01”

Dove Server01 è il nome della macchina da configurare.

Il comando non farà altro che creare una cartella con lo stesso nome della configurazione (nel nostro caso ICTPowerWebsite e un file MOF di output per OGNI blocco Node presente nella Configurazione.

Figura 1: Cartella di output del Configurazione

Figura 2: File MOF di output della Configurazione

Un Node DSC è qualsiasi computer in cui la configurazione è gestita da DSC. Può essere una macchina virtuale di Azure (con sistema operativo Windows o Linux), una macchina virtuale locale o un computer fisico. I nodi eseguono le configurazioni Node per diventare conformi e mantenere la conformità con lo stato desiderato.

Una volta che abbiamo ottenuto il file MOF abbiamo la possibilità di utilizzarlo applicando la cmdlet di PowerShell

Start-DscConfiguration –Path .\ICTPowerWebsite –Wait –Verbose

Il parametro Path può essere sia un percorso locale che un percorso di rete (UNC).

Figura 3: Applicazione della configurazione

Lanciando la cmdlet Start-DscConfiguration possiamo verificare in qualsiasi momento che Server01 abbia le configurazioni richieste e possiamo riutilizzarla per riapplicare le configurazioni tutte le volte che ci serve.

Figura 4: Riapplicazione della Configurazione usando la stessa cmdlet

Per verificare le configurazioni applicate potete usare la cmdlet Get-DscConfiguration, mentre per validare i parametri della configurazione potete usare la cmdlet Test-DscConfiguration, che vi restituirà il parametro True (se la configurazione del server è conforme con quello richiesto da DSC) oppure False (se non è conforme).

Interessante è anche la possibilità di fare roll-back ad una configurazione precedente, nel caso abbiate sbagliato, utilizzando la cmdlet Restore-DscConfiguration. Non è possibile invece tornare indietro ad uno stato precedente all’applicazione della configurazione DSC.

Figura 5: Verifica della configurazione

Utilizzo di DSC in Azure

Con Automation DSC (Desired State Configuration) per Azure è possibile distribuire in modo coerente, monitorare in modo affidabile e aggiornare automaticamente lo stato desiderato di tutte le risorse presenti nel Cloud.

Per poter utilizzare DSC è necessario installare nella VM un agent particolare chiamato Desired State Configuration extension.

Mentre di solito è necessario convertire gli script DSC di configurazione per il nodo in file MOF, compilandoli con una cmdlet PowerShell, Azure PowerShell gestisce automaticamente la compilazione quando distribuite l’estensione DSC alle VM di Azure.

Figura 6: Aggiunta dell’Estensione DSC ad una VM in Azure

Come esempio ci proponiamo di installare IIS all’interno della VM. Creiamo un file con estensione .ps1 con all’interno la configurazione di DSC:


Salviamo il file, lo comprimiamo in formato Zip e successivamente installiamo dal portale di Azure, dopo aver selezionato la macchina, l’estensione PowerShell Desired State Configuration

Carichiamo il file Zip nell’apposita casella Configuration Modules or Script e scriviamo la notazione corretta della configurazione da eseguire nella casella Module-qualified Name of Configuration. La notazione deve essere nella forma <ConfigurationFile>.ps1\<ConfigurationName>. Nel mio caso è DSC-Install-IIS.ps1\MyDscConfiguration. Inserite nel campo Version il valore 2.0 e mettere su Yes il valore Auto Upgrade Minor Version.

Confermiamo con Create e vedremo che l’estensione è stata aggiunta alla nostra VM ed è in esecuzione.

Figura 7: Script in esecuzione

Dopo il reboot della VM verrà applicato lo script che avete caricato e lo status dell’estensione diventerà Provisioning
Succeded!

Figura 8: Esecuzione dello script completata

Lo script viene eseguito però solo una volta. Se volete rieseguire dovete ricaricarlo dal portale di Azure. Il motivo è dovuto al fatto che il Local Configuration Manager è configurato di default nella modalità ApplyAndMonitor. Per poter controllare e rieseguire lo script ciclicamente dovete modificare il Local Configuration Manager.

Modifica del Local Configuration Manager

Come ho già scritto prima, il Local Configuration Manager è il motore usato da DSC che esegue regolarmente il polling del sistema per garantire che lo stato definito da una configurazione venga mantenuto. Per verificare la configurazione del Local Configuration Manager è sufficiente lanciare sulla macchina la cmdlet

Get-DscLocalConfigurationManager

Figura 9: Valori di default del Local Configuration Manager

Di default il Local Configuration Manager è settato nella modalità ApplyAndMonitor.

Per riapplicare continuamente le impostazioni del vostro script DSC dovete modificare il parametro di ConfigurationMode in ApplyAndAutoCorrect. Potete realizzare uno script DSC e inserire il contenuto:

Salvate il file con estensione .ps1 ed eseguitelo sulla macchina per creare il file MOF, come ho precedentemente spiegato. Una volta che abbiamo ottenuto il file MOF abbiamo la possibilità di utilizzarlo applicando la cmdlet di PowerShell

Set-DscLocalConfigurationManager –Path .\LCMConfig\ –Verbose

Figura 10: Modifica del Local Configuration Manager

Rilanciando la cmdlet

Get-DscLocalConfigurationManager

vedrete che la vostra configurazione sarà stata applicata.

Figura 11: Modifica dei parametri del Local Configuration Manager

Con la configurazione appena modificata, DSC controllerà ogni 30 minuti lo stato della macchina e riapplicherà automaticamente lo script!

Maggiori informazioni su come configurare Windows PowerShell 4.0 Desired State Configuration Local Configuration Manager (LCM) sono disponibili al link https://msdn.microsoft.com/en-us/powershell/dsc/metaconfig4

Conclusioni

PowerShell DSC permette di poter avere le nostre macchine nello stato in cui le riteniamo conformi e si può assicurare che lo rimangano poiché gli script possono essere continuamente riapplicati. Per cominciare a lavorare con DSC potete visitare la pagina Getting Started with PowerShell Desired State Configuration (DSC)

Buon lavoro!

Nic