Partilhar via


Execução ordenada em vários passos

A execução ordenada em vários passos dá-lhe a capacidade de executar tarefas de pré-instalação e pós-instalação ao implementar uma atualização através do ar. Esta capacidade faz parte do esquema Do Manifesto de Atualização de Atualização de Pré-visualização Pública v4.

Veja a documentação Atualizar Manifesto antes de rever as seguintes alterações como parte da versão de atualização de pré-visualização pública.

Com a execução ordenada de vários passos, existem dois tipos de passos:

  • Passo inline (predefinição)
  • Passo de referência

Um manifesto de atualização de exemplo com um passo inline:

{
    "updateId": {...},
    "isDeployable": true,
    "compatibility": [
        {
            "manufacturer": "du-device",
            "model": "e2e-test"
        }
    ],
    "instructions": {
        "steps": [
            {
                "description": "Example APT update that install libcurl4-doc on a host device.",
                "handler": "microsoft/apt:1",
                "files": [
                    "apt-manifest-1.0.json"
                ],
                "handlerProperties": {
                    "installedCriteria": "apt-update-test-1.0"
                }
            }
        ]
    },
    "manifestVersion": "4.0",
    "importedDateTime": "2021-11-16T14:54:55.8858676Z",
    "createdDateTime": "2021-11-16T14:50:47.3511877Z"
}

Um manifesto de atualização de exemplo com dois passos inline:

{
    "updateId": {...},
    "isDeployable": true,
    "compatibility": [
        {
            "manufacturer": "du-device",
            "model": "e2e-test"
        }
    ],
    "instructions": {
        "steps": [
            {
                "description": "Install libcurl4-doc on host device",
                "handler": "microsoft/apt:1",
                "files": [
                    "apt-manifest-1.0.json"
                ],
                "handlerProperties": {
                    "installedCriteria": "apt-update-test-2.2"
                }
            },
            {
                "description": "Install tree on host device",
                "handler": "microsoft/apt:1",
                "files": [
                    "apt-manifest-tree-1.0.json"
                ],
                "handlerProperties": {
                    "installedCriteria": "apt-update-test-tree-2.2"
                }
            }
        ]
    },
    "manifestVersion": "4.0",
    "importedDateTime": "2021-11-16T20:21:33.6514738Z",
    "createdDateTime": "2021-11-16T20:19:29.4019035Z"
}

Um exemplo de manifesto de atualização com um passo de referência:

  • A atualização principal que referencia uma atualização subordinada

    {
        "updateId": {...},
        "isDeployable": true,
        "compatibility": [
            {
                "manufacturer": "du-device",
                "model": "e2e-test"
            }
        ],
        "instructions": {
            "steps": [
                {
                    "type": "reference",
                    "description": "Cameras Firmware Update",
                    "updateId": {
                        "provider": "contoso",
                        "name": "virtual-camera",
                        "version": "1.2"
                    }
                }
            ]
        },
        "manifestVersion": "4.0",
        "importedDateTime": "2021-11-17T07:26:14.7484389Z",
        "createdDateTime": "2021-11-17T07:22:10.6014567Z"
    }
    
  • A atualização subordinada com passos inline

    {
        "updateId": {
            "provider": "contoso",
            "name": "virtual-camera",
            "version": "1.2"
        },
        "isDeployable": false,
        "compatibility": [
            {
                "group": "cameras"
            }
        ],
        "instructions": {
            "steps": [
                {
                    "description": "Cameras Update - pre-install step",
                    "handler": "microsoft/script:1",
                    "files": [
                        "contoso-camera-installscript.sh"
                    ],
                    "handlerProperties": {
                        "scriptFileName": "contoso-camera-installscript.sh",
                        "arguments": "--pre-install-sim-success --component-name --component-name-val --component-group --component-group-val --component-prop path --component-prop-val path",
                        "installedCriteria": "contoso-virtual-camera-1.2-step-0"
                    }
                },
                {
                    "description": "Cameras Update - firmware installation (failure - missing file)",
                    "handler": "microsoft/script:1",
                    "files": [
                        "contoso-camera-installscript.sh",
                        "camera-firmware-1.1.json"
                    ],
                    "handlerProperties": {
                        "scriptFileName": "missing-contoso-camera-installscript.sh",
                        "arguments": "--firmware-file camera-firmware-1.1.json --component-name --component-name-val --component-group --component-group-val --component-prop path --component-prop-val path",
                        "installedCriteria": "contoso-virtual-camera-1.2-step-1"
                    }
                },
                {
                    "description": "Cameras Update - post-install step",
                    "handler": "microsoft/script:1",
                    "files": [
                        "contoso-camera-installscript.sh"
                    ],
                    "handlerProperties": {
                        "scriptFileName": "contoso-camera-installscript.sh",
                        "arguments": "--post-install-sim-success --component-name --component-name-val --component-group --component-group-val --component-prop path --component-prop-val path",
                        "installedCriteria": "contoso-virtual-camera-1.2-stop-2"
                    }
                }
            ]
        },
        "referencedBy": [
            {
                "provider": "DU-Client-Eng",
                "name": "MSOE-Update-Demo",
                "version": "3.1"
            }
        ],
        "manifestVersion": "4.0",
        "importedDateTime": "2021-11-17T07:26:14.7376536Z",
        "createdDateTime": "2021-11-17T07:22:09.2232968Z",
        "etag": "\"ad7a553d-24a8-492b-9885-9af424d44d58\""
    }
    

