debian-forge/schemas/osbuild2.json
Christian Kellner 4f211eb0a5 osbuild: introduce device host service
A new host service that provides device functionality to stages.
Since stages run in a container and are restricted from creating
device nodes, all device handling is done in the main osbuild
process. Currently this is done with the help of APIs and RPC,
e.g. `LoopServer`. Device host services on the other hand allow
declaring devices in the manifest itself and then osbuild will
prepare all devices before running the stage. One desired effect
is that it makes device handling transparent to the stages, e.g.
they don't have to know about loopback devices, LVM or LUKS.
Another result is that specific device handling is now modular
like Inputs and Source are and thus moved out of osbuild itself.
2021-06-09 18:37:47 +01:00

140 lines
3.6 KiB
JSON

{
"$schema": "http://json-schema.org/draft-04/schema#",
"$id": "https://osbuild.org/schemas/osbuild2.json",
"title": "OSBuild Manifest",
"description": "OSBuild manifest describing a pipeline and all parameters",
"type": "object",
"additionalProperties": false,
"properties": {
"pipelines": { "$ref": "#/definitions/pipelines" },
"sources": { "$ref": "#/definitions/sources" },
"version": {
"enum": ["2"]
}
},
"definitions": {
"devices": {
"title": "Collection of devices for a stage",
"additionalProperties": {
"$ref": "#/definitions/device"
}
},
"device": {
"title": "Device for a stage",
"additionalProperties": false,
"required": ["type", "options"],
"properties": {
"type": { "type": "string" },
"options": {
"type": "object",
"additionalProperties": true
}
}
},
"inputs": {
"title": "Collection of inputs for a stage",
"additionalProperties": false,
"patternProperties": {
"^[a-zA-Z][a-zA-Z0-9_\\-\\.]{0,254}": {
"$ref": "#/definitions/input"
}
}
},
"input": {
"title": "Single input for a stage",
"additionalProperties": false,
"required": ["type", "origin", "references"],
"properties": {
"type": { "type": "string" },
"origin": { "enum": ["org.osbuild.source", "org.osbuild.pipeline"] },
"references": { "$ref": "#/definitions/reference" },
"options": {
"type": "object",
"additionalProperties": true
}
}
},
"pipelines": {
"title": "Collection of pipelines to execute",
"description": "Array of pipelines to execute one after another",
"type": "array",
"items": { "$ref": "#/definitions/pipeline" }
},
"pipeline": {
"title": "Pipeline Description",
"description": "Full description of a pipeline to execute",
"type": "object",
"additionalProperties": false,
"properties": {
"name": { "type:": "string" },
"build": { "type": "string" },
"runner": { "type": "string" },
"stages": { "$ref": "#/definitions/stages" }
}
},
"reference": {
"oneOf":[
{
"type": "array",
"items": { "type": "string" }
},{
"type": "object",
"additionalProperties": true
}
]
},
"source": {
"title": "External Source",
"description": "External source to be passed to the pipeline",
"type": "object",
"additionalProperties": false,
"properties": {
"items": { "$ref": "#/definitions/reference" },
"options": {
"type": "object",
"additionalProperties": true
}
},
"required": ["items"]
},
"sources": {
"title": "Collection of External Sources",
"description": "Collection of external sources to be passed to the pipeline",
"type": "object",
"additionalProperties": { "$ref": "#/definitions/source" }
},
"stage": {
"title": "Pipeline Stage",
"description": "Single stage of a pipeline executing one step",
"type": "object",
"additionalProperties": false,
"properties": {
"type": { "type": "string" },
"devices": { "$ref": "#/definitions/devices" },
"inputs": {"$ref": "#/definitions/inputs" },
"options": {
"type": "object",
"additionalProperties": true
}
},
"required": [ "type" ]
},
"stages": {
"type": "array",
"items": { "$ref": "#/definitions/stage" }
}
}
}