Merge lp:~cjohnston/ubuntu-ci-services-itself/new-ticket-defaults into lp:ubuntu-ci-services-itself

Proposed by Chris Johnston
Status: Merged
Approved by: Chris Johnston
Approved revision: 227
Merged at revision: 231
Proposed branch: lp:~cjohnston/ubuntu-ci-services-itself/new-ticket-defaults
Merge into: lp:ubuntu-ci-services-itself
Diff against target: 277 lines (+60/-11)
9 files modified
juju-deployer/configs/unit_config.yaml.tmpl (+5/-0)
juju-deployer/ticket-system.yaml (+1/-2)
ticket_system/setup.py (+1/-0)
ticket_system/ticket/migrations/0001_initial.py (+7/-3)
ticket_system/ticket/models.py (+10/-0)
ticket_system/ticket/tests/test_full_read_api.py (+2/-0)
ticket_system/ticket/tests/test_models.py (+4/-2)
ticket_system/ticket/tests/test_read_api.py (+10/-0)
ticket_system/ticket_system/settings.py (+20/-4)
To merge this branch: bzr merge lp:~cjohnston/ubuntu-ci-services-itself/new-ticket-defaults
Reviewer Review Type Date Requested Status
Andy Doan (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+205640@code.launchpad.net

Commit message

Add 'series' and 'master ppa' defaults to a ticket

Description of the change

* Add 'series' and 'master ppa' defaults to a ticket
* switch from defining extra settings in the deployer yaml to using unit_config

To post a comment you must log in.
Revision history for this message
Andy Doan (doanac) wrote :

hard to argue against this, since 50% of this was my idea :)

review: Approve
226. By Chris Johnston

cleanup

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:226
http://s-jenkins.ubuntu-ci:8080/job/uci-engine-ci/131/
Executed test runs:

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/uci-engine-ci/131/rebuild

review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:227
http://s-jenkins.ubuntu-ci:8080/job/uci-engine-ci/133/
Executed test runs:

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/uci-engine-ci/133/rebuild

review: Approve (continuous-integration)
227. By Chris Johnston

Add choices

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:227
http://s-jenkins.ubuntu-ci:8080/job/uci-engine-ci/139/
Executed test runs:

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/uci-engine-ci/139/rebuild

