Delen via


Geordende uitvoering met meerdere stappen

Uitvoering met meerdere stappen biedt u de mogelijkheid om taken vooraf en na de installatie uit te voeren bij het implementeren van een draadloze update. Deze mogelijkheid maakt deel uit van het schema Manifest voor openbare preview-vernieuwingsupdate v4.

Raadpleeg de documentatie updatemanifest voordat u de volgende wijzigingen bekijkt als onderdeel van de openbare preview-vernieuwingsrelease.

Bij uitvoering met meerdere stappen zijn er twee soorten stappen:

  • Inlinestap (standaard)
  • Referentiestap

Een voorbeeld van een updatemanifest met één inlinestap:

{
    "updateId": {...},
    "isDeployable": true,
    "compatibility": [
        {
            "deviceManufacturer": "du-device",
            "deviceModel": "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"
}

Een voorbeeld van een updatemanifest met twee inlinestappen:

{
    "updateId": {...},
    "isDeployable": true,
    "compatibility": [
        {
            "deviceManufacturer": "du-device",
            "deviceModel": "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"
}

Een voorbeeld van een updatemanifest met één referentiestap:

  • De bovenliggende update die verwijst naar een onderliggende update

    {
        "updateId": {...},
        "isDeployable": true,
        "compatibility": [
            {
                "deviceManufacturer": "du-device",
                "deviceModel": "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"
    }
    
  • De onderliggende update met inlinestappen

    {
        "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\""
    }
    

Notitie

In het updatemanifest moet elke stap een andere tekenreeks installedCriteria hebben als die tekenreeks wordt gebruikt om te bepalen of de stap moet worden uitgevoerd of niet.

Bovenliggende updates en onderliggende updates

Wanneer updatemanifesten naar elkaar verwijzen, wordt het manifest op het hoogste niveau de bovenliggende update genoemd en wordt een manifest dat is opgegeven in een referentiestap een onderliggende update genoemd.

Op dit moment kan een onderliggende update geen referentiestappen bevatten. Deze beperking wordt gevalideerd tijdens het importeren en als dit niet wordt gevolgd, mislukt het importeren.

Inlinestappen in een bovenliggende update

Inlinestap(s) die zijn opgegeven in een bovenliggende update, worden toegepast op het hostapparaat. Hier wordt het ADUC_WorkflowData-object dat wordt doorgegeven aan een staphandler (ook wel een update-inhoudshandler genoemd) en dat de Selected Components gegevens niet bevat. De handler voor dit type stap mag geen handler zijn Component-Aware .

De inhoudshandler voor stappen past isInstalled-validatielogica toe voor elke stap. De staphandler van de Device Update-agent controleert of bepaalde update al is geïnstalleerd door te controleren of IsInstalled() heeft geresulteerd in een resultaatcode '900', wat 'true' betekent. Als er al een update is geïnstalleerd, slaat de DU-agent toekomstige stappen over om te voorkomen dat een update die al op het apparaat is geïnstalleerd, opnieuw moet worden geïnstalleerd, omdat deze wordt gebruikt om te bepalen of de stap moet worden uitgevoerd.

Als u een updateresultaat wilt rapporteren, moet het resultaat van de uitvoering van een staphandler worden geschreven naar ADUC_Result struct in een bestand met gewenste resultaten, zoals opgegeven in de optie --result-file. Retourneer vervolgens op basis van de resultaten van de uitvoering voor succes 0, voor eventuele fatale fouten -1 of 0xFF.

Zie Stappen voor inhoudshandler en Een aangepaste onderdeelbewuste inhoudshandler implementeren voor meer informatie.

Naslagstappen in een bovenliggende update

Referentiestap(s) die zijn opgegeven in een bovenliggende update, worden toegepast op onderdelen op of verbonden met het hostapparaat. Een referentiestap is een stap die de update-id van een andere update bevat, een zogenaamde onderliggende update.

Bij het verwerken van een verwijzingsstap downloadt de stappenhandler een losgekoppeld updatemanifestbestand dat is opgegeven in de referentiestapgegevens, waarna de bestandsintegriteit wordt gevalideerd. Vervolgens parseert de stappenhandler het onderliggende updatemanifest en maakt een ADUC_Workflow-object (ook wel onderliggende werkstroomgegevens genoemd) door de gegevens uit het onderliggende updatemanifest en bestands-URL's uit het bovenliggende updatemanifest te combineren. Voor deze onderliggende werkstroomgegevens is ook de eigenschap 'niveau' ingesteld op '1'.

Notitie

Op dit moment kunnen onderliggende updates geen referentiestappen bevatten.

Losgekoppelde updatemanifesten

Om een implementatiefout vanwege IoT Hub limieten voor dubbele gegevensgrootte te voorkomen, wordt elk groot updatemanifest geleverd in de vorm van een JSON-gegevensbestand, ook wel een losgekoppeld updatemanifest genoemd.

Als een update met grote inhoud wordt geïmporteerd in Device Update for IoT Hub, bevat het gegenereerde updatemanifest een ander nettoladingbestand met de naam Detached Update Manifest, dat de volledige gegevens van het updatemanifest bevat.

De UpdateManifest eigenschap in de apparaat- of moduledubbel bevat de gegevens van het losgekoppelde updatemanifestbestand.

Bij het verwerken van de gewijzigde PnP-eigenschapsgebeurtenis, downloadt de Device Update-agent automatisch het losgekoppelde updatemanifestbestand en maakt een ADUC_WorkflowData-object dat de volledige updatemanifestgegevens bevat.