Skip to content

Commit

Permalink
Store annotations for orchestrator build
Browse files Browse the repository at this point in the history
Signed-off-by: Luiz Carvalho <lucarval@redhat.com>
  • Loading branch information
lcarva committed Mar 13, 2017
1 parent 8584c51 commit 9430df3
Show file tree
Hide file tree
Showing 3 changed files with 159 additions and 10 deletions.
7 changes: 7 additions & 0 deletions inputs/orchestrator_inner:1.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@
"postbuild_plugins": [],
"prepublish_plugins": [],
"exit_plugins": [
{
"args": {
"url": "{{OPENSHIFT_URI}}",
"verify_ssl": false
},
"name": "store_metadata_in_osv3"
},
{
"name": "remove_built_image"
}
Expand Down
65 changes: 56 additions & 9 deletions osbs/cli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,50 @@ def cmd_list_builds(args, osbs):
tp.render()


def make_digests_str(digests):
if digests is not None:
try:
digests_str = "\n".join(["{registry}/{repository}:{tag} {digest}".format(**dig)
for dig in digests])
except (TypeError, KeyError):
digests_str = "(invalid value)"
else:
digests_str = "(unset)"

if not digests_str:
digests_str = "(empty)"

return digests_str


def make_worker_builds_str(worker_builds):
worker_build_template = dedent("""\
{platform} WORKER BUILD
{build_name} on {cluster_url} ({namespace})
{platform} V2 DIGESTS
{digests}""")

worker_builds_str = ''
for platform, worker_build in worker_builds.items():

digests_str = make_digests_str(worker_build.get('digests', []))

worker_builds_str += worker_build_template.format(
platform=platform,
build_name=worker_build.get('build', {}).get('build-name', '(unset)'),
cluster_url=worker_build.get('build', {}).get('cluster-url', '(unset)'),
namespace=worker_build.get('build', {}).get('namespace', '(unset)'),
digests=digests_str,
)

return worker_builds_str


def cmd_get_build(args, osbs):
build = osbs.get_build(args.BUILD_ID[0])
build_json = build.json
Expand All @@ -213,15 +257,7 @@ def cmd_get_build(args, osbs):
}
repositories_str = repositories_template.format(**repositories_context)

digests_list = build.get_digests()
if digests_list is not None:
try:
digests_str = "\n".join(["{registry}/{repository}:{tag} {digest}".format(**dig)
for dig in digests_list])
except (TypeError, KeyError):
digests_str = "(invalid value)"
else:
digests_str = "(unset)"
digests_str = make_digests_str(build.get_digests())

logs_str = ''
build_logs = build.get_logs()
Expand Down Expand Up @@ -290,6 +326,17 @@ def cmd_get_build(args, osbs):
"koji_build_id": build.get_koji_build_id() or '(unset)',
"digests": digests_str,
}

worker_builds = json.loads(build.get_annotations().get('worker-builds', '{}'))
worker_builds_str = make_worker_builds_str(worker_builds)

if worker_builds_str:
template += dedent("""\
WORKER BUILDS{worker_builds}""")
context['worker_builds'] = worker_builds_str

print(template.format(**context))


Expand Down
97 changes: 96 additions & 1 deletion tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import sys

from flexmock import flexmock
from textwrap import dedent
from osbs.cli.main import (str_on_2_unicode_on_3, check_required_args,
check_unwanted_args)
check_unwanted_args, make_worker_builds_str,
make_digests_str)


class TestStrOn2UnicodeOn3(object):
Expand Down Expand Up @@ -69,3 +71,96 @@ def test_check_required_args(self, attributes, raises):
else:
check_required_args(args, ['required1'])
check_required_args(args, ['required1', 'required2'])


class TestGetBuild(object):

@pytest.mark.parametrize(('worker_builds', 'expected_str'), (
({}, ''),
(
{'x86_64': {
'build': {
'build-name': 'spam-build-name',
'cluster-url': 'spam-cluster-url',
'namespace': 'spam-namespace',
},
'digests': []
}},
dedent("""\
x86_64 WORKER BUILD
spam-build-name on spam-cluster-url (spam-namespace)
x86_64 V2 DIGESTS
(empty)""")
),
(
{'x86_64': {
'build': {
'build-name': 'spam-build-name',
'cluster-url': 'spam-cluster-url',
'namespace': 'spam-namespace',
},
'digests': [{
'registry': 'spam-registry',
'repository': 'spam-repository',
'tag': 'spam-tag',
'digest': 'spam-digest',
}]
}},
dedent("""\
x86_64 WORKER BUILD
spam-build-name on spam-cluster-url (spam-namespace)
x86_64 V2 DIGESTS
spam-registry/spam-repository:spam-tag spam-digest""")
),
))
def test_make_worker_builds_str(self, worker_builds, expected_str):
assert make_worker_builds_str(worker_builds) == expected_str

@pytest.mark.parametrize(('digests', 'expected_str'), (
([], '(empty)'),
([{}], '(invalid value)'),
(None, '(unset)'),
(
[
{
'registry': 'spam-registry',
'repository': 'spam-repository',
'tag': 'spam-tag',
'digest': 'spam-digest',
},
],
dedent("""\
spam-registry/spam-repository:spam-tag spam-digest""")
),
(
[
{
'registry': 'spam-registry',
'repository': 'spam-repository',
'tag': 'spam-tag',
'digest': 'spam-digest',
},
{
'registry': 'eggs-registry',
'repository': 'eggs-repository',
'tag': 'eggs-tag',
'digest': 'eggs-digest',
},
],
dedent("""\
spam-registry/spam-repository:spam-tag spam-digest
eggs-registry/eggs-repository:eggs-tag eggs-digest""")
),
))
def test_make_digests_str(self, digests, expected_str):
assert make_digests_str(digests) == expected_str

0 comments on commit 9430df3

Please sign in to comment.