review: Approve (continuous-integration)
Revision history for this message
Andy Doan (doanac) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'juju-deployer/configs/unit_config.yaml.tmpl'
2--- juju-deployer/configs/unit_config.yaml.tmpl 2014-02-03 20:29:42 +0000
3+++ juju-deployer/configs/unit_config.yaml.tmpl 2014-02-11 16:41:21 +0000
4@@ -14,3 +14,8 @@
5 oauth_token_secret: TODO
6
7 ppa_pattern: "ci-pool-\\d+"
8+
9+# for ticket system
10+base_image: "http://cloud-images.ubuntu.com/releases/13.10/release-20131015/ubuntu-13.10-server-cloudimg-amd64-disk1.img"
11+series: SAUCY
12+master_ppa: TODO
13
14=== modified file 'juju-deployer/ticket-system.yaml'
15--- juju-deployer/ticket-system.yaml 2014-01-29 20:13:31 +0000
16+++ juju-deployer/ticket-system.yaml 2014-02-11 16:41:21 +0000
17@@ -16,13 +16,12 @@
18 options:
19 vcs: bzr
20 repos_url: lp:ubuntu-ci-services-itself
21- additional_distro_packages: python-mock,lazr.enum
22+ additional_distro_packages: python-mock,lazr.enum, python-yaml
23 additional_pip_packages: django-tastypie==0.9.15
24 application_path: ticket_system/
25 django_settings: ticket_system.settings
26 django_south: True
27 django_debug: True
28- django_extra_settings: BASE_IMAGE_DEFAULT="http://cloud-images.ubuntu.com/releases/13.10/release-20131015/ubuntu-13.10-server-cloudimg-amd64-disk1.img"
29 python_path: /srv/ts_django/ci-utils:/srv/ts_django/ticket_system
30 # this gets shared with gunicorn via a relation-set in this charm
31 wsgi_wsgi_file: ticket_system.wsgi:application
32
33=== modified file 'ticket_system/setup.py'
34--- ticket_system/setup.py 2014-01-14 19:16:51 +0000
35+++ ticket_system/setup.py 2014-02-11 16:41:21 +0000
36@@ -49,6 +49,7 @@
37 'mock==1.0.1',
38 'model_mommy==1.2',
39 'lazr.enum>=1.1.2',
40+ 'PyYAML==3.10',
41 ]
42
43 setup(
44
45=== modified file 'ticket_system/ticket/migrations/0001_initial.py'
46--- ticket_system/ticket/migrations/0001_initial.py 2014-01-24 16:39:35 +0000
47+++ ticket_system/ticket/migrations/0001_initial.py 2014-02-11 16:41:21 +0000
48@@ -17,7 +17,9 @@
49 ('bug_id', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
50 ('current_workflow_step', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=4096)),
51 ('status', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=4096)),
52- ('base_image', self.gf('django.db.models.fields.CharField')(max_length=4096)),
53+ ('base_image', self.gf('django.db.models.fields.CharField')(default='', max_length=4096)),
54+ ('series', self.gf('django.db.models.fields.CharField')(default=None, max_length=4096)),
55+ ('master_ppa', self.gf('django.db.models.fields.CharField')(default=None, max_length=4096)),
56 ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
57 ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
58 ('added_binaries', self.gf('django.db.models.fields.CharField')(max_length=4096, null=True, blank=True)),
59@@ -86,7 +88,7 @@
60 u'project.sourcepackage': {
61 'Meta': {'object_name': 'SourcePackage', 'db_table': "'sourcepackage'"},
62 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63- 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'})
64+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'})
65 },
66 u'ticket.sourcepackageupload': {
67 'Meta': {'object_name': 'SourcePackageUpload', 'db_table': "'sourcepackageupload'"},
68@@ -114,14 +116,16 @@
69 u'ticket.ticket': {
70 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket'"},
71 'added_binaries': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True', 'blank': 'True'}),
72- 'base_image': ('django.db.models.fields.CharField', [], {'max_length': '4096'}),
73+ 'base_image': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}),
74 'bug_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
75 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
76 'current_workflow_step': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '4096'}),
77 'description': ('django.db.models.fields.TextField', [], {}),
78 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79+ 'master_ppa': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '4096'}),
80 'owner': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
81 'removed_binaries': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True', 'blank': 'True'}),
82+ 'series': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '4096'}),
83 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '4096'}),
84 'title': ('django.db.models.fields.CharField', [], {'max_length': '4096'}),
85 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
86
87=== modified file 'ticket_system/ticket/models.py'
88--- ticket_system/ticket/models.py 2014-01-28 12:28:13 +0000
89+++ ticket_system/ticket/models.py 2014-02-11 16:41:21 +0000
90@@ -38,6 +38,12 @@
91 class Meta:
92 db_table = 'ticket'
93
94+ SERIES_CHOICES = (
95+ ('PRECISE', 'Precise'),
96+ ('QUANTAL', 'Quantal'),
97+ ('SAUCY', 'Saucy'),
98+ ('TRUSTY', 'Trusty'),
99+ )
100 owner = models.EmailField(max_length=254)
101 title = models.CharField(max_length=4096)
102 description = models.TextField()
103@@ -50,6 +56,10 @@
104 default=000)
105 base_image = models.CharField(max_length=4096,
106 default=settings.BASE_IMAGE_DEFAULT)
107+ series = models.CharField(max_length=4096, choices=SERIES_CHOICES,
108+ default=settings.SERIES_DEFAULT)
109+ master_ppa = models.CharField(max_length=4096,
110+ default=settings.MASTER_PPA_DEFAULT)
111 created = models.DateTimeField(auto_now_add=True)
112 updated = models.DateTimeField(auto_now=True)
113 # Comma-separated list of binary names to install or not install when
114
115=== modified file 'ticket_system/ticket/tests/test_full_read_api.py'
116--- ticket_system/ticket/tests/test_full_read_api.py 2014-01-24 16:58:12 +0000
117+++ ticket_system/ticket/tests/test_full_read_api.py 2014-02-11 16:41:21 +0000
118@@ -89,7 +89,9 @@
119 u'owner': unicode(self.ticket.owner),
120 u'base_image': unicode(self.ticket.base_image),
121 u'id': self.ticket.pk,
122+ u'master_ppa': unicode(self.ticket.master_ppa),
123 u'resource_uri': u'/api/v1/fullticket/{0}/'.format(self.ticket.pk),
124+ u'series': unicode(self.ticket.series),
125 u'updated': unicode(self.ticket.updated.strftime(
126 "%Y-%m-%dT%H:%M:%S.%f")),
127 u'removed_binaries': self.ticket.removed_binaries,
128
129=== modified file 'ticket_system/ticket/tests/test_models.py'
130--- ticket_system/ticket/tests/test_models.py 2014-01-24 16:39:35 +0000
131+++ ticket_system/ticket/tests/test_models.py 2014-02-11 16:41:21 +0000
132@@ -42,8 +42,8 @@
133 bug_id='12345', owner='test@example.com',
134 current_workflow_step=TicketWorkflowStep.PKG_BUILDING,
135 status=TicketWorkflowStepStatus.PKG_BUILDING_INPROGRESS,
136- base_image='17', added_binaries="foo,bar",
137- removed_binaries="baz"):
138+ base_image='17', added_binaries="foo,bar", series='saucy',
139+ removed_binaries="baz", master_ppa='ci-engine/ppa'):
140 ticket = Ticket()
141 ticket.owner = owner
142 ticket.title = title
143@@ -54,6 +54,8 @@
144 ticket.base_image = base_image
145 ticket.added_binaries = added_binaries
146 ticket.removed_binaries = removed_binaries
147+ ticket.series = series
148+ ticket.master_ppa = master_ppa
149 ticket.save()
150 return ticket
151
152
153=== modified file 'ticket_system/ticket/tests/test_read_api.py'
154--- ticket_system/ticket/tests/test_read_api.py 2014-01-24 16:58:12 +0000
155+++ ticket_system/ticket/tests/test_read_api.py 2014-02-11 16:41:21 +0000
156@@ -77,8 +77,10 @@
157 u'removed_binaries': self.ticket.removed_binaries,
158 u'base_image': unicode(self.ticket.base_image),
159 u'id': self.ticket.pk,
160+ u'master_ppa': unicode(self.ticket.master_ppa),
161 u'resource_uri': u'/api/v1/ticket/{0}/'.format(
162 self.ticket.pk),
163+ u'series': unicode(self.ticket.series),
164 u'updated': unicode(self.ticket.updated.strftime(
165 "%Y-%m-%dT%H:%M:%S.%f"))},
166 u'id': self.subticket.pk,
167@@ -111,8 +113,10 @@
168 u'removed_binaries': self.ticket.removed_binaries,
169 u'base_image': unicode(self.ticket.base_image),
170 u'id': self.ticket.pk,
171+ u'master_ppa': unicode(self.ticket.master_ppa),
172 u'resource_uri': u'/api/v1/ticket/{0}/'.format(
173 self.ticket.pk),
174+ u'series': unicode(self.ticket.series),
175 u'updated': unicode(self.ticket.updated.strftime(
176 "%Y-%m-%dT%H:%M:%S.%f"))},
177 u'type': unicode(self.artifact_2.type),
178@@ -154,6 +158,7 @@
179 TicketWorkflowStep)),
180 u'description': unicode(self.ticket.description),
181 u'id': self.ticket.pk,
182+ u'master_ppa': unicode(self.ticket.master_ppa),
183 u'owner': unicode(self.ticket.owner),
184 u'removed_binaries': self.ticket.removed_binaries,
185 u'status': unicode(get_enum_title(self.ticket.status,
186@@ -161,6 +166,7 @@
187 u'title': unicode(self.ticket.title),
188 u'resource_uri': u'/api/v1/ticket/{0}/'.format(
189 self.ticket.pk),
190+ u'series': unicode(self.ticket.series),
191 u'updated': unicode(self.ticket.updated.strftime(
192 "%Y-%m-%dT%H:%M:%S.%f"))},
193 })
194@@ -183,8 +189,10 @@
195 u'removed_binaries': self.ticket.removed_binaries,
196 u'base_image': unicode(self.ticket.base_image),
197 u'id': self.ticket.pk,
198+ u'master_ppa': unicode(self.ticket.master_ppa),
199 u'resource_uri': u'/api/v1/ticket/{0}/'.format(
200 self.ticket.pk),
201+ u'series': unicode(self.ticket.series),
202 u'updated': unicode(self.ticket.updated.strftime(
203 "%Y-%m-%dT%H:%M:%S.%f")),
204 })
205@@ -380,8 +388,10 @@
206 u'removed_binaries': self.ticket_6.removed_binaries,
207 u'base_image': unicode(self.ticket_6.base_image),
208 u'id': self.ticket_6.pk,
209+ u'master_ppa': unicode(self.ticket_6.master_ppa),
210 u'resource_uri': u'/api/v1/opentickets/{0}/'.format(
211 self.ticket_6.pk),
212+ u'series': unicode(self.ticket_6.series),
213 u'updated': unicode(self.ticket_6.updated.strftime(
214 "%Y-%m-%dT%H:%M:%S.%f")),
215 })
216
217=== modified file 'ticket_system/ticket_system/settings.py'
218--- ticket_system/ticket_system/settings.py 2014-01-27 15:48:03 +0000
219+++ ticket_system/ticket_system/settings.py 2014-02-11 16:41:21 +0000
220@@ -1,5 +1,5 @@
221 # Ubuntu Continuous Integration Engine
222-# Copyright 2013 Canonical Ltd.
223+# Copyright 2013, 2014 Canonical Ltd.
224
225 # This program is free software: you can redistribute it and/or modify it
226 # under the terms of the GNU Affero General Public License version 3, as
227@@ -13,7 +13,10 @@
228 # You should have received a copy of the GNU Affero General Public License
229 # along with this program. If not, see <http://www.gnu.org/licenses/>.
230
231+import glob
232 import os
233+import yaml
234+
235 BASEDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
236
237 DEBUG = False
238@@ -25,6 +28,22 @@
239
240 MANAGERS = ADMINS
241
242+
243+def _unit_config():
244+ path = os.path.join(BASEDIR, '../unit_config')
245+ config = {}
246+ try:
247+ with open(path) as f:
248+ config = yaml.safe_load(f.read())
249+ except:
250+ print('Unable to use unit_config(%s), defaulting values' % path)
251+ return config
252+_cfg = _unit_config()
253+
254+BASE_IMAGE_DEFAULT = _cfg.get('base_image', '')
255+SERIES_DEFAULT = _cfg.get('series', '')
256+MASTER_PPA_DEFAULT = _cfg.get('master_ppa', '')
257+
258 DATABASES = {
259 'default': {
260 'ENGINE': 'django.db.backends.sqlite3',
261@@ -186,8 +205,6 @@
262 }
263 }
264
265-BASE_IMAGE_DEFAULT = ""
266-
267 # Use local settings if available
268 try:
269 from local_settings import *
270@@ -196,7 +213,6 @@
271
272 # Pull in juju_settings
273 try:
274- import glob, os
275 p = os.path.join(os.path.dirname(__file__), '../juju_settings')
276 p = os.path.join(os.path.abspath(p), '*.py')
277 for f in sorted(glob.glob(p)):

Subscribers

People subscribed via source and target branches