Exécution ordonnée en plusieurs étapes
L’exécution ordonnée en plusieurs étapes dans Azure Device Update pour IoT Hub vous permet d’exécuter des tâches de préinstallation et de post-installation quand vous déployez une mise à jour via un réseau sans fil. Cette fonctionnalité fait partie du schéma du manifeste de mise à jour de Device Update version 4. Pour plus d’informations, consultez Manifeste de mise à jour de Device Update.
L’exécution ordonnée en plusieurs étapes peut avoir deux types d’étapes : des étapes inline et des étapes de référence. Une étape inline est une instruction qui exécute du code ; c’est le type d’étape par défaut. Une étape de référence est une étape qui contient un identificateur pour une autre mise à jour.
Mises à jour parentes et mises à jour enfants
Quand un manifeste de mise à jour fait référence à un autre manifeste de mise à jour, le manifeste de plus haut niveau est appelé la mise à jour parente et le manifeste spécifié dans l’étape de référence est appelé mise à jour enfant. Une mise à jour enfant ne peut pas contenir d’étapes de référence, mais seulement des étapes inline. Device Update vérifie cette restriction au moment de l’importation et met en échec la mise à jour si elle n’est pas satisfaite.
Étapes inline dans une mise à jour parente
L’agent Device Update applique à l’appareil hôte les étapes inline spécifiées dans une mise à jour parente. L’objet ADUC_WorkflowData
qui passe au gestionnaire d’étapes, également appelé gestionnaire de contenu de mise à jour, ne contient aucune donnée de Selected Components
. Le gestionnaire pour ce type d’étape ne doit pas être un gestionnaire Component-Aware
.
Le gestionnaire de contenu d’étape de l’agent Device Update applique une logique de validation IsInstalled
pour chaque étape. Le gestionnaire d’étapes recherche si la mise à jour est déjà installée en vérifiant si IsInstalled()
retourne le code de résultat 900
, ou vrai (true), et utilise ce résultat pour déterminer s’il faut effectuer l’étape. Pour éviter de réinstaller une mise à jour déjà présente sur l’appareil, l’agent Device Update ignore les étapes futures si une mise à jour est déjà installée.
Pour indiquer le résultat d’une mise à jour, écrivez le résultat de l’exécution d’un gestionnaire d’étapes dans le struct ADUC_Result
dans un fichier de résultats de votre choix, spécifié dans l’option --result-file
. En fonction des résultats de l’exécution, retournez 0
pour une réussite et, retournez -1
ou 0xFF
pour des erreurs irrécupérables.
Pour plus d’informations, consultez Gestionnaire d’étapes et Comment implémenter un gestionnaire de contenu prenant en charge les composants personnalisés.
Étapes de référence dans une mise à jour parente
L’agent Device Update applique les étapes de référence spécifiées dans une mise à jour parente aux composants présents sur l’appareil hôte ou qui y sont connectés. Quand il traite 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 l’étape, puis il vérifie l’intégrité du fichier.
Le gestionnaire d’étapes analyse ensuite le manifeste de mise à jour enfant, et il crée un objet ADUC_Workflow
(également appelé « données de workflow enfant ») en combinant les données du manifeste de mise à jour enfant et les informations d’URL de fichier provenant du manifeste de mise à jour parente. Ces données de workflow enfant ont une propriété level
définie sur 1
.
Exemples
L’exemple de manifeste de mise à jour suivant a une seule étape inline :
{
"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"
}
L’exemple de manifeste de mise à jour suivant a 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"
}
Le manifeste de mise à jour parente suivant a une étape de référence qui fait 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"
}
La mise à jour enfant contient des étapes inline.
{
"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\""
}
Remarque
Si vous utilisez installedCriteria
pour déterminer si l’étape doit s’exécuter ou non, vous devez donner à chaque étape une valeur différente pour installedCriteria
dans le manifeste de mise à jour.
Manifestes de mise à jour détachés
Pour éviter un échec de déploiement en raison des limites de taille des données des jumeaux Azure IoT Hub, Device Update fournit aux appareils des manifestes de mise à jour de grande taille sous forme de fichiers de données JSON appelés manifestes de mise à jour détachés. Quand vous importez une mise à jour de contenu de grande taille dans Device Update, 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 du manifeste de mise à jour.
La propriété UpdateManifest
du jumeau d’appareil ou de module contient les informations du fichier manifeste de mise à jour détaché. Quand il traite l’événement PnP PropertyChanged
, l’agent Device Update télécharge automatiquement le fichier manifeste de mise à jour détaché et crée un objet ADUC_WorkflowData
qui contient les données complètes du manifeste de mise à jour.