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.
140 lines
3.6 KiB
JSON
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" }
|
|
}
|
|
}
|
|
}
|