Wykonywanie uporządkowane wieloetapowe
Wieloetapowe uporządkowane wykonanie w usłudze Azure Device Update dla usługi IoT Hub umożliwia uruchamianie zadań preinstalacji i postinstalacji podczas wdrażania aktualizacji za pośrednictwem powietrza. Ta funkcja jest częścią schematu manifestu aktualizacji aktualizacji urządzenia w wersji 4. Aby uzyskać więcej informacji, zobacz Manifest aktualizacji urządzenia.
Wykonywanie uporządkowane wieloetapowe może zawierać dwa typy kroków, wbudowane kroki i kroki referencyjne. Wbudowany krok to instrukcja, która wykonuje kod i jest typem domyślnym. Krok referencyjny to krok zawierający identyfikator innej aktualizacji.
Aktualizacje nadrzędne i aktualizacje podrzędne
Gdy manifest aktualizacji odwołuje się do innego manifestu aktualizacji, manifest najwyższego poziomu jest nazywany aktualizacją nadrzędną, a manifest określony w kroku odwołania jest nazywany aktualizacją podrzędną. Aktualizacja podrzędna nie może zawierać żadnych kroków odwołania, tylko kroków wbudowanych. Usługa Device Update weryfikuje to ograniczenie w czasie importowania i kończy się niepowodzeniem aktualizacji, jeśli nie zostanie ona spełnina.
Wbudowane kroki aktualizacji nadrzędnej
Agent usługi Device Update stosuje wbudowane kroki określone w aktualizacji nadrzędnej urządzenia hosta. Obiekt ADUC_WorkflowData
, który przechodzi do procedury obsługi kroków, nazywany również procedurą obsługi zawartości aktualizacji, nie zawiera żadnych Selected Components
danych. Procedura obsługi tego typu kroku nie powinna być procedurą Component-Aware
obsługi.
Procedura obsługi zawartości kroku agenta usługi Device Update stosuje IsInstalled
logikę walidacji dla każdego kroku. Procedura obsługi kroków sprawdza, czy aktualizacja jest już zainstalowana, sprawdzając, czy IsInstalled()
zwraca kod 900
wyniku , czy wartość true, i używa tego wyniku, aby określić, czy wykonać krok. Aby uniknąć ponownej instalacji aktualizacji, która jest już zainstalowana na urządzeniu, agent aktualizacji urządzeń pomija przyszłe kroki, jeśli aktualizacja jest już zainstalowana.
Aby zgłosić wynik aktualizacji, zapisz wynik wykonania procedury obsługi kroków do ADUC_Result
struktury w żądanym pliku wynikowym --result-file
określonym w opcji. Na podstawie wyników wykonania wróć 0
do powodzenia i powrotu lub 0xFF
w -1
przypadku błędów krytycznych.
Aby uzyskać więcej informacji, zobacz Procedury obsługi kroków i Jak zaimplementować niestandardową procedurę obsługi zawartości obsługującej składniki.
Kroki odwołania w aktualizacji nadrzędnej
Agent usługi Device Update stosuje kroki referencyjne określone w aktualizacji nadrzędnej do składników na urządzeniu hosta lub połączone z nim. Podczas przetwarzania kroku odniesienia procedura obsługi kroków pobiera odłączony plik manifestu aktualizacji określony w kroku i weryfikuje integralność pliku.
Procedura obsługi kroków analizuje manifest aktualizacji podrzędnej i tworzy ADUC_Workflow
obiekt, nazywany również podrzędnymi danymi przepływu pracy, łącząc dane z manifestu aktualizacji podrzędnej i informacje o adresie URL pliku z manifestu aktualizacji nadrzędnej. Te podrzędne dane przepływu pracy mają właściwość ustawioną level
na 1
.
Przykłady
Poniższy przykładowy manifest aktualizacji ma jeden krok wbudowany:
{
"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"
}
Poniższy przykładowy manifest aktualizacji ma dwa wbudowane kroki:
{
"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"
}
Następujący manifest aktualizacji nadrzędnej zawiera jeden krok odwołania, który odwołuje się do aktualizacji podrzędnej:
{
"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"
}
Aktualizacja podrzędna zawiera wbudowane kroki.
{
"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\""
}
Uwaga
Jeśli używasz installedCriteria
metody do określenia, czy krok powinien zostać wykonany, należy nadać każdemu krokowi inną installedCriteria
wartość w manifeście aktualizacji.
Odłączone manifesty aktualizacji
Aby uniknąć niepowodzenia wdrażania z powodu limitów rozmiaru danych bliźniaczych reprezentacji usługi Azure IoT Hub, usługa Device Update dostarcza do urządzeń duże manifesty aktualizacji jako pliki danych JSON nazywane manifestami odłączonych aktualizacji. Podczas importowania dużej aktualizacji zawartości do aktualizacji urządzenia wygenerowany manifest aktualizacji zawiera inny plik ładunku o nazwie Detached Update Manifest
, który zawiera pełne dane manifestu aktualizacji.
Właściwość UpdateManifest
w bliźniaczej reprezentacji urządzenia lub modułu zawiera informacje o odłączonym pliku manifestu aktualizacji. Podczas przetwarzania zdarzenia PnP PropertyChanged
agent aktualizacji urządzenia automatycznie pobiera odłączony plik manifestu aktualizacji i tworzy ADUC_WorkflowData
obiekt zawierający pełne dane manifestu aktualizacji.