Многоэтапное упорядоченное выполнение
Многоэтапное упорядоченное выполнение в обновлении устройств Azure для Центр Интернета вещей позволяет выполнять задачи предварительной установки и postinstall при развертывании обновления по сети. Эта возможность входит в схему манифеста обновления устройства версии 4. Дополнительные сведения см. в манифесте обновления устройства.
Многоэтапное упорядоченное выполнение может иметь два типа шагов, встроенных шагов и ссылочных шагов. Встроенный шаг — это инструкция, которая выполняет код и является типом по умолчанию. Шаг ссылки — это шаг, содержащий идентификатор для другого обновления.
Родительские и дочерние обновления
Когда манифест обновления ссылается на другой манифест обновления, манифест верхнего уровня называется родительским обновлением, а манифест, указанный на шаге ссылки, называется дочерним обновлением. Дочернее обновление не может содержать ссылочные шаги, только встроенные шаги. Обновление устройства проверяет это ограничение во время импорта и завершается ошибкой обновления, если оно не выполнено.
Встроенные этапы в родительском обновлении
Агент обновления устройств применяет встроенные шаги, указанные в родительском обновлении на хост-устройстве. Объект ADUC_WorkflowData
, который передается обработчику шагов, который также называется обработчиком содержимого обновления, не содержит Selected Components
никаких данных. Обработчик этого типа шага не должен быть обработчиком Component-Aware
.
Обработчик содержимого шага агента обновления устройств применяет IsInstalled
логику проверки для каждого шага. Обработчик шагов проверяет, установлено ли обновление, проверяя, возвращается ли IsInstalled()
код результата 900
или значение true, и используется ли этот результат для определения того, следует ли выполнить этот шаг. Чтобы избежать переустановки обновления, уже размещенного на устройстве, агент обновления устройств пропускает дальнейшие шаги, если обновление уже установлено.
Чтобы сообщить о результатах обновления, напишите результат выполнения обработчика шага в ADUC_Result
структуру в нужном файле результатов, как указано в параметре --result-file
. На основе результатов выполнения возвращаются 0
успешно и возвращаются -1
или 0xFF
возникают неустранимые ошибки.
Дополнительные сведения см. в разделе "Обработчики шагов" и "Как реализовать настраиваемый обработчик содержимого с поддержкой компонентов".
Эталонные этапы в родительском обновлении
Агент обновления устройств применяет справочные шаги, указанные в родительском обновлении к компонентам или подключенным к устройству узла. При обработке эталонного шага обработчик шага скачивает отсоединяемый файл манифеста обновления, указанный на шаге, и проверяет целостность файла.
Затем обработчик шагов анализирует манифест дочернего обновления и создает ADUC_Workflow
объект, также называемый дочерними данными рабочего процесса, объединяя данные из манифеста дочернего обновления и URL-адреса файла из родительского манифеста обновления. Для данных дочернего рабочего процесса задано level
1
свойство.
Примеры
В следующем примере манифеста обновления есть один встроенный шаг:
{
"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"
}
В следующем примере манифеста обновления есть два встроенных шага:
{
"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"
}
Следующий родительский манифест обновления имеет один ссылочный шаг, который ссылается на дочернее обновление:
{
"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"
}
Дочернее обновление содержит встроенные шаги.
{
"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\""
}
Примечание.
Если вы используете installedCriteria
для определения того, следует ли выполнить шаг, следует предоставить каждому шагу другое installedCriteria
значение в манифесте обновления.
Отключенные манифесты обновлений
Чтобы избежать сбоя развертывания Центр Интернета вещей Azure из-за ограничений размера данных двойника, обновление устройства предоставляет большие манифесты обновления устройствам в виде файлов данных JSON, называемых отсоединяемыми манифестами обновления. При импорте большого обновления содержимого в обновление устройства созданный манифест обновления содержит другой файл Detached Update Manifest
полезных данных, который содержит полные данные манифеста обновления.
Свойство UpdateManifest
в двойнике устройства или модуля содержит отсоединенный файл манифеста обновления. При обработке события PnP PropertyChanged
агент обновления устройств автоматически загружает отсоединяемый файл манифеста обновления и создает ADUC_WorkflowData
объект, содержащий полные данные манифеста обновления.