Exécution ordonnée en plusieurs étapes
L’exécution ordonnée en plusieurs étapes vous permet d’exécuter des tâches de préinstallation et de post-installation lors du déploiement d’une mise à jour OTA. Cette fonctionnalité fait partie du schéma du manifeste de mise à jour d’actualisation de la préversion publique v4.
Consultez la documentation du manifeste de mise à jour avant d’examiner les changements ci-dessous apportés par la version d’actualisation de la préversion publique.
Avec l’exécution ordonnée en plusieurs étapes, il existe deux types d’étapes :
- Étape inline (par défaut)
- Étape de référence
Exemple de manifeste de mise à jour avec une seule étape inline :
{
"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"
}
Exemple de manifeste de mise à jour avec deux étapes inline :
{
"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"
}
Exemple de manifeste de mise à jour avec une seule étape de référence :
Mise à jour parente qui référence une mise à jour enfant
{ "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" }
Mise à jour enfant avec étapes inline
{ "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\"" }
Notes
Dans le manifeste de mise à jour, chaque étape doit avoir une chaîne installedCriteria différente si cette chaîne est utilisée pour déterminer si l’étape doit être effectuée ou non.
Mises à jour parentes et mises à jour enfants
Lorsque les manifestes de mise à jour font référence les uns aux autres, le manifeste de niveau supérieur est appelé la mise à jour parente et un manifeste spécifié dans une étape de référence est appelé mise à jour enfant.
Actuellement, une mise à jour enfant ne peut pas contenir d’étapes de référence. Cette restriction est vérifiée au moment de l’importation et, si elle n’est pas respectée, l’importation échoue.
Étapes inline dans une mise à jour parente
Les étapes inline spécifiées dans une mise à jour parente sont appliquées à l’appareil hôte. Ici, l’objet ADUC_WorkflowData est passé à un gestionnaire d’étapes (également appelé gestionnaire de contenu de mise à jour) et ne contient pas les données Selected Components
. Le gestionnaire de ce type d’étape ne doit pas être un gestionnaire Component-Aware
.
Le gestionnaire de contenu des étapes applique la logique de validation IsInstalled pour chaque étape. Le gestionnaire d’étapes de l’agent Device Update contrôle si une mise à jour particulière est déjà installée en vérifiant si IsInstalled() a entraîné un code de résultat « 900 » qui signifie « true ». Si une mise à jour est déjà installée, pour éviter de réinstaller une mise à jour déjà sur l’appareil, l’agent DU ignore les étapes futures, car nous l’utilisons pour déterminer s’il faut effectuer l’étape ou non.
Pour signaler un résultat de mise à jour, le résultat de l’exécution d’un gestionnaire d’étapes doit être écrit dans un struct ADUC_Result dans un fichier de résultats souhaité, comme spécifié dans l’option --result-file. Ensuite, en fonction des résultats de l’exécution, pour le retour de l’état de réussite 0, pour toutes les erreurs irrécupérables, retournez -1 ou 0xFF.
Pour plus d’informations, consultez Gestionnaire de contenu des étapes et Implémentation d’un gestionnaire de contenu prenant en charge les composants personnalisés.
Étapes de référence dans une mise à jour parente
Les étapes de référence spécifiées dans une mise à jour parente sont appliquées aux composants sur l’appareil hôte ou connectés à celui-ci. Une étape de référence est une étape qui contient l’identificateur de mise à jour d’une autre mise à jour, appelée mise à jour enfant.
Lors du traitement d’une étape de référence, le gestionnaire d’étapes télécharge un fichier manifeste de mise à jour détaché qui est spécifié dans les données de l’étape de référence, puis il vérifie l’intégrité du fichier. Ensuite, le gestionnaire d’étapes analyse le manifeste de mise à jour enfant et il crée un objet ADUC_Workflow (également connu sous le nom de données de workflow enfant) en combinant les données du manifeste de mise à jour enfant et les informations d’URL de fichier contenues dans le manifeste de mise à jour parent. Ces données de workflow enfant ont également une propriété « level » définie sur « 1 ».
Notes
Actuellement, les mises à jour enfants ne peuvent pas contenir d’étapes de référence.
Manifestes de mise à jour détachés
Pour éviter un échec du déploiement en raison des limites de taille des données du jumeau IoT Hub, tout manifeste de mise à jour volumineux est remis sous la forme d’un fichier de données JSON, également appelé manifeste de mise à jour détaché.
Si une mise à jour avec du contenu volumineux est importée dans Device Update pour IoT Hub, le manifeste de mise à jour généré contient un autre fichier de charge utile appelé Detached Update Manifest
, qui contient les données complètes de ce manifeste.
La propriété UpdateManifest
du jumeau d’appareil ou de module contient les informations du fichier manifeste de mise à jour détaché.
Lors du traitement d’un événement property changed PnP, l’agent Device Update télécharge automatiquement le fichier manifeste de mise à jour détaché et il crée un objet ADUC_WorkflowData qui contient les données complètes du manifeste de mise à jour.