Hub: support image_type being an array for backwards compatibility
The support for specifying multiple `image_types` for a single compose
has been removed by [1]. This turned out to be problematic, because e.g.
Pungi uses the array type when triggering image builds via osbuild.
Bring back the support for specifying the `image_type` as an array, but
restrict it to a single item. This will cover the Pungi use-case, since
it is always passing a single `image_type` in the array. The array is
then converted to a string in the Hub plugin and passed as such to the
Builder plugin.
Extend unit tests covering the introduced compatibility layer.
[1] c725265081
This commit is contained in:
parent
6065ce8b72
commit
f21a2de39b
2 changed files with 50 additions and 3 deletions
|
|
@ -28,8 +28,21 @@ OSBUILD_IMAGE_SCHEMA = {
|
||||||
"description": "Distribution"
|
"description": "Distribution"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"oneOf": [
|
||||||
"description": "Image Type",
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "Image Type"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"description": "Image Types (this option is deprecated)",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|
@ -224,6 +237,12 @@ def osbuildImage(name, version, distro, image_type, target, arches, opts=None, p
|
||||||
except jsonschema.exceptions.ValidationError as err:
|
except jsonschema.exceptions.ValidationError as err:
|
||||||
raise koji.ParameterError(str(err)) from None
|
raise koji.ParameterError(str(err)) from None
|
||||||
|
|
||||||
|
# Support array for backwards compatibility
|
||||||
|
# This check must be done after the schema validation
|
||||||
|
if isinstance(image_type, list):
|
||||||
|
image_type = image_type[0]
|
||||||
|
args = [name, version, distro, image_type, target, arches, opts]
|
||||||
|
|
||||||
if priority and priority < 0 and not context.session.hasPerm('admin'):
|
if priority and priority < 0 and not context.session.hasPerm('admin'):
|
||||||
raise koji.ActionNotAllowed('only admins may create high-priority tasks')
|
raise koji.ActionNotAllowed('only admins may create high-priority tasks')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,13 +60,41 @@ class TestHubPlugin(PluginTest):
|
||||||
|
|
||||||
self.plugin.osbuildImage(*args, {})
|
self.plugin.osbuildImage(*args, {})
|
||||||
|
|
||||||
|
def test_image_types_array(self):
|
||||||
|
context = self.mock_koji_context()
|
||||||
|
|
||||||
|
opts = {"repo": ["repo1", "repo2"],
|
||||||
|
"release": "1.2.3",
|
||||||
|
"skip_tag": True}
|
||||||
|
make_task_args = [
|
||||||
|
"name", "version", "distro",
|
||||||
|
"image_type",
|
||||||
|
"target",
|
||||||
|
["arches"],
|
||||||
|
opts
|
||||||
|
]
|
||||||
|
args = ["name", "version", "distro",
|
||||||
|
["image_type"],
|
||||||
|
"target",
|
||||||
|
["arches"],
|
||||||
|
opts]
|
||||||
|
|
||||||
|
task = {"channel": "image"}
|
||||||
|
|
||||||
|
kojihub = self.mock_kojihub(make_task_args, task)
|
||||||
|
|
||||||
|
setattr(self.plugin, "context", context)
|
||||||
|
setattr(self.plugin, "kojihub", kojihub)
|
||||||
|
|
||||||
|
self.plugin.osbuildImage(*args, {})
|
||||||
|
|
||||||
def test_input_validation(self):
|
def test_input_validation(self):
|
||||||
context = self.mock_koji_context()
|
context = self.mock_koji_context()
|
||||||
setattr(self.plugin, "context", context)
|
setattr(self.plugin, "context", context)
|
||||||
|
|
||||||
opts = {}
|
opts = {}
|
||||||
args = ["name", "version", "distro",
|
args = ["name", "version", "distro",
|
||||||
["image_type"], # image type not an array
|
["image_type", "image_type2"], # only a single image type is allowed
|
||||||
"target",
|
"target",
|
||||||
["arches"],
|
["arches"],
|
||||||
opts]
|
opts]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue