Merge lp:~veebers/ci-director/ignore-multibranch-jobs into lp:ci-director

Proposed by Christopher Lee
Status: Merged
Merged at revision: 192
Proposed branch: lp:~veebers/ci-director/ignore-multibranch-jobs
Merge into: lp:ci-director
Diff against target: 105 lines (+39/-4)
4 files modified
cidirector/cidirector.py (+2/-2)
cidirector/tests/test_cidirector.py (+12/-1)
cidirector/tests/test_update_outcome.py (+19/-0)
cidirector/update_outcome.py (+6/-1)
To merge this branch: bzr merge lp:~veebers/ci-director/ignore-multibranch-jobs
Reviewer Review Type Date Requested Status
Juju Release Engineering Pending
Review via email: mp+328434@code.launchpad.net

Commit message

Ensure ci-director ignores multibranch jobs

Description of the change

Ensure ci-director ignores multibranch jobs

Currently a multibranch job will raise an exception within ci-director as it always expects a 'color' within a jobs info, multibranch jobs don't have this (as they are different to normal jobs).

This should be enough to allow us to create multibranch jobs without breaking ci-director (however there is the slim chance that there will need to be further changes made).

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'cidirector/cidirector.py'
2--- cidirector/cidirector.py 2017-02-02 17:51:07 +0000
3+++ cidirector/cidirector.py 2017-08-02 04:40:08 +0000
4@@ -126,12 +126,12 @@
5 def get_building_jobs(self):
6 """List all jobs which are currently building."""
7 return [j['name'] for j in self.info['jobs']
8- if j['color'].endswith('_anime')]
9+ if j.get('color', '').endswith('_anime')]
10
11 def get_enabled_jobs(self):
12 """List all jobs which are enabled on this Jenkins instance."""
13 return [j['name'] for j in self.info['jobs']
14- if not j['color'] == 'disabled']
15+ if not j.get('color', '') == 'disabled']
16
17
18 class JobInfo:
19
20=== modified file 'cidirector/tests/test_cidirector.py'
21--- cidirector/tests/test_cidirector.py 2017-01-31 21:24:22 +0000
22+++ cidirector/tests/test_cidirector.py 2017-08-02 04:40:08 +0000
23@@ -81,7 +81,8 @@
24 yield new_home
25
26
27-def make_server_info(phase, buildable=None, building=None, disabled=None):
28+def make_server_info(
29+ phase, buildable=None, building=None, disabled=None):
30 if building is None:
31 building = []
32 if disabled is None:
33@@ -1234,6 +1235,16 @@
34 disabled=['qux'])
35 self.assertEqual(si.get_enabled_jobs(), ['foo', 'bar', 'baz'])
36
37+ def test_handles_jobs_without_color(self):
38+ """Some project types don't have 'color' i.e. multibranch pipeline."""
39+ # Multibranch jobs aren't actively monitored by ci-director but must
40+ # not confuse ci-director.
41+ si = ServerInfo({'jobs': [
42+ {'name': 'a'},
43+ {'color': 'red_anime', 'name': 'd'},
44+ ]})
45+ self.assertEqual(['d'], si.get_building_jobs())
46+
47
48 class TestConfigReader(TestCase):
49
50
51=== modified file 'cidirector/tests/test_update_outcome.py'
52--- cidirector/tests/test_update_outcome.py 2017-01-18 20:29:38 +0000
53+++ cidirector/tests/test_update_outcome.py 2017-08-02 04:40:08 +0000
54@@ -36,6 +36,7 @@
55 OutcomeJobSource,
56 OutcomeState,
57 scan_new_builds,
58+ update_job_configs,
59 )
60 from cidirector.utility import temp_dir
61 from cidirector.tests.test_cidirector import (
62@@ -933,3 +934,21 @@
63 state.write_mongo_data(32, rb_data, lbs_data, {})
64 mongo_name = state.mongo_filename(32)
65 self.assertFalse(os.path.lexists(mongo_name))
66+
67+
68+class TestUpdateJobConfigs(TestCase):
69+
70+ def test_ignores_multibranch_jobs(self):
71+ jobs_by_name = {'my-multibranch': {}}
72+ update_job_configs(jobs_by_name, {})
73+
74+ def test_ignores_only_multibranch(self):
75+ jobs_by_name = {
76+ 'my-multibranch': {},
77+ 'normal-job': {'name': 'normal-job', 'color': 'not-disabled'}
78+ }
79+ builds_by_key = {'normal-job': {'normal-job': {}}}
80+ update_job_configs(jobs_by_name, builds_by_key)
81+ self.assertEqual(
82+ builds_by_key,
83+ {'normal-job': {'normal-job': {'config': None}}})
84
85=== modified file 'cidirector/update_outcome.py'
86--- cidirector/update_outcome.py 2017-01-18 20:20:30 +0000
87+++ cidirector/update_outcome.py 2017-08-02 04:40:08 +0000
88@@ -124,11 +124,16 @@
89
90 def update_job_configs(jobs_by_name, builds_by_key):
91 # Ensure config data is provided even for jobs with no builds.
92+ # Multibranch jobs don't have a 'color' and ci-director needs to ignore
93+ # them at any rate.
94 active_jobs = set(n for n, j in jobs_by_name.items()
95- if j['color'] != 'disabled')
96+ if j.get('color', 'disabled') != 'disabled')
97 configs = {}
98 active_jobs = set()
99 for job_name, job_info in jobs_by_name.items():
100+ if not job_info.get('color'):
101+ # This is a multibranch job, skip it.
102+ continue
103 if job_info['color'] != 'disabled':
104 active_jobs.add(job_name)
105 config = get_cid_config(job_info, cloud_health=True)

Subscribers

People subscribed via source and target branches