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 900
wordt 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.