Fix setting a change queue in a template
A recent change to late-bind project-templates omitted updating the dependent pipeline manager to look at both project and project-template objects when building shared queues. Add a test for this and a helper method to collect all of the project and project-template objects for a project. Change-Id: Id43089dac79a3f523939c59b71c98879390597ad
This commit is contained in:
parent
8c88420b04
commit
76ad900d17
|
@ -0,0 +1,26 @@
|
|||
- pipeline:
|
||||
name: gate
|
||||
manager: dependent
|
||||
trigger: {}
|
||||
|
||||
- job:
|
||||
name: base
|
||||
parent: null
|
||||
run: playbooks/base.yaml
|
||||
|
||||
- project-template:
|
||||
name: integrated-jobs
|
||||
gate:
|
||||
queue: integrated
|
||||
jobs:
|
||||
- base
|
||||
|
||||
- project:
|
||||
name: org/project1
|
||||
templates:
|
||||
- integrated-jobs
|
||||
|
||||
- project:
|
||||
name: org/project2
|
||||
templates:
|
||||
- integrated-jobs
|
|
@ -2739,6 +2739,17 @@ class TestScheduler(ZuulTestCase):
|
|||
self.assertEqual(q1.name, 'integrated')
|
||||
self.assertEqual(q2.name, 'integrated')
|
||||
|
||||
@simple_layout("layouts/template-queue.yaml")
|
||||
def test_template_queue(self):
|
||||
"Test a shared queue can be constructed from a preject-template"
|
||||
tenant = self.sched.abide.tenants.get('tenant-one')
|
||||
(trusted, project1) = tenant.getProject('org/project1')
|
||||
(trusted, project2) = tenant.getProject('org/project2')
|
||||
q1 = tenant.layout.pipelines['gate'].getQueue(project1)
|
||||
q2 = tenant.layout.pipelines['gate'].getQueue(project2)
|
||||
self.assertEqual(q1.name, 'integrated')
|
||||
self.assertEqual(q2.name, 'integrated')
|
||||
|
||||
def test_queue_precedence(self):
|
||||
"Test that queue precedence works"
|
||||
|
||||
|
|
|
@ -35,14 +35,15 @@ class DependentPipelineManager(PipelineManager):
|
|||
def buildChangeQueues(self):
|
||||
self.log.debug("Building shared change queues")
|
||||
change_queues = {}
|
||||
layout_project_configs = self.pipeline.layout.project_configs
|
||||
tenant = self.pipeline.layout.tenant
|
||||
layout = self.pipeline.layout
|
||||
layout_project_configs = layout.project_configs
|
||||
tenant = layout.tenant
|
||||
|
||||
for project_name, project_configs in layout_project_configs.items():
|
||||
(trusted, project) = tenant.getProject(project_name)
|
||||
queue_name = None
|
||||
project_in_pipeline = False
|
||||
for project_config in project_configs:
|
||||
for project_config in layout.getAllProjectConfigs(project_name):
|
||||
project_pipeline_config = project_config.pipelines.get(
|
||||
self.pipeline.name)
|
||||
if project_pipeline_config is None:
|
||||
|
|
|
@ -2952,6 +2952,17 @@ class Layout(object):
|
|||
def getProjectConfigs(self, name):
|
||||
return self.project_configs.get(name, [])
|
||||
|
||||
def getAllProjectConfigs(self, name):
|
||||
# Get all the project configs (project and project-template
|
||||
# stanzas) for a project.
|
||||
ret = []
|
||||
for pc in self.getProjectConfigs(name):
|
||||
ret.append(pc)
|
||||
for template_name in pc.templates:
|
||||
templates = self.getProjectTemplates(template_name)
|
||||
ret.extend(templates)
|
||||
return ret
|
||||
|
||||
def getProjectMetadata(self, name):
|
||||
if name in self.project_metadata:
|
||||
return self.project_metadata[name]
|
||||
|
|
Loading…
Reference in New Issue