Nota

No manifesto de atualização, cada passo deve ter uma cadeia installedCriteria diferente se essa cadeia estiver a ser utilizada para determinar se o passo deve ou não ser executado.

Atualizações principais e atualizações subordinadas

Quando os manifestos de atualização fazem referência entre si, o manifesto de nível superior é denominado atualização principal e um manifesto especificado num passo de referência é denominado atualização subordinada.

Atualmente, uma atualização subordinada não pode conter quaisquer passos de referência. Esta restrição é validada no momento da importação e, se não for seguida, a importação falhará.

Passos inline numa atualização principal

Os passos inline especificados numa atualização principal são aplicados ao dispositivo anfitrião. Aqui, o objeto ADUC_WorkflowData que é transmitido para um processador de passos (também conhecido como processador de conteúdos de atualização) e não irá conter os Selected Components dados. O processador para este tipo de passo não deve ser um Component-Aware processador.

Os passos do processador de conteúdos aplicam a lógica de validação IsInstalled para cada passo. O processador de passos do agente de Atualização de Dispositivos verifica se uma atualização específica já está instalada ao verificar se IsInstalled() resultou num código de resultado "900" que significa "verdadeiro". Se uma atualização já estiver instalada, para evitar reinstalar uma atualização que já se encontra no dispositivo, o agente DU ignorará passos futuros porque a utilizamos para determinar se deve ou não executar o passo.

Para comunicar um resultado de atualização, o resultado de uma execução do processador de passos tem de ser escrito em ADUC_Result estrutura num ficheiro de resultado pretendido, conforme especificado na opção --result-file. Em seguida, com base nos resultados da execução, para o êxito devolver 0, para quaisquer erros fatais devolvem -1 ou 0xFF.

Para obter mais informações, veja Steps content handler and Implementing a custom component-aware content handler (Passos do processador de conteúdos) e Implementing a custom component-aware content handler (Implementar um processador de conteúdos com suporte para componentes personalizado).

Passos de referência numa atualização principal

Os passos de referência especificados numa atualização principal são aplicados a componentes ligados ou ligados ao dispositivo anfitrião. Um passo de referência é um passo que contém o identificador de atualização de outra atualização, denominada atualização subordinada.

Ao processar um passo de referência, o processador de passos transfere um ficheiro de manifesto de atualização desanexado especificado nos dados do passo de referência e, em seguida, valida a integridade do ficheiro. Em seguida, o processador de passos analisa o manifesto de atualização subordinado e cria um objeto ADUC_Workflow (também conhecido como dados de fluxo de trabalho subordinados) ao combinar os dados do manifesto de atualização subordinada e as informações dos URLs de ficheiro do manifesto de atualização principal. Estes dados de fluxo de trabalho subordinados também têm uma propriedade "level" definida como "1".

Nota

Atualmente, as atualizações subordinadas não podem conter quaisquer passos de referência.

Manifestos de atualização desanexados

Para evitar a falha de implementação devido a Hub IoT limites de tamanho de dados duplos, qualquer manifesto de atualização grande será fornecido sob a forma de um ficheiro de dados JSON, também denominado manifesto de atualização desanexado.

Se for importada uma atualização com conteúdo grande para a Atualização de Dispositivos para Hub IoT, o manifesto de atualização gerado conterá outro ficheiro de payload chamado Detached Update Manifest, que contém os dados completos do Manifesto de Atualização.

A UpdateManifest propriedade no dispositivo ou módulo duplo irá conter as informações do ficheiro de manifesto de atualização desanexada.

Ao processar o evento alterado da propriedade PnP, o agente de Atualização de Dispositivos transfere automaticamente o ficheiro de manifesto de atualização desanexado e cria um objeto ADUC_WorkflowData que contém os dados de manifesto de atualização completos.