DSC-resursmanifest whatIf egenskapsschemareferens
Sammanfattning
Definierar hur du anger om och hur set-kommandot ska ändra en instans.
Metadata
SchemaDialect: https://json-schema.org/draft/2020-12/schema
SchemaID: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2024/04/resource/manifest.whatIf.json
Type: object
Beskrivning
När du framtvingar ett konfigurationsdokument med kommandot dsc config set kan användarna ange alternativet --what-if för att se om och hur resurser kommer att ändra systemtillståndet utan att faktiskt göra det. Den här egenskapen definierar hur DSC kan anropa resursen för att returnera den informationen direkt.
När den här egenskapen inte har definierats syntetiserar DSC det här beteendet genom att konvertera resultatet av en teståtgärd mot resursen till ett uppsättningsresultat. Det syntetiska resultatet kan bara indikera hur åtgärden ändrar resursegenskaperna. Det går inte att ange om den set
åtgärden misslyckas på grund av ogiltiga parametrar eller vilka skrivskyddade egenskaper som resursen kommer att returnera från åtgärden. I följande lista beskrivs några fall där ett syntetiskt konsekvensresultat inte returnerar tillräcklig information till användaren:
- En resurs som kräver en parameter för autentiseringsuppgifter kan testa instansen men inte ha behörighet att ändra den. I det här fallet kan användaren köra
dsc config set --what-if
och se en till synes lyckad förutsägelse för resursen. När de sedan kör kommandot utan alternativet--what-if
genererar resursen ett fel som användaren måste undersöka. Om andra resurser har tillämpats före den instans som misslyckades kan systemet lämnas i ett delvis konfigurerat tillstånd. - En resurs med en beroendetjänst kan inte rapportera om tjänsten behöver startas om från ett syntetiskt resultat. När du har granskat effekten av konfigurationen baserat på konsekvensresultatet kan en användare oavsiktligt starta om en tjänst eller lämna konfigurationen i ett delvis konfigurerat tillstånd tills tjänsten startas om.
Om resursen använder parametrar eller returnerar skrivskyddade egenskaper från en set
-åtgärd definierar du den här metoden för att säkerställa att användarna får bästa möjliga information om huruvida och hur resursen ändrar systemtillståndet i konsekvensläge.
DSC skickar data till kommandot på tre sätt:
- När
input
ärstdin
skickar DSC data som en sträng som representerar data som ett komprimerat JSON-objekt utan blanksteg eller nya radlinjer mellan objektegenskaperna. - När
input
ärenv
skickar DSC data som miljövariabler. Den skapar en miljövariabel för varje egenskap i indataobjektet med hjälp av egenskapens namn och värde. - När den
args
matrisen innehåller en JSON-indataargumentdefinition skickar DSC data som en sträng som representerar data som ett komprimerat JSON-objekt till det angivna argumentet.
Om du inte definierar egenskapen input
och inte definierar ett JSON-indataargument kan DSC inte skicka indata-JSON till resursen. Du kan bara definiera ett JSON-indataargument för ett kommando.
Du måste definiera egenskapen input
, ett JSON-indataargument i args
-egenskapsmatrisen eller båda.
Exempel
Exempel 1 – Fullständig definition
"set": {
"executable": "my_app",
"args": [
"config",
"set",
"--what-if"
],
"input": "stdin",
"return": "state"
}
Den definierar executable
som my_app
i stället för my_app.exe
. Tillägget krävs inte när operativsystemet identifierar kommandot som en körbar fil.
Manifestet definierar tre argument, config
, set
och --what-if
. Värdet för egenskapen input
anger att kommandot whatIf
förväntar sig dess indata som en JSON-blob från stdin
.
I kombination med värdet för executable
anropar DSC konsekvensmetoden för den här resursen genom att köra:
{ ... } | my_app config set --what-if
Manifestet definierar return
som state
, vilket anger att det endast returnerar det förväntade slutliga tillståndet för resursen efter att set
-metoden har körts. DSC jämför önskat tillstånd med returdata för den här resursen för att identifiera vilka av resursens egenskaper som metoden set
tillämpar, om någon.
Nödvändiga egenskaper
Definitionen whatIf
måste innehålla följande egenskaper:
Egenskaper
genomförbar
Egenskapen executable
definierar namnet på kommandot som ska köras. Värdet måste vara namnet på ett kommando som kan identifieras i systemets PATH
miljövariabel eller den fullständiga sökvägen till kommandot. Ett filnamnstillägg krävs bara när kommandot inte kan identifieras av operativsystemet som en körbar fil.
Type: string
Required: true
args
Egenskapen args
definierar listan med argument som ska skickas till kommandot. Argumenten kan vara valfritt antal strängar. Om du vill skicka JSON-objektet som representerar egenskapspåsen för resursen till ett argument kan du definiera ett enskilt objekt i matrisen som ett JSON-objekt, vilket anger namnet på argumentet med egenskapen jsonInputArg
string och om argumentet är obligatoriskt för kommandot med egenskapen mandatory
booleskt värde.
Type: array
Required: false
Default: []
Type: [string, object(JSON Input Argument)]
Strängargument
Alla objekt i argumentmatrisen kan vara en sträng som representerar ett statiskt argument som ska skickas till kommandot, till exempel config
eller --format
.
Type: string
JSON-indataargument
Definierar ett argument för kommandot som accepterar JSON-indataobjektet som en sträng. DSC skickar JSON-indata till det namngivna argumentet när det är tillgängligt. Ett JSON-indataargument definieras som ett JSON-objekt med följande egenskaper:
jsonInputArg
(krävs) – argumentet för att skicka JSON-data till för kommandot, till exempel--input
.mandatory
(valfritt) – Anger om DSC alltid ska skicka argumentet till kommandot, även om det inte finns några JSON-indata för kommandot. I så fall skickar DSC en tom sträng till JSON-indataargumentet.
Du kan bara definiera ett JSON-indataargument per argumentmatris.
Om du definierar ett JSON-indataargument och en input
typ för ett kommando skickar DSC JSON-data åt båda hållen:
- Om du definierar
input
somenv
och ett JSON-indataargument anger DSC en miljövariabel för varje egenskap i JSON-indata och skickar JSON-indataobjektet som en sträng till det definierade argumentet. - Om du definierar
input
somstdin
och ett JSON-indataargument skickar DSC JSON-indata över stdin och som en sträng till det definierade argumentet. - Om du definierar ett JSON-indataargument utan att definiera egenskapen
input
skickar DSC endast JSON-indata som en sträng till det definierade argumentet.
Om du inte definierar egenskapen input
och inte definierar ett JSON-indataargument kan DSC inte skicka indata-JSON till resursen. Detta gör manifestet ogiltigt. Du måste definiera egenskapen input
, ett JSON-indataargument i args
egenskapsmatris eller båda.
Type: object
RequiredProperties: [jsonInputArg]
inmatning
Egenskapen input
definierar hur du skickar indata till resursen. Om den här egenskapen inte har definierats och definitionen inte definierar ett JSON-indataargumentskickar DSC inga indata till resursen när whatIf
-åtgärden anropas.
Värdet för den här egenskapen måste vara en av följande strängar:
env
– Anger att resursen förväntar sig att egenskaperna för en instans anges som miljövariabler med samma namn och hölje.Det här alternativet stöder endast följande datatyper för instansegenskaper:
boolean
integer
number
string
array
avinteger
värdenarray
avnumber
värdenarray
avstring
värden
För värden som inte är matrisvärden anger DSC miljövariabeln till det angivna värdet as-is. När datatypen är en matris med värden anger DSC miljövariabeln som en kommaavgränsad sträng. Egenskapen
foo
med värdet[1, 2, 3]
sparas till exempel i miljövariabelnfoo
som"1,2,3"
.Om resursen behöver stöd för komplexa egenskaper med ett
object
värde eller matriser av flera typer anger du detta tillstdin
i stället.stdin
– Anger att resursen förväntar sig en JSON-blob som representerar en instans frånstdin
. JSON måste följa instansschemat för resursen.
Type: string
Required: false
ValidValues: [env, stdin]
implementsPretest
Egenskapen implementsPretest
definierar om resursen testar om instansen är i önskat tillstånd internt innan det önskade tillståndet verkställs. Ange den här egenskapen till true
när resursen testar instansen som en del av den set
åtgärden. Ställ in den här egenskapen på false
när den inte gör det. I de flesta fall bör det här värdet anges på samma sätt som egenskapen implementsPretest
i definitionen för den angivna metoden i resursmanifestet.
När det här värdet är false
anger det att användarna alltid ska anropa dsc resource test
mot instansen innan de anropar kommandot dsc resource set
mot resursen.
Standardvärdet är false
.
Type: boolean
Required: false
Default: false
handlesExist
Egenskapen handlesExist
definierar om resursen har inbyggd hantering för egenskapen _exist i den set
åtgärden. Standardvärdet är false
. I de flesta fall bör det här värdet anges på samma sätt som egenskapen implementsPretest
i definitionen för den angivna metoden i resursmanifestet.
Ställ in den här egenskapen på true
när resursen uppfyller följande implementeringskrav:
- Resursens instansschema definierar egenskapen
_exist
som en giltig instansegenskap. - Resursens
set
-kommando hanterar skapande, uppdatering och borttagning av en instans baserat på instansens aktuella tillstånd och värdet för egenskapen_exist
i önskat tillstånd.
När den här egenskapen är inställd på true
anger resursen att den har funktionen SetHandlesExist. När du bearbetar resurser med funktionen SetHandlesExist
i en konfiguration anropar DSC den set
åtgärden för resursen när en instans definierar _exist
som false
. Utan den här funktionen måste en resurs definiera åtgärden ta bort för att kunna ta bort instanser av resursen.
Om ett resursmanifest inte definierar den här egenskapen som true
och inte definierar den delete
åtgärden, genererar DSC ett fel när den påträffar en instans av resursen med _exist
inställd på false
.
återvända
Egenskapen return
definierar hur DSC ska bearbeta utdata för den här metoden. Värdet för den här egenskapen måste vara en av följande strängar:
state
– Anger att resursen endast returnerar instansens förväntade slutliga tillstånd efter den angivna åtgärden som en JSON-blob.stateAndDiff
– Anger att resursen returnerar instansens förväntade slutliga tillstånd och en matris med egenskapsnamn som resursen ändrade.
Standardvärdet är state
.
Type: string
Required: false
Default: state
ValidValues: [state, stateAndDiff]