scheduler: add job's variants to the rpc job_list method

This change adds the job's variants to the jobs list to enable
a more structured representation of the zuul-web jobs endpoint
results.

Change-Id: I12648d514f4cd3d2a31a95038883bd2eef8a9350
This commit is contained in:
Tristan Cacqueray 2018-06-08 01:00:01 +00:00
parent f019543ce9
commit 5776248c91
3 changed files with 42 additions and 6 deletions

View File

@ -572,6 +572,20 @@ class TestWeb(BaseTestWeb):
resp = self.get_url("api/tenant/non-tenant/jobs")
self.assertEqual(404, resp.status_code)
def test_jobs_list_variants(self):
resp = self.get_url("api/tenant/tenant-one/jobs").json()
for job in resp:
if job['name'] in ["base", "noop"]:
variants = None
elif job['name'] == 'project-test1':
variants = [
{'parent': 'base'},
{'branches': ['stable'], 'parent': 'base'},
]
else:
variants = [{'parent': 'base'}]
self.assertEqual(variants, job.get('variants'))
def test_web_job_noop(self):
job = self.get_url("api/tenant/tenant-one/job/noop").json()
self.assertEqual("noop", job[0]["name"])

View File

@ -1292,6 +1292,10 @@ class Job(ConfigObject):
if changed:
self.roles = tuple(newroles)
def getBranches(self):
# Return the raw branch list that match this job
return self._branches
def setBranchMatcher(self, branches):
# Set the branch matcher to match any of the supplied branches
self._branches = branches

View File

@ -362,12 +362,30 @@ class RPCListener(object):
job.sendWorkComplete(json.dumps(None))
for job_name in sorted(tenant.layout.jobs):
desc = None
for tenant_job in tenant.layout.jobs[job_name]:
if tenant_job.description:
desc = tenant_job.description.split('\n')[0]
break
output.append({"name": job_name,
"description": desc})
variants = []
for variant in tenant.layout.jobs[job_name]:
if not desc and variant.description:
desc = variant.description.split('\n')[0]
job_variant = {}
if not variant.isBase():
if variant.parent:
job_variant['parent'] = str(variant.parent)
else:
job_variant['parent'] = tenant.default_base_job
branches = variant.getBranches()
if branches:
job_variant['branches'] = branches
if job_variant:
variants.append(job_variant)
job_output = {
"name": job_name,
}
if desc:
job_output["description"] = desc
if variants:
job_output["variants"] = variants
output.append(job_output)
job.sendWorkComplete(json.dumps(output))
def handle_project_get(self, gear_job):