Condividi tramite


Esecuzione ordinata con più passaggi

L'esecuzione con più passaggi ordinati in Aggiornamento dispositivi di Azure per hub IoT consente di eseguire attività di preinstallazione e postinstallazione quando si distribuisce un aggiornamento over-the-air. Questa funzionalità fa parte dello schema manifesto dell'aggiornamento del dispositivo versione 4. Per altre informazioni, vedere Manifesto dell'aggiornamento del dispositivo.

L'esecuzione ordinata con più passaggi può avere due tipi di passaggi, passaggi inline e passaggi di riferimento. Un passaggio inline è un'istruzione che esegue il codice ed è il tipo predefinito. Un passaggio di riferimento è un passaggio che contiene un identificatore per un altro aggiornamento.

Aggiornamenti padre e aggiornamenti figlio

Quando un manifesto di aggiornamento fa riferimento a un altro manifesto di aggiornamento, il manifesto di primo livello viene chiamato aggiornamento padre e il manifesto specificato nel passaggio di riferimento è denominato aggiornamento figlio. Un aggiornamento figlio non può contenere passaggi di riferimento, ma solo passaggi inline. Aggiornamento del dispositivo convalida questa restrizione in fase di importazione e non riesce l'aggiornamento se non viene soddisfatto.

Passaggi inline in un aggiornamento padre

L'agente di Aggiornamento dispositivi applica i passaggi inline specificati in un aggiornamento padre al dispositivo host. L'oggetto ADUC_WorkflowData che passa al gestore dei passaggi, detto anche gestore del contenuto di aggiornamento, non contiene dati Selected Components . Il gestore per questo tipo di passaggio non deve essere un Component-Aware gestore.

Il gestore del contenuto del passaggio dell'agente di Aggiornamento dispositivi applica IsInstalled la logica di convalida per ogni passaggio. Il gestore dei passaggi verifica se l'aggiornamento è già installato controllando se IsInstalled() restituisce il codice 900del risultato o true e usa questo risultato per determinare se eseguire il passaggio. Per evitare di reinstallare un aggiornamento già presente nel dispositivo, l'agente di Aggiornamento dispositivi ignora i passaggi futuri se è già installato un aggiornamento.

Per segnalare un risultato dell'aggiornamento, scrivere il risultato dell'esecuzione di un gestore di passaggi nello ADUC_Result struct in un file di risultati desiderato, come specificato nell'opzione --result-file . In base ai risultati dell'esecuzione, restituire 0 per esito positivo e restituire -1 o 0xFF per errori irreversibili.

Per altre informazioni, vedere Gestori di passaggi e Come implementare un gestore di contenuto compatibile con componenti personalizzato.

Passaggi di riferimento in un aggiornamento padre

L'agente di Aggiornamento dispositivi applica i passaggi di riferimento specificati in un aggiornamento padre ai componenti in o connessi al dispositivo host. Quando elabora un passaggio di riferimento, il gestore dei passaggi scarica un file manifesto di aggiornamento scollegato specificato nel passaggio e convalida l'integrità del file.

Il gestore dei passaggi analizza quindi il manifesto di aggiornamento figlio e crea un ADUC_Workflow oggetto, detto anche dati del flusso di lavoro figlio, combinando i dati dal manifesto dell'aggiornamento figlio e dalle informazioni sull'URL del file dal manifesto dell'aggiornamento padre. I dati del flusso di lavoro figlio hanno una level proprietà impostata su 1.

Esempi

Il manifesto di aggiornamento di esempio seguente include un passaggio 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"
}

Il manifesto di aggiornamento di esempio seguente prevede due passaggi 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"
}

Il manifesto dell'aggiornamento padre seguente include un passaggio di riferimento che fa riferimento a un aggiornamento figlio:

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

L'aggiornamento figlio contiene passaggi 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\""
}

Nota

Se si usa installedCriteria per determinare se il passaggio deve essere eseguito, è necessario assegnare a ogni passaggio un valore diverso installedCriteria nel manifesto dell'aggiornamento.

Manifesti di aggiornamento scollegati

Per evitare errori di distribuzione a causa di limiti di dimensioni dei dati dei dispositivi gemelli hub IoT di Azure, Aggiornamento dispositivo fornisce manifesti di aggiornamento di grandi dimensioni ai dispositivi come file di dati JSON denominati manifesti di aggiornamento scollegati. Quando si importa un aggiornamento di contenuto di grandi dimensioni in Aggiornamento dispositivi, il manifesto dell'aggiornamento generato contiene un altro file di payload denominato Detached Update Manifest, che contiene i dati completi del manifesto dell'aggiornamento.

La UpdateManifest proprietà nel dispositivo o nel modulo gemello contiene le informazioni sul file manifesto di aggiornamento scollegato. Quando elabora l'evento PnP PropertyChanged , l'agente Device Update scarica automaticamente il file manifesto di aggiornamento scollegato e crea un ADUC_WorkflowData oggetto che contiene i dati completi del manifesto dell'aggiornamento.