Udostępnij przez


Wykonywanie uporządkowane w wielu krokach

Wielokrokowe, uporządkowane wykonywanie umożliwia uruchamianie zadań przed instalacją i po instalacji podczas wdrażania aktualizacji zdalnie. Ta funkcja jest częścią schematu Manifest aktualizacji v4 w ramach publicznej wersji zapoznawczej.

Zapoznaj się z dokumentacją manifestu aktualizacji przed przejrzeniem poniższych zmian w ramach publicznej wersji zapoznawczej odświeżonego wydania.

W przypadku wykonywania uporządkowanego w wielu krokach istnieją dwa typy kroków:

  • Krok liniowy (wartość domyślna)
  • Krok odniesienia

Przykładowy manifest aktualizacji za pomocą jednego kroku wbudowanego:

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

Przykładowy manifest aktualizacji z dwoma krokami wbudowanymi:

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

Przykładowy manifest aktualizacji z jednym etapem odniesienia:

  • Aktualizacja rodzica, która odnosi się do aktualizacji dziecka

    {
        "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"
    }
    
  • Aktualizacja dziecka z wbudowanymi krokami

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

Uwaga / Notatka

W manifeście aktualizacji każdy krok powinien mieć inny zainstalowany ciągCriteria , jeśli ten ciąg jest używany do określenia, czy krok ma być wykonywany, czy nie.

Aktualizacje nadrzędne i aktualizacje podrzędne

Gdy manifesty aktualizacji odwołują się do siebie nawzajem, manifest najwyższego poziomu jest nazywany aktualizacją nadrzędną , a manifest określony w kroku odwołania jest nazywany aktualizacją podrzędną.

Obecnie aktualizacja dla dzieci nie może zawierać żadnych kroków odwołania. To ograniczenie jest weryfikowane w czasie importowania i jeśli nie nastąpi wykonanie importu, zakończy się niepowodzeniem.

Wbudowane kroki aktualizacji nadrzędnej

Kroki bezpośrednie określone w aktualizacji głównej są stosowane na urządzenie hosta. W tym miejscu obiekt ADUC_WorkflowData jest przekazywany do obsługi kroków (nazywanej również obsługą zawartości aktualizacji) i nie będzie zawierał danych Selected Components. Procedura obsługi tego typu kroku nie powinna być procedurą Component-Aware obsługi.

Procedura obsługi zawartości stosuje logikę weryfikacji IsInstalled dla każdego kroku. Procedura obsługi kroków agenta aktualizacji urządzenia sprawdza, czy określona aktualizacja jest już zainstalowana, sprawdzając, czy IsInstalled() zwrócił kod wyniku "900", co oznacza "prawda". Jeśli aktualizacja jest już zainstalowana, aby uniknąć ponownej instalacji aktualizacji, która jest już zainstalowana na urządzeniu, agent DU pominie przyszłe kroki, ponieważ użyjemy go do określenia, czy wykonać ten krok, czy nie.

Aby zgłosić wynik aktualizacji, wynik wykonania obsługującego kroki musi zostać zapisany w strukturze ADUC_Result do żądanego pliku wynikowego określonego w opcji --result-file. Następnie na podstawie wyników wykonania w przypadku powodzenia zwracana jest wartość 0, a w przypadku wszelkich błędów krytycznych wartość -1 lub 0xFF.

Aby uzyskać więcej informacji, zobacz Procedura obsługi zawartości i Implementowanie niestandardowej obsługi zawartości obsługującej składniki.

Kroki odwołania w aktualizacji nadrzędnej

Kroki referencyjne określone w aktualizacji nadrzędnej są stosowane do składników na urządzeniu hosta lub połączonych z nim. Krok referencyjny to krok zawierający identyfikator aktualizacji innej aktualizacji, nazywany aktualizacją podrzędną.

Podczas przetwarzania kroku odniesienia, procedura obsługi najpierw pobiera odłączony plik manifestu aktualizacji określony w danych kroku odniesienia, a następnie weryfikuje integralność pliku. Następnie procedura obsługi analizuje manifest aktualizacji podrzędnej i tworzy obiekt ADUC_Workflow (nazywany również danymi podrzędnego przepływu pracy), łącząc dane z manifestu aktualizacji podrzędnej i adresy URL plików z manifestu aktualizacji nadrzędnej. Te podrzędne dane przepływu pracy mają również właściwość "level" ustawioną na wartość "1".

Uwaga / Notatka

Obecnie aktualizacje dla dzieci nie mogą zawierać żadnych kroków odwołania.

Odłączone manifesty aktualizacji

Aby uniknąć niepowodzenia wdrażania z powodu limitów rozmiaru danych bliźniaka IoT Hub, każdy duży manifest aktualizacji zostanie dostarczony w postaci pliku danych JSON, nazywanego również odłączonym manifestem aktualizacji.

Jeśli aktualizacja z dużą zawartością zostanie zaimportowana do usługi Device Update dla usługi IoT Hub, wygenerowany manifest aktualizacji będzie zawierać inny plik ładunku o nazwie Detached Update Manifest, który zawiera pełne dane manifestu aktualizacji.

Właściwość UpdateManifest w bliźniaku urządzenia lub modułu będzie zawierać informacje o wyodrębnionym pliku manifestu aktualizacji.

Podczas przetwarzania zdarzenia zmiany właściwości PnP agent aktualizacji urządzenia automatycznie pobierze odłączony plik manifestu aktualizacji i utworzy obiekt ADUC_WorkflowData zawierający pełne dane manifestu aktualizacji.