Compartir a través de


Ejecución ordenada en varios pasos

Llevar a cabo una ejecución ordenada en varios pasos a la hora de implementar una actualización por vía inalámbrica le permitirá ejecutar tareas anteriores y posteriores a su instalación. Esta funcionalidad forma parte del esquema v4 del manifiesto de actualización, que actualmente se encuentra en versión preliminar pública.

Consulte la documentación del manifiesto de actualización antes de revisar los siguientes cambios, que forman parte de esta actualización en versión preliminar pública.

Al llevar a cabo una ejecución ordenada en varios pasos, hay dos tipos de pasos posibles:

  • Paso insertado (valor predeterminado)
  • Paso de referencia

Ejemplo de un manifiesto de actualización con un paso insertado:

{
    "updateId": {...},
    "isDeployable": true,
    "compatibility": [
        {
            "manufacturer": "du-device",
            "model": "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"
}

Ejemplo de un manifiesto de actualización con dos pasos insertados:

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

Ejemplo de un manifiesto de actualización con un paso de referencia:

  • Actualización primaria donde se hace referencia a una actualización secundaria

    {
        "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"
    }
    
  • Actualización secundaria con pasos insertados

    {
        "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 deberá tener una cadena installedCriteria diferente en el caso de que esa cadena se vaya a usar para determinar si el paso se debe realizar o no.

Actualizaciones primarias y secundarias

Cuando los manifiestos de actualización se hagan referencia entre sí, el manifiesto de nivel superior se denominará actualización primaria, mientras que los manifiestos que se especifiquen en los pasos de referencia se denominarán actualización secundaria.

Actualmente, las actualizaciones secundarias no pueden contener pasos 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 insertados en una actualización primaria

Los pasos insertados que se especifican en las actualizaciones primarias se aplican al dispositivo host. En este caso, el objeto ADUC_WorkflowData se pasará a un controlador de pasos (que también se denomina controlador de contenido de actualización) no contendrá los datos de tipo Selected Components. El controlador de este tipo de paso no debería ser un controlador Component-Aware.

En cada paso, se aplica la lógica de validación IsInstalled mediante el controlador de contenido de pasos. Desde el controlador de pasos del agente de Device Update, se comprueba si la actualización en cuestión ya está instalada. Para esto, se comprueba que desde la lógica IsInstalled() se devuelva el código de resultado "900", que significa "true". Si una actualización ya está instalada en el dispositivo, se omitirán los pasos futuros en el agente de DU para evitar que esta se instale, ya que este se usa para determinar si se debe realizar el paso o no.

Para informar sobre el resultado de un proceso de actualización, el resultado de la ejecución del controlador de pasos deberá escribirse en la estructura ADUC_Result, dentro del archivo de resultados deseado, tal y como se especifica en la opción --result-file. A continuación, en función de los resultados de la ejecución, si fue correcta devolverá 0 y si hay errores irrecuperables devolverá -1 o 0xFF.

Para obtener más información, consulte Controlador de contenido de pasos e Implementación de un controlador de contenido personalizado con reconocimiento de componentes.

Pasos de referencia en una actualización primaria

Los pasos de referencia que se especifiquen en una actualización primaria se aplicarán a los componentes del dispositivo host o a los que estén conectados a este. Los pasos de referencia son pasos donde se incluye el identificador de otra actualización, que se denomina actualización secundaria.

Cuando se procesa un paso de referencia, desde el controlador de pasos se descarga un archivo de manifiesto de actualización desasociado, que se especifica en los datos del paso de referencia. Después, se valida la integridad de ese archivo. A continuación, desde el controlador de pasos se analiza el manifiesto de actualización secundaria y se crea un objeto ADUC_Workflow (que también se denomina datos de flujo de trabajo secundarios). En este, se combinan los datos del manifiesto de actualización secundaria con la información de las URL de archivo del manifiesto de actualización principal. Además, estos datos de flujo de trabajo secundarios tienen la propiedad de nivel ("level") establecida con el valor "1".

Nota

Actualmente, las actualizaciones secundarias no pueden contener pasos de referencia.

Manifiestos de actualización desasociados

Para evitar errores de implementación que se deban a los límites de tamaño de datos de gemelos de IoT Hub, los manifiestos de actualización grandes se entregarán mediante archivos de datos JSON, que también se denominan manifiestos de actualización desasociados.

Si se importa una actualización para Device Update for IoT Hub que tenga una gran cantidad de contenido, el manifiesto de actualización que se genere contendrá otro archivo de carga que se denominará Detached Update Manifest. En este, se incluirán los datos completos del manifiesto de actualización.

La propiedad UpdateManifest del dispositivo o módulo gemelo se usará para almacenar la información del archivo de manifiesto de actualización desasociado en cuestión.

Cuando se procese el evento de cambio de propiedad PnP, el archivo de manifiesto de actualización desasociado se descargará automáticamente desde el agente de Device Update y se creará un objeto ADUC_WorkflowData, donde se incluirán todos los datos del manifiesto de actualización.