Skip to content

Commit

Permalink
Hub: support image_type being an array for backwards compatibility
Browse files Browse the repository at this point in the history
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] c725265
  • Loading branch information
thozza committed Sep 2, 2022
1 parent 6065ce8 commit 6b7a22c
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 3 deletions.
24 changes: 22 additions & 2 deletions plugins/hub/osbuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,22 @@
"description": "Distribution"
},
{
"type": "string",
"description": "Image Type",
"oneOf": [
{
"type": "string",
"description": "Image Type"
},
{
"type": "array",
"description": "Image Types",
"minItems": 1,
"maxItems": 1,
"deprecated": True,
"items": {
"type": "string"
}
}
]
},
{
"type": "string",
Expand Down Expand Up @@ -224,6 +238,12 @@ def osbuildImage(name, version, distro, image_type, target, arches, opts=None, p
except jsonschema.exceptions.ValidationError as err:
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'):
raise koji.ActionNotAllowed('only admins may create high-priority tasks')

Expand Down
30 changes: 29 additions & 1 deletion test/unit/test_hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,41 @@ def test_basic(self):

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):
context = self.mock_koji_context()
setattr(self.plugin, "context", context)

opts = {}
args = ["name", "version", "distro",
["image_type"], # image type not an array
["image_type", "image_type2"], # only a single image type is allowed
"target",
["arches"],
opts]
Expand Down

0 comments on commit 6b7a22c

Please sign in to comment.