azext_iot/deviceupdate/schemas.py (268 lines of code) (raw):

# coding=utf-8 # -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- DEVICE_UPDATE_MANIFEST_V5 = { "$id": "https://json.schemastore.org/azure-deviceupdate-import-manifest-5.0.json", "$schema": "http://json-schema.org/draft-07/schema", "definitions": { "instructions": { "type": "object", "title": "Installation instructions", "description": "Update installation instructions.", "properties": { "steps": { "type": "array", "title": "Installation steps", "items": {"anyOf": [{"$ref": "#/definitions/inlineStep"}, {"$ref": "#/definitions/referenceStep"}]}, "minItems": 1, "maxItems": 10, } }, "additionalProperties": False, "required": ["steps"], }, "stepDescription": { "type": "string", "title": "Step description", "description": "Optional instruction step description.", "minLength": 1, "maxLength": 64, }, "inlineStep": { "type": "object", "title": "Inline installation step", "description": "Installation instruction step that performs code execution.", "properties": { "type": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/inlineStepType"}, "description": {"$ref": "#/definitions/stepDescription"}, "handler": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/inlineStepHandler"}, "files": { "type": "array", "title": "Step update files", "description": "Names of update files that agent will pass to handler.", "items": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/filename"}, "minItems": 1, "maxItems": 10, }, "handlerProperties": { "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/inlineStepHandlerProperties" }, }, "additionalProperties": False, "required": ["handler", "files"], }, "referenceStep": { "type": "object", "title": "Reference installation step", "description": "Installation instruction step that installs another update.", "properties": { "type": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/referenceStepType"}, "description": {"$ref": "#/definitions/stepDescription"}, "updateId": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/updateId"}, }, "additionalProperties": False, "required": ["type", "updateId"], }, }, "description": "Schema for import manifest used for importing an update to Device Update for IoT Hub.", "properties": { "$schema": {"type": "string", "description": "JSON schema reference."}, "updateId": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/updateId"}, "description": { "type": "string", "title": "Update description", "description": "Optional update description.", "minLength": 1, "maxLength": 512, }, "compatibility": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/compatibility"}, "instructions": {"$ref": "#/definitions/instructions"}, "files": { "type": "array", "title": "Update files", "description": "List of update payload files. Sum of all file sizes may not exceed 2 GB. " "May be empty or null if all instruction steps are reference steps.", "items": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/file"}, "minItems": 0, "maxItems": 10, }, "manifestVersion": { "type": "string", "title": "Import manifest schema version", "description": "Import manifest schema version. Must be 5.0.", "const": "5.0", }, "createdDateTime": { "type": "string", "title": "Created date & time", "description": "Date & time import manifest was created in ISO 8601 format.", "examples": ["2020-10-02T22:18:04.9446744Z"], }, }, "required": ["updateId", "compatibility", "instructions", "manifestVersion", "createdDateTime"], "title": "JSON Schema for Azure Device Update for IoT Hub 'Import Manifest' version 5.0", "type": "object", } DEVICE_UPDATE_MANIFEST_V5_DEFS = { "$id": "https://json.schemastore.org/azure-deviceupdate-manifest-definitions-5.0.json", "$schema": "http://json-schema.org/draft-07/schema", "definitions": { "updateId": { "type": "object", "title": "Update identity", "description": "Unique update identifier.", "properties": { "provider": { "type": "string", "title": "Update provider", "description": "Entity who is creating or directly responsible for the update. It can be a company name.", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9.-]+$", }, "name": { "type": "string", "title": "Update name", "description": "Identifier for a class of update. It can be a device class or model name.", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9.-]+$", }, "version": { "type": "string", "title": "Update version", "description": "Two to four part dot separated numerical version numbers. Each part must be a number between 0 and 2147483647 and leading zeroes will be dropped.", "pattern": "^\\d+(?:\\.\\d+)+$", "examples": ["1.0", "2021.11.8"], }, }, "additionalProperties": False, "required": ["provider", "name", "version"], }, "compatibility": { "type": "array", "title": "Update compatibility", "description": "List of device property sets this update is compatible with.", "items": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/compatibilityInfo"}, "minItems": 1, "maxItems": 10, }, "compatibilityInfo": { "type": "object", "title": "Update compatibility info", "description": "Properties of a device this update is compatible with.", "additionalProperties": { "type": "string", "minLength": 1, "maxLength": 64, "propertyNames": {"minLength": 1, "maxLength": 32}, }, "minProperties": 1, "maxProperties": 5, }, "baseFile": { "type": "object", "title": "Basic update file information", "description": "Update payload file, e.g. binary, firmware, script, etc. Must be unique within update.", "properties": { "filename": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/filename"}, "sizeInBytes": { "type": "number", "title": "File size", "description": "File size in number of bytes.", "minimum": 1, }, "hashes": {"$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/fileHashes"}, "properties": { "type": "object", "additionalProperties": True, "description": "Optional file properties (not consumed by service but pass-through to device).", }, }, "required": ["filename", "sizeInBytes", "hashes"], }, "file": { "type": "object", "title": "Update file", "description": "Update payload file, e.g. binary, firmware, script, etc. Must be unique within update.", "allOf": [{"$ref": "#/definitions/baseFile"}], "properties": { "relatedFiles": { "type": "array", "items": {"$ref": "#/definitions/baseFile"}, "minItems": 0, "maxItems": 4, "description": "Optional related files metadata used together with DownloadHandler metadata to download payload file.", }, "downloadHandler": { "$ref": "#/definitions/fileDownloadHandler", "description": "Optional download handler for utilizing related files to download payload file.", }, }, }, "filename": { "type": "string", "title": "Update file name", "description": "Update payload file name.", "minLength": 1, "maxLength": 255, }, "fileHashes": { "type": "object", "title": "File hashes", "description": "Base64-encoded file hashes with algorithm name as key. At least SHA-256 algorithm must be specified, and additional algorithm may be specified if supported by agent.", "properties": { "sha256": { "type": "string", "title": "SHA-256 hash value", "description": "Base64-encoded file hash value using SHA-256 algorithm.", } }, "additionalProperties": {"type": "string", "propertyNames": {"maxLength": 10}}, "maxProperties": 2, "required": ["sha256"], }, "fileDownloadHandler": { "type": "object", "properties": { "id": { "type": "string", "description": "Download handler identifier.", "pattern": "^\\S+/\\S+:\\d{1,5}$", "minLength": 5, "maxLength": 32, "examples": ["microsoft/delta:1"], } }, "required": ["id"], "description": "Download handler for utilizing related files to download payload file.", }, "referenceStepType": { "type": "string", "title": "'Reference' step type", "description": "Instruction step type that installs another update.", "const": "reference", }, "inlineStepType": { "type": "string", "title": "'Inline' step type", "description": "Instruction step type that performs code execution.", "const": "inline", }, "inlineStepHandler": { "type": "string", "title": "Step handler", "description": "Identity of handler on device that can execute this step.", "pattern": "^\\S+/\\S+:\\d{1,5}$", "minLength": 5, "maxLength": 32, "examples": ["microsoft/script:1", "microsoft/swupdate:1", "microsoft/apt:1"], }, "inlineStepHandlerProperties": { "type": "object", "title": "Handler properties", "description": "JSON object that agent will pass to handler as arguments.", "additionalProperties": True, }, }, "description": "Shared schema definitions for 'Import Manifest' and 'Update Manifest'.", "title": "JSON Schema Definitions for Azure Device Update for IoT Hub Manifests version 5.0", "type": "object", }