Delen via


Uitvoering met meerdere taken

Met meerdere stappen uitgevoerde uitvoering in Azure Device Update voor IoT Hub kunt u taken vooraf installeren en na installatie uitvoeren wanneer u een over-the-air-update implementeert. Deze mogelijkheid maakt deel uit van het schema van het updatemanifest van Device Update versie 4. Zie het updatemanifest van Device Update voor meer informatie.

Uitvoering met meerdere stappen kan twee typen stappen, inlinestappen en referentiestappen hebben. Een inlinestap is een instructie die code uitvoert en het standaardtype is. Een referentiestap is een stap die een id voor een andere update bevat.

Bovenliggende updates en onderliggende updates

Wanneer een updatemanifest verwijst naar een ander updatemanifest, wordt het manifest op het hoogste niveau de bovenliggende update genoemd en wordt het manifest dat is opgegeven in de referentiestap een onderliggende update genoemd. Een onderliggende update kan geen verwijzingsstappen bevatten, alleen inlinestappen. Device Update valideert deze beperking tijdens het importeren en mislukt de update als niet wordt voldaan.

Inlinestappen in een bovenliggende update

De Device Update-agent past inlinestappen toe die zijn opgegeven in een bovenliggende update op het hostapparaat. Het ADUC_WorkflowData object dat wordt doorgegeven aan de staphandler, ook wel een update-inhoudshandler genoemd, bevat Selected Components geen gegevens. De handler voor dit type stap mag geen handler zijn Component-Aware .

De stapinhoudshandler van de Device Update-agent past IsInstalled validatielogica toe voor elke stap. De staphandler controleert of de update al is geïnstalleerd door te controleren of IsInstalled() resultaatcode 900wordt geretourneerd, of waar, en gebruikt dit resultaat om te bepalen of de stap moet worden uitgevoerd. Om te voorkomen dat u een update opnieuw installeert die al op het apparaat staat, slaat de Device Update-agent toekomstige stappen over als er al een update is geïnstalleerd.

Als u een updateresultaat wilt rapporteren, schrijft u het resultaat van een staphandleruitvoering naar de ADUC_Result struct in een gewenst resultaatbestand zoals opgegeven in de --result-file optie. Op basis van de resultaten van de uitvoering retourneert u resultaten 0 en retourneert -1 u of 0xFF voor fatale fouten.

Zie Stap-handlers en een aangepaste inhoudshandler implementeren die op onderdelen van toepassing is.

Naslagstappen in een bovenliggende update

De Device Update-agent past referentiestappen toe die zijn opgegeven in een bovenliggende update op onderdelen waarop of verbonden is met het hostapparaat. Wanneer een referentiestap wordt verwerkt, downloadt de staphandler een losgekoppeld updatemanifestbestand dat is opgegeven in de stap en valideert de bestandsintegriteit.

De staphandler parseert vervolgens het onderliggende updatemanifest en maakt een ADUC_Workflow object, ook wel onderliggende werkstroomgegevens genoemd, door de gegevens uit het onderliggende updatemanifest en de url-informatie van het bovenliggende updatemanifest te combineren. Deze onderliggende werkstroomgegevens hebben een level eigenschap ingesteld op 1.

Voorbeelden

Het volgende voorbeeld van een updatemanifest heeft één inlinestap:

{
    "updateId": {...},
    "isDeployable": true,
    "compatibility": [
        {
            "manufacturer": "du-device",
            "model": "e2e-test"
        }
    ],
    "instructions": {
        "steps": [
            {
                "description": "Example APT update that installs 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"
}

Het volgende voorbeeld van het updatemanifest heeft twee inlinestappen:

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

Het volgende bovenliggende updatemanifest heeft één referentiestap die verwijst naar een onderliggende update:

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

De onderliggende update bevat inlinestappen.

{
    "updateId": {
        "provider": "contoso",
        "name": "virtual-camera",
        "version": "1.2"
    },
    "isDeployable": false,
    "compatibility": [
        {
            "group": "cameras"
        }
    ],
    "instructions": {
        "steps": [
            {
                "description": "Cameras Update - preinstall 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 - postinstall 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-step-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

Als u wilt installedCriteria bepalen of de stap moet worden uitgevoerd, moet u elke stap een andere installedCriteria waarde geven in het updatemanifest.

Losgekoppelde updatemanifesten

Om implementatiefouten te voorkomen vanwege de limieten voor gegevensgrootten van Azure IoT Hub-dubbels, levert Device Update grote updatemanifesten aan apparaten als JSON-gegevensbestanden met de naam losgekoppelde updatemanifesten. Wanneer u een grote inhoudsupdate importeert in Device Update, bevat het gegenereerde updatemanifest een ander payloadbestand met de naam Detached Update Manifest, dat de volledige updatemanifestgegevens bevat.

De UpdateManifest eigenschap in het apparaat of de moduledubbel bevat de gegevens van het manifestbestand losgekoppeld. Wanneer de PnP-gebeurtenis PropertyChanged wordt verwerkt, downloadt de Device Update-agent automatisch het losgekoppelde updatemanifestbestand en maakt het een ADUC_WorkflowData object dat de volledige updatemanifestgegevens bevat.