Anatomia di una risorsa DSC basata su comandi
Le risorse DSC forniscono un'interfaccia standardizzata per la gestione delle impostazioni di un sistema. Una risorsa definisce le proprietà che è possibile gestire e implementare il codice necessario per ottenere un'istanza della risorsa.
Le risorse DSC basate su comandi sono definite con almeno due file:
- Manifesto della risorsa DSC che indica a DSC come interagire con la risorsa.
- Uno o più file eseguibili e le relative dipendenze per gestire le istanze della risorsa.
Manifesti delle risorse DSC
I manifesti delle risorse DSC sono definiti come file JSON. Per DSC per riconoscere un file JSON come manifesto, il file deve soddisfare i criteri seguenti:
- Il file deve essere individuabile nella
PATH
variabile di ambiente. - Il nome file deve terminare con
.dsc.resource.json
.
Quando DSC cerca il sistema locale per le risorse DSC basate su comandi disponibili, cerca ogni cartella nei PATH
file che usano la convenzione di denominazione del manifesto della risorsa DSC. DSC analizza quindi ognuno di questi file individuati e li convalida nello schema JSON del manifesto delle risorse DSC.
Se il file JSON viene convalidato sullo schema, DSC può usare la risorsa DSC.
Almeno, il manifesto deve definire:
- La versione dello schema JSON del manifesto delle risorse DSC è compatibile con.
- Nome completo della risorsa, ad esempio
Microsoft.Windows/Registry
. La sintassi del nome completo è<owner>[.<group>][.<area>]/<name>
. I componenti del gruppo e dell'area del nome completo consentono di organizzare le risorse negli spazi dei nomi. - Come DSC può chiamare il comando per ottenere lo stato corrente di un'istanza di risorsa.
- Un modo per convalidare un'istanza. I possibili valori sono i seguenti:
- Schema JSON che descrive un'istanza
- Un comando DSC deve chiamare per ottenere lo schema in fase di esecuzione
- Comando per convalidare le risorse DSC annidate. Questa ultima opzione si applica solo alle risorse del gruppo DSC e alle risorse del provider DSC.
Il manifesto può definire facoltativamente:
- Come DSC può chiamare il comando per verificare se un'istanza è nello stato desiderato.
- Come DSC può chiamare il comando per impostare un'istanza sullo stato desiderato.
- Significato dei codici di uscita non zero restituiti dal comando.
- Come DSC può chiamare il comando per gestire altre risorse DSC, quando la risorsa è una risorsa gruppo DSC o una risorsa provider DSC.
- Metadati della risorsa, ad esempio il relativo autore e una breve descrizione.
Se il manifesto non definisce come testare un'istanza della risorsa, DSC esegue un test sintetico per le istanze delle risorse. Il test sintetico di DSC ottiene sempre lo stato effettivo di un'istanza e esegue un confronto con distinzione tra maiuscole e minuscole delle proprietà dell'istanza allo stato desiderato. Il test sintetico ignora le proprietà precedute da un segno di sottolineatura () o dollaro (_
$
). Se una delle proprietà non corrisponde esattamente allo stato desiderato definito, DSC segnala l'istanza come non conforme.
Se il manifesto non definisce come impostare un'istanza della risorsa DSC, DSC non può usare la risorsa per applicare lo stato desiderato.
Il manifesto non deve specificare lo stesso file eseguibile per ogni operazione. La definizione per ogni operazione è indipendente.
Eseguibili di risorse DSC
Le risorse DSC basate su comandi richiedono sempre un file eseguibile per l'esecuzione di DSC. Il manifesto delle risorse DSC non deve essere in bundle con l'eseguibile. Il file eseguibile può essere qualsiasi file eseguibile, ad esempio un'applicazione binaria o uno script della shell. Una risorsa può usare file eseguibili diversi per operazioni diverse.
Affinché DSC usi un eseguibile, deve essere individuabile nella PATH
variabile di ambiente. DSC chiama il file eseguibile una volta per operazione, usando il codice di uscita restituito dall'eseguibile per determinare se il comando ha avuto esito positivo. DSC considera il codice 0
di uscita come esito positivo e tutti gli altri codici di uscita come errore.
Input
DSC invia input alle risorse DSC basate su comandi come BLOB di dati JSON su stdin o come set di flag e valori di argomenti. La gestione degli input è definita per operazione nel manifesto delle risorse DSC.
Quando DSC invia l'input come JSON su stdin, il BLOB di dati è la rappresentazione JSON dello stato desiderato di un'istanza. Questa è l'opzione più affidabile per una risorsa, in quanto consente alla risorsa di supportare proprietà complesse con oggetti annidati.
Quando DSC invia l'input come argomenti, genera una coppia di argomenti per ognuna delle proprietà specificate. Il primo argomento è il nome della proprietà preceduta da --
, ad esempio --duration
. Il secondo argomento è il valore della proprietà. L'ordinamento delle coppie di argomenti non è garantito. Questo metodo di input non supporta proprietà complesse.
Output
Il file eseguibile per una risorsa DSC basata su comandi deve restituire dati JSON a stdout quando viene chiamato da DSC. La codifica di output deve essere UTF-8. Quando la risorsa restituisce lo stato di un'istanza, DSC convalida i dati JSON nello schema dell'istanza della risorsa.
Per le risorse del provider DSC, DSC prevede che il file eseguibile passi gli stati dell'istanza per le risorse gestite come una singola matrice JSON o come una serie di righe JSON.
Le risorse DSC basate su comandi possono segnalare le informazioni di registrazione a DSC emettendo righe JSON in stderr. Ogni voce di log deve essere un oggetto JSON che include due chiavi:
- La
message
chiave definisce la stringa leggibile per la voce di log. - La
level
chiave definisce se il messaggio rappresenta unError
oggetto ,Information
oWarning
.
DSC raccoglie i messaggi dalle risorse e li visualizza nei risultati per un'operazione di configurazione. Quando DSC richiama una risorsa direttamente all'esterno di una configurazione, non raccoglie i messaggi. Invece, sono solo generati a stderr.