Dokumentacja schematu właściwości testowania manifestu zasobu DSC
Streszczenie
Definiuje sposób testowania, czy wystąpienie zasobu DSC jest w żądanym stanie.
Metadane
SchemaDialect: https://json-schema.org/draft/2020-12/schema
SchemaID: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2024/04/resource/manifest.test.json
Type: object
Opis
Jeśli zasób DSC implementuje własną logikę określania, czy wystąpienie znajduje się w żądanym stanie, musi zdefiniować test
właściwość w manifeście. Ta właściwość określa, jak rozszerzenie DSC może wywołać zasób, aby sprawdzić, czy wystąpienie jest w żądanym stanie.
Jeśli ta właściwość nie jest zdefiniowana, rozszerzenie DSC używa syntetycznej metody testowej dla zasobu. Syntetyczna metoda testowa:
- Pobiera rzeczywisty stan wystąpienia przy użyciu metody zasobu
get
. - Porównuje każdą zdefiniowaną właściwość żądanego stanu wystąpienia z rzeczywistym stanem.
- Jeśli żądany stan właściwości nie jest równy rzeczywistemu stanowi tej właściwości, rozszerzenie DSC zgłasza, że wystąpienie nie znajduje się w żądanym stanie.
Ponieważ test syntetyczny sprawdza tylko równoważność, nie może dokładnie przetestować zasobów z właściwościami, których nie można ocenić wyłącznie przy użyciu równoważności. Na przykład jeśli zasób zarządza wersjami pakietów i umożliwia ustawienie wersji na latest
, DSC zgłosi wystąpienie z wersją 3.1.0
jako brak żądanego stanu, nawet jeśli 3.1.0
jest najnowszą wersją pakietu.
W przypadku zasobów z właściwościami, których nie można ocenić samodzielnie, należy zawsze zdefiniować test
właściwość w manifeście.
Rozszerzenie DSC wysyła dane do polecenia na trzy sposoby:
- Gdy
input
parametr mastdin
wartość , ROZSZERZENIE DSC wysyła dane jako ciąg reprezentujący dane jako skompresowany obiekt JSON bez spacji lub nowych linii między właściwościami obiektu. - Gdy
input
parametr maenv
wartość , rozszerzenie DSC wysyła dane jako zmienne środowiskowe. Tworzy zmienną środowiskową dla każdej właściwości w obiekcie danych wejściowych przy użyciu nazwy i wartości właściwości. - Gdy tablica
args
zawiera definicję argumentu wejściowego JSON, rozszerzenie DSC wysyła dane jako ciąg reprezentujący dane jako skompresowany obiekt JSON do określonego argumentu.
Jeśli nie zdefiniujesz właściwości i nie zdefiniujesz input
argumentu wejściowego JSON, rozszerzenie DSC nie może przekazać wejściowego kodu JSON do zasobu. Dla polecenia można zdefiniować tylko jeden argument wejściowy JSON.
Należy zdefiniować input
właściwość , jeden argument wejściowy JSON w tablicy args
właściwości lub oba te elementy.
Przykłady
Przykład 1 — pełna definicja
Ten przykład pochodzi z Microsoft.Windows/Registry
zasobu DSC.
"test": {
"executable": "registry",
"args": [
"config",
"test"
],
"input": "stdin",
"return": "state"
}
Definiuje executable
jako registry
, a nie registry.exe
. Rozszerzenie nie jest wymagane, gdy system operacyjny rozpoznaje polecenie jako plik wykonywalny.
Manifest definiuje dwa argumenty i config
test
. Wartość input
właściwości wskazuje, że test
polecenie oczekuje danych wejściowych jako obiektu blob JSON z stdin
.
W połączeniu z wartością parametru executable
DSC wywołuje metodę test
dla tego zasobu, uruchamiając polecenie:
{ ... } | registry config test
Manifest definiuje return
wartość state
, wskazując, że zwraca tylko rzeczywisty stan zasobu, gdy test
metoda jest uruchamiana.
Wymagane właściwości
Definicja test
musi zawierać następujące właściwości:
Właściwości
Pliku wykonywalnego
Właściwość executable
definiuje nazwę polecenia do uruchomienia. Wartość musi być nazwą polecenia wykrywalnego w zmiennej środowiskowej systemu PATH
lub pełną ścieżką do polecenia. Rozszerzenie pliku jest wymagane tylko wtedy, gdy polecenie nie jest rozpoznawalne przez system operacyjny jako plik wykonywalny.
Type: string
Required: true
args
Właściwość args
definiuje listę argumentów, które mają być przekazywane do polecenia . Argumenty mogą być dowolną liczbą ciągów. Jeśli chcesz przekazać obiekt JSON reprezentujący worek właściwości dla zasobu do argumentu, możesz zdefiniować pojedynczy element w tablicy jako obiekt [JSON], wskazując nazwę argumentu z właściwością jsonInputArg
string i czy argument jest obowiązkowy dla polecenia z właściwością logiczną mandatory
.
Type: array
Required: false
Default: []
Type: [string, object(JSON Input Argument)]
Argumenty ciągów
Każdy element w tablicy argumentów może być ciągiem reprezentującym argument statyczny do przekazania do polecenia, na przykład config
lub --format
.
Type: string
Argument wejściowy JSON
Definiuje argument polecenia, który akceptuje obiekt wejściowy JSON jako ciąg. Rozszerzenie DSC przekazuje dane wejściowe JSON do nazwanego argumentu, jeśli jest dostępny. Argument wejściowy JSON jest definiowany jako obiekt JSON z następującymi właściwościami:
jsonInputArg
(wymagane) — argument do przekazania danych JSON do polecenia, na przykład--input
.mandatory
(opcjonalnie) — wskazuje, czy rozszerzenie DSC powinno zawsze przekazywać argument do polecenia, nawet jeśli nie ma danych wejściowych JSON dla polecenia. W takim przypadku rozszerzenie DSC przekazuje pusty ciąg do argumentu wejściowego JSON.
Można zdefiniować tylko jeden argument wejściowy JSON dla tablicy argumentów.
Jeśli zdefiniujesz argument wejściowy JSON i input
rodzaj polecenia, rozszerzenie DSC wysyła dane JSON na oba sposoby:
- Jeśli definiujesz
input
jakoenv
argument wejściowy JSON i , DSC ustawia zmienną środowiskową dla każdej właściwości w danych wejściowych JSON i przekazuje obiekt wejściowy JSON jako ciąg do zdefiniowanego argumentu. - Jeśli zdefiniujesz
input
stdin
jako i argument wejściowy JSON, DSC przekazuje dane wejściowe JSON przez stdin i jako ciąg do zdefiniowanego argumentu. - Jeśli zdefiniujesz argument wejściowy JSON bez definiowania
input
właściwości, rozszerzenie DSC przekazuje dane wejściowe JSON tylko jako ciąg do zdefiniowanego argumentu.
Jeśli nie zdefiniujesz właściwości i nie zdefiniujesz input
argumentu wejściowego JSON, rozszerzenie DSC nie może przekazać wejściowego kodu JSON do zasobu. Powoduje to, że manifest jest nieprawidłowy. Należy zdefiniować input
właściwość, argument wejściowy JSON w tablicy args
właściwości lub oba te elementy.
Type: object
RequiredProperties: [jsonInputArg]
wejście
Właściwość input
definiuje sposób przekazywania danych wejściowych do zasobu. Jeśli ta właściwość nie jest zdefiniowana, rozszerzenie DSC nie wysyła żadnych danych wejściowych do zasobu podczas wywoływania test
operacji.
Wartość tej właściwości musi być jednym z następujących ciągów:
env
— Wskazuje, że zasób oczekuje, że właściwości wystąpienia mają być określone jako zmienne środowiskowe o tych samych nazwach i wielkości liter.Ta opcja obsługuje tylko następujące typy danych dla właściwości wystąpienia:
boolean
integer
number
string
array
wartościinteger
array
wartościnumber
array
wartościstring
W przypadku wartości innych niż tablica DSC ustawia zmienną środowiskową na określoną wartość, zgodnie z rzeczywistymi wartościami. Gdy typ danych jest tablicą wartości, DSC ustawia zmienną środowiskową jako ciąg rozdzielany przecinkami. Na przykład właściwość
foo
z wartością[1, 2, 3]
jest zapisywana w zmiennej środowiskowejfoo
jako"1,2,3"
.Jeśli zasób musi obsługiwać złożone właściwości z wartością
object
lub tablicami wielo typowymi, ustaw tę wartość nastdin
wartość .stdin
— Wskazuje, że zasób oczekuje obiektu blob JSON reprezentującego wystąpienie zstdin
klasy . Kod JSON musi być zgodny ze schematem wystąpienia zasobu.
Type: string
Required: false
ValidValues: [env, stdin]
return
Właściwość return
określa sposób przetwarzania danych wyjściowych przez rozszerzenie DSC dla tej metody. Wartość tej właściwości musi być jednym z następujących ciągów:
state
— Wskazuje, że zasób zwraca tylko rzeczywisty stan wystąpienia.stateAndDiff
— Wskazuje, że zasób zwraca rzeczywisty stan wystąpienia i tablicę nazw właściwości, które są poza żądanym stanem.
Wartość domyślna to state
.
Type: string
Required: false
Default: state
ValidValues: [state, stateAndDiff]