Ejecución ordenada en varios pasos

La ejecución ordenada en varios pasos ofrece la posibilidad de ejecutar tareas previas a la instalación y posteriores a la instalación al implementar una actualización inalámbrica. Esta funcionalidad forma parte del esquema de la versión 4 del manifiesto de actualización de la vista previa pública.

Consulte la documentación del Manifiesto de Actualización antes de revisar los siguientes cambios como parte de la publicación de la versión preliminar pública.

Con la ejecución ordenada en varios pasos hay dos tipos de pasos:

  • Paso en línea (valor predeterminado)
  • Paso de referencia

Un manifiesto de actualización de ejemplo con un paso integrado.

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

Un manifiesto de actualización de ejemplo con dos pasos en línea:

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

Un ejemplo de manifiesto de actualización con un paso de referencia:

  • Actualización padre que hace referencia a una actualización hijo

    {
        "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"
    }
    
  • Actualización de niño con pasos en línea

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

Nota:

En el manifiesto de actualización, cada paso debe tener una cadena installedCriteria diferente si se usa esa cadena para determinar si el paso debe realizarse o no.

Actualizaciones primarias y secundarias

Cuando los manifiestos de actualización se hacen referencia entre sí, el manifiesto de nivel superior se denomina actualización primaria y un manifiesto especificado en un paso de referencia se denomina actualización secundaria.

Actualmente, una actualización de niño no puede contener ningún paso de referencia. Esta restricción se valida en el momento de la importación y, si no se sigue, se producirá un error en la importación.

Pasos en línea en una actualización principal

Los pasos en línea especificados en una actualización principal se aplican al dispositivo host. Aquí se pasa el objeto ADUC_WorkflowData a un controlador de pasos (también conocido como controlador de contenido de actualización) y no contendrá los datos de Selected Components. El controlador de este tipo de paso no debe ser un Component-Aware controlador.

El controlador de contenido de pasos aplica la lógica de validación IsInstalled para cada paso. El controlador de pasos del agente de Device Update comprueba si ya está instalada una actualización determinada comprobando si IsInstalled() dio lugar a un código de resultado "900", lo que significa "true". Si ya hay instalada una actualización, para evitar volver a instalar una actualización que ya está en el dispositivo, el agente du omitirá los pasos futuros porque los usamos para determinar si se debe realizar el paso o no.

Para notificar un resultado de actualización, el resultado de una ejecución del controlador de pasos debe escribirse en la estructura ADUC_Result en un archivo de resultados deseado. Esto se especifica según la opción --result-file. A continuación, en función de los resultados de la ejecución, devuelva 0 en caso de éxito, o devuelva -1 o 0xFF si hay errores fatales.

Para obtener más información, consulte Pasos del controlador de contenido e Implementación de un controlador de contenido personalizado compatible con componentes.

Pasos de referencia en una actualización principal

Los pasos de referencia especificados en una actualización primaria se aplican a los componentes en o conectados al dispositivo host. Un paso de referencia es un paso que contiene el identificador de actualización de otra actualización, denominado actualización secundaria.

Al procesar un paso de referencia, el controlador de pasos descarga un archivo de manifiesto de actualización desasociado especificado en los datos del paso de referencia y, a continuación, valida la integridad del archivo. A continuación, el controlador de pasos analiza el manifiesto de actualización secundario y crea un objeto ADUC_Workflow (también conocido como datos de flujo de trabajo secundario) combinando los datos del manifiesto de actualización secundario y la información de direcciones URL de archivo del manifiesto de actualización principal. Estos datos de flujo de trabajo secundarios también tienen una propiedad "level" establecida en "1".

Nota:

Actualmente, las actualizaciones de menor nivel no pueden contener ningún paso de referencia.

Manifiestos de actualización independientes

Para evitar errores de implementación debido a los límites de tamaño de datos gemelos de IoT Hub, cualquier manifiesto de actualización grande se entregará en forma de archivo de datos JSON, también denominado manifiesto de actualización desasociado.

Si se importa una actualización con contenido grande en Device Update para IoT Hub, el manifiesto de actualización generado contendrá otro archivo de carga denominado Detached Update Manifest, que contiene los datos completos del manifiesto de actualización.

La UpdateManifest propiedad del dispositivo o módulo gemelo contendrá la información del archivo de manifiesto de actualización desasociada.

Al procesar el evento de cambio de propiedad PnP, el agente de Device Update descargará automáticamente el archivo de manifiesto de actualización desasociado y creará un objeto ADUC_WorkflowData que contenga los datos completos del manifiesto de actualización.