Partilhar via


Referência do esquema da propriedade de teste do manifesto de recurso do DSC

Sinopse

Define como testar se uma instância de Recurso do DSC está no estado pretendido.

Metadados

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

Description

Se um Recurso DSC implementar a sua própria lógica para determinar se uma instância está no estado pretendido, tem de definir a test propriedade no respetivo manifesto. Esta propriedade define como o DSC pode chamar o recurso para testar se uma instância está no estado pretendido.

Quando esta propriedade não está definida, o DSC utiliza um método de teste sintético para o recurso. O método de teste sintético:

  1. Obtém o estado real da instância com o método do get recurso.
  2. Compara todas as propriedades definidas do estado pretendido da instância com o estado real.
  3. Se o estado pretendido de uma propriedade não for igual ao estado real dessa propriedade, o DSC comunica que a instância não está no estado pretendido.

Uma vez que o teste sintético apenas verifica a equivalência, não pode testar com precisão recursos com propriedades que não podem ser avaliadas apenas com equivalência. Por exemplo, se um recurso gerir as versões do pacote e permitir definir a versão como latest, o DSC reportará uma instância com uma versão de 3.1.0 como estando fora do estado pretendido, mesmo que 3.1.0 seja a versão mais recente do pacote.

Para recursos com propriedades que não podem ser avaliados apenas por equivalência, defina sempre a test propriedade no manifesto.

O DSC envia dados para o comando de três formas:

  1. Quando input é stdin, o DSC envia os dados como uma cadeia que representa os dados como um objeto JSON comprimido sem espaços ou novas linhas entre as propriedades do objeto.
  2. Quando input é env, o DSC envia os dados como variáveis de ambiente. Cria uma variável de ambiente para cada propriedade no objeto de dados de entrada, utilizando o nome e o valor da propriedade.
  3. Quando a args matriz inclui uma definição de argumento de entrada JSON, o DSC envia os dados como uma cadeia que representa os dados como um objeto JSON comprimido para o argumento especificado.

Se não definir a input propriedade e não definir um argumento de entrada JSON, o DSC não poderá transmitir o JSON de entrada para o recurso. Só pode definir um argumento de entrada JSON para um comando.

Tem de definir a input propriedade, um argumento de entrada JSON na matriz de args propriedades ou ambos.

Exemplos

Exemplo 1 - Definição completa

Este exemplo é do Recurso do Microsoft.Windows/Registry DSC.

"test": {
  "executable": "registry",
  "args": [
    "config",
    "test"
  ],
  "input": "stdin",
  "return": "state"
}

Define executable como registry, em vez de registry.exe. A extensão não é necessária quando o sistema operativo reconhece o comando como um executável.

O manifesto define dois argumentos config e test. O valor da input propriedade indica que o comando espera a test respetiva entrada como um blob JSON de stdin.

Combinado com o valor para executable, o DSC chama o test método para este recurso ao executar:

{ ... } | registry config test

O manifesto define return como state, indicando que só devolve o estado real do recurso quando o test método é executado.

Propriedades Necessárias

A test definição tem de incluir estas propriedades:

Propriedades

executável

A executable propriedade define o nome do comando a executar. O valor tem de ser o nome de um comando detetável na variável de ambiente do PATH sistema ou o caminho completo para o comando. Uma extensão de ficheiro só é necessária quando o comando não é reconhecível pelo sistema operativo como executável.

Type:     string
Required: true

args

A args propriedade define a lista de argumentos a transmitir para o comando . Os argumentos podem ser qualquer número de cadeias. Se quiser transmitir o objeto JSON que representa o saco de propriedades do recurso para um argumento, pode definir um único item na matriz como um [objeto JSON], indicando o nome do argumento com a jsonInputArg propriedade de cadeia e se o argumento é obrigatório para o comando com a mandatory propriedade booleana.

Type:     array
Required: false
Default:  []
Type:     [string, object(JSON Input Argument)]

Argumentos de cadeia

Qualquer item na matriz de argumentos pode ser uma cadeia que representa um argumento estático para passar para o comando, como config ou --format.

Type: string

Argumento de entrada JSON

Define um argumento para o comando que aceita o objeto de entrada JSON como uma cadeia. O DSC transmite a entrada JSON para o argumento com nome quando disponível. Um argumento de entrada JSON é definido como um objeto JSON com as seguintes propriedades:

  • jsonInputArg (obrigatório) – o argumento para transmitir os dados JSON para para o comando, como --input.
  • mandatory (opcional) - Indique se o DSC deve passar sempre o argumento para o comando, mesmo quando não existe nenhuma entrada JSON para o comando. Nesse caso, o DSC transmite uma cadeia vazia ao argumento de entrada JSON.

Só pode definir um argumento de entrada JSON por matriz de argumentos.

Se definir um argumento de entrada JSON e um input tipo para um comando, o DSC envia os dados JSON de ambas as formas:

  • Se definir input como env e um argumento de entrada JSON, o DSC define uma variável de ambiente para cada propriedade na entrada JSON e transmite o objeto de entrada JSON como uma cadeia para o argumento definido.
  • Se definir input como stdin e um argumento de entrada JSON, o DSC transmite a entrada JSON sobre stdin e como uma cadeia para o argumento definido.
  • Se definir um argumento de entrada JSON sem definir a propriedade, o input DSC só transmite a entrada JSON como uma cadeia para o argumento definido.

Se não definir a input propriedade e não definir um argumento de entrada JSON, o DSC não poderá transmitir o JSON de entrada para o recurso. Isto torna o manifesto inválido. Tem de definir a input propriedade, um argumento de entrada JSON na matriz de args propriedades ou ambos.

Type:                object
RequiredProperties: [jsonInputArg]

entrada

A input propriedade define como transmitir entradas para o recurso. Se esta propriedade não estiver definida, o DSC não enviará nenhuma entrada para o recurso ao invocar a test operação.

O valor desta propriedade tem de ser uma das seguintes cadeias:

  • env - Indica que o recurso espera que as propriedades de uma instância sejam especificadas como variáveis de ambiente com os mesmos nomes e maições.

    Esta opção suporta apenas os seguintes tipos de dados para propriedades de instância:

    • boolean
    • integer
    • number
    • string
    • array de integer valores
    • array de number valores
    • array de string valores

    Para valores que não sejam de matriz, o DSC define a variável de ambiente para o valor especificado tal como está. Quando o tipo de dados é uma matriz de valores, o DSC define a variável de ambiente como uma cadeia delimitada por vírgulas. Por exemplo, a propriedade foo com um valor de [1, 2, 3] é guardada na variável de foo ambiente como "1,2,3".

    Se o recurso precisar de suportar propriedades complexas com um object valor ou matrizes de vários tipos, defina esta opção como stdin .

  • stdin - Indica que o recurso espera um blob JSON que representa uma instância de stdin. O JSON tem de cumprir o esquema da instância do recurso.

Type:        string
Required:    false
ValidValues: [env, stdin]

regressar

A return propriedade define como o DSC deve processar a saída para este método. O valor desta propriedade tem de ser uma das seguintes cadeias:

  • state - Indica que o recurso devolve apenas o estado real da instância.
  • stateAndDiff - Indica que o recurso devolve o estado real da instância e uma matriz de nomes de propriedades que estão fora do estado pretendido.

O valor predefinido é state.

Type:        string
Required:    false
Default:     state
ValidValues: [state, stateAndDiff]