summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2018-05-22 16:27:53 (GMT)
committerMonty Taylor <mordred@inaugust.com>2018-05-22 16:27:53 (GMT)
commit26b8c3f81569c11f029f277f61e764ab78b908d1 (patch)
tree56c29a6c1d45d34492dd52b712e71d844dafbdce
parent5f6f0e75eca1aa73f6f0117dcc4f3c626ab7e044 (diff)
Add gating talk
-rw-r--r--src/gating/cp437utf8.py69
-rw-r--r--src/gating/gating.rst1044
-rw-r--r--src/gating/images/01-gerrit.pngbin0 -> 126754 bytes
-rw-r--r--src/gating/images/02-status1.pngbin0 -> 169213 bytes
-rw-r--r--src/gating/images/03-status2.pngbin0 -> 58075 bytes
-rw-r--r--src/gating/images/04-health.pngbin0 -> 40296 bytes
-rw-r--r--src/gating/images/ansible.ans49
-rw-r--r--src/gating/images/architecture.ans45
-rw-r--r--src/gating/images/circle.ans49
-rw-r--r--src/gating/images/color-gertty.ans57
-rwxr-xr-xsrc/gating/images/convert.sh4
-rw-r--r--src/gating/images/crd.ans29
-rw-r--r--src/gating/images/cursor.ans47
-rw-r--r--src/gating/images/cursor2.ans47
-rw-r--r--src/gating/images/openstack.ans51
-rw-r--r--src/gating/images/orig/ansible.ans49
-rw-r--r--src/gating/images/orig/architecture.ans45
-rw-r--r--src/gating/images/orig/circle.ans49
-rw-r--r--src/gating/images/orig/color-gertty.ans57
-rw-r--r--src/gating/images/orig/crd.ans29
-rw-r--r--src/gating/images/orig/cursor.ans47
-rw-r--r--src/gating/images/orig/cursor2.ans47
-rw-r--r--src/gating/images/orig/openstack.ans51
-rw-r--r--src/gating/images/orig/questions.ans27
-rw-r--r--src/gating/images/orig/redhat.ans49
-rw-r--r--src/gating/images/orig/startup1.ans39
-rw-r--r--src/gating/images/orig/startup2.ans39
-rw-r--r--src/gating/images/orig/td.ansbin0 -> 2433 bytes
-rw-r--r--src/gating/images/orig/testslide.ans49
-rw-r--r--src/gating/images/orig/title.ans45
-rw-r--r--src/gating/images/orig/workflow.ans29
-rw-r--r--src/gating/images/orig/zsim-00.ans43
-rw-r--r--src/gating/images/orig/zsim-01.ans43
-rw-r--r--src/gating/images/orig/zsim-02.ans43
-rw-r--r--src/gating/images/orig/zsim-03.ans43
-rw-r--r--src/gating/images/orig/zsim-04.ans43
-rw-r--r--src/gating/images/orig/zsim-05.ans43
-rw-r--r--src/gating/images/orig/zsim-06.ans43
-rw-r--r--src/gating/images/orig/zsim-07.ans43
-rw-r--r--src/gating/images/orig/zsim-08.ans43
-rw-r--r--src/gating/images/orig/zsim-09.ans43
-rw-r--r--src/gating/images/orig/zsim-10.ans43
-rw-r--r--src/gating/images/orig/zsim-11.ans43
-rw-r--r--src/gating/images/orig/zsim-12.ans43
-rw-r--r--src/gating/images/orig/zsim-13.ans43
-rw-r--r--src/gating/images/orig/zsim-14.ans43
-rw-r--r--src/gating/images/orig/zsim-15.ans43
-rw-r--r--src/gating/images/orig/zsim-16.ans43
-rw-r--r--src/gating/images/orig/zsim-17.ans43
-rw-r--r--src/gating/images/orig/zsim-18.ans43
-rw-r--r--src/gating/images/orig/zsim-19.ans43
-rw-r--r--src/gating/images/orig/zsim-20.ans43
-rw-r--r--src/gating/images/orig/zsim-21.ans43
-rw-r--r--src/gating/images/orig/zsim-22.ans43
-rw-r--r--src/gating/images/orig/zsim-keyline.ans45
-rw-r--r--src/gating/images/orig/zuul-status.ans49
-rw-r--r--src/gating/images/orig/zuul.ans43
-rw-r--r--src/gating/images/questions.ans27
-rw-r--r--src/gating/images/redhat.ans49
-rw-r--r--src/gating/images/startup1.ans39
-rw-r--r--src/gating/images/startup2.ans39
-rw-r--r--src/gating/images/td.ansbin0 -> 2737 bytes
-rw-r--r--src/gating/images/testslide.ans49
-rw-r--r--src/gating/images/title.ans45
-rw-r--r--src/gating/images/workflow.ans29
-rw-r--r--src/gating/images/zsim-00.ans43
-rw-r--r--src/gating/images/zsim-01.ans43
-rw-r--r--src/gating/images/zsim-02.ans43
-rw-r--r--src/gating/images/zsim-03.ans43
-rw-r--r--src/gating/images/zsim-04.ans43
-rw-r--r--src/gating/images/zsim-05.ans43
-rw-r--r--src/gating/images/zsim-06.ans43
-rw-r--r--src/gating/images/zsim-07.ans43
-rw-r--r--src/gating/images/zsim-08.ans43
-rw-r--r--src/gating/images/zsim-09.ans43
-rw-r--r--src/gating/images/zsim-10.ans43
-rw-r--r--src/gating/images/zsim-11.ans43
-rw-r--r--src/gating/images/zsim-12.ans43
-rw-r--r--src/gating/images/zsim-13.ans43
-rw-r--r--src/gating/images/zsim-14.ans43
-rw-r--r--src/gating/images/zsim-15.ans43
-rw-r--r--src/gating/images/zsim-16.ans43
-rw-r--r--src/gating/images/zsim-17.ans43
-rw-r--r--src/gating/images/zsim-18.ans43
-rw-r--r--src/gating/images/zsim-19.ans43
-rw-r--r--src/gating/images/zsim-20.ans43
-rw-r--r--src/gating/images/zsim-21.ans43
-rw-r--r--src/gating/images/zsim-22.ans43
-rw-r--r--src/gating/images/zsim-keyline.ans45
-rw-r--r--src/gating/images/zuul-status.ans49
-rw-r--r--src/gating/images/zuul.ans43
-rwxr-xr-xsrc/gating/start.sh8
92 files changed, 4679 insertions, 0 deletions
diff --git a/src/gating/cp437utf8.py b/src/gating/cp437utf8.py
new file mode 100644
index 0000000..9b1b629
--- /dev/null
+++ b/src/gating/cp437utf8.py
@@ -0,0 +1,69 @@
1# _______
2# ____________ _______ _\__ /_________ ___ _____
3# | _ _ \ _ | ____\ _ / | |/ _ \
4# | / / / / | | | /___/ _ | | / /
5# |___/___/ /___/____|________|___ | |_| |___|_____/
6# \__/ |___|
7#
8#
9# (c) 2009-2012 Wijnand Modderman-Lenstra <maze@pyth0n.org>
10# MIT License
11#
12
13CP437 = (
14 u'\u0000', u'\u0001', u'\u0002', u'\u0003', u'\u0004', u'\u0005',
15 u'\u0006', u'\u0007', u'\u0008', u'\u0009', u'\u000A', u'\u000B',
16 u'\u000C', u'\u000D', u'\u000E', u'\u000F', u'\u0010', u'\u0011',
17 u'\u0012', u'\u0013', u'\u0014', u'\u0015', u'\u0016', u'\u0017',
18 u'\u0018', u'\u0019', u'\u001A', u'\u001B', u'\u001C', u'\u001D',
19 u'\u001E', u'\u001F', u'\u0020', u'\u0021', u'\u0022', u'\u0023',
20 u'\u0024', u'\u0025', u'\u0026', u'\u0027', u'\u0028', u'\u0029',
21 u'\u002A', u'\u002B', u'\u002C', u'\u002D', u'\u002E', u'\u002F',
22 u'\u0030', u'\u0031', u'\u0032', u'\u0033', u'\u0034', u'\u0035',
23 u'\u0036', u'\u0037', u'\u0038', u'\u0039', u'\u003A', u'\u003B',
24 u'\u003C', u'\u003D', u'\u003E', u'\u003F', u'\u0040', u'\u0041',
25 u'\u0042', u'\u0043', u'\u0044', u'\u0045', u'\u0046', u'\u0047',
26 u'\u0048', u'\u0049', u'\u004A', u'\u004B', u'\u004C', u'\u004D',
27 u'\u004E', u'\u004F', u'\u0050', u'\u0051', u'\u0052', u'\u0053',
28 u'\u0054', u'\u0055', u'\u0056', u'\u0057', u'\u0058', u'\u0059',
29 u'\u005A', u'\u005B', u'\u005C', u'\u005D', u'\u005E', u'\u005F',
30 u'\u0060', u'\u0061', u'\u0062', u'\u0063', u'\u0064', u'\u0065',
31 u'\u0066', u'\u0067', u'\u0068', u'\u0069', u'\u006A', u'\u006B',
32 u'\u006C', u'\u006D', u'\u006E', u'\u006F', u'\u0070', u'\u0071',
33 u'\u0072', u'\u0073', u'\u0074', u'\u0075', u'\u0076', u'\u0077',
34 u'\u0078', u'\u0079', u'\u007A', u'\u007B', u'\u007C', u'\u007D',
35 u'\u007E', u'\u007F', u'\u00C7', u'\u00FC', u'\u00E9', u'\u00E2',
36 u'\u00E4', u'\u00E0', u'\u00E5', u'\u00E7', u'\u00EA', u'\u00EB',
37 u'\u00E8', u'\u00EF', u'\u00EE', u'\u00EC', u'\u00C4', u'\u00C5',
38 u'\u00C9', u'\u00E6', u'\u00C6', u'\u00F4', u'\u00F6', u'\u00F2',
39 u'\u00FB', u'\u00F9', u'\u00FF', u'\u00D6', u'\u00DC', u'\u00A2',
40 u'\u00A3', u'\u00A5', u'\u20A7', u'\u0192', u'\u00E1', u'\u00ED',
41 u'\u00F3', u'\u00FA', u'\u00F1', u'\u00D1', u'\u00AA', u'\u00BA',
42 u'\u00BF', u'\u2310', u'\u00AC', u'\u00BD', u'\u00BC', u'\u00A1',
43 u'\u00AB', u'\u00BB', u'\u2591', u'\u2592', u'\u2593', u'\u2502',
44 u'\u2524', u'\u2561', u'\u2562', u'\u2556', u'\u2555', u'\u2563',
45 u'\u2551', u'\u2557', u'\u255D', u'\u255C', u'\u255B', u'\u2510',
46 u'\u2514', u'\u2534', u'\u252C', u'\u251C', u'\u2500', u'\u253C',
47 u'\u255E', u'\u255F', u'\u255A', u'\u2554', u'\u2569', u'\u2566',
48 u'\u2560', u'\u2550', u'\u256C', u'\u2567', u'\u2568', u'\u2564',
49 u'\u2565', u'\u2559', u'\u2558', u'\u2552', u'\u2553', u'\u256B',
50 u'\u256A', u'\u2518', u'\u250C', u'\u2588', u'\u2584', u'\u258C',
51 u'\u2590', u'\u2580', u'\u03B1', u'\u00DF', u'\u0393', u'\u03C0',
52 u'\u03A3', u'\u03C3', u'\u00B5', u'\u03C4', u'\u03A6', u'\u0398',
53 u'\u03A9', u'\u03B4', u'\u221E', u'\u03C6', u'\u03B5', u'\u2229',
54 u'\u2261', u'\u00B1', u'\u2265', u'\u2264', u'\u2320', u'\u2321',
55 u'\u00F7', u'\u2248', u'\u00B0', u'\u2219', u'\u00B7', u'\u221A',
56 u'\u207F', u'\u00B2', u'\u25A0', u'\u00A0',
57)
58
59def convert(text):
60 return u''.join([CP437[ord(char)] for char in text])
61
62if __name__ == '__main__':
63 import sys
64 if len(sys.argv) < 2:
65 print >>sys.stderr, '%s <in> <out>' % (sys.argv[0],)
66 sys.exit(1)
67 d = file(sys.argv[1]).read()
68 out = open(sys.argv[2], 'w')
69 out.write(convert(d).encode('utf8'))
diff --git a/src/gating/gating.rst b/src/gating/gating.rst
new file mode 100644
index 0000000..a636e47
--- /dev/null
+++ b/src/gating/gating.rst
@@ -0,0 +1,1044 @@
1. display in 68x24
2.. display in 88x24
3
4.. pygments yaml? (only file breaks (---) tinted)
5.. slide on high level v3 changes
6.. slide on nodepool
7
8.. transition:: dissolve
9 :duration: 0.4
10
11Test Slide
12==========
13.. hidetitle::
14
15.. ansi:: images/testslide.ans
16
17Zuul v3 for Gating
18==================
19
20Who the heck am I?
21==================
22
23 * mordred on freenode
24 * @e_monty on twitter
25 * I like scuba diving, smoking meat and long walks on the beach ...
26
27Red Hat
28=======
29
30.. hidetitle::
31.. container:: handout
32
33 * I work for Red Hat in the CTO Office as the Chief Architect
34 for CI/CD
35
36.. ansi:: images/redhat.ans
37
38OpenStack
39=========
40
41.. container:: handout
42
43 * I work on OpenStack.
44 * I sit on the Board of Directors. I was on the Technical Committee
45
46.. hidetitle::
47.. ansi:: images/openstack.ans
48
49OpenStack Infra
50===============
51
52.. container:: handout
53
54 * My primary technical role with OpenStack is working on the OpenStack CI
55 system.
56
57::
58
59 "most insane CI infrastructure I've ever been a part of"
60
61 -- Alex Gaynor
62
63 "OpenStack Infra are like the SpaceX of CI"
64
65 -- Emily Dunham
66
67tl;dr
68=====
69
70 * multi repo
71 * integrated deliverable
72 * gated commits
73 * open tooling
74 * nobody is special
75 * there is no Dana, only Zuul
76
77OpenStack Is
78============
79
80 * Federated
81 * Distributed
82 * Large
83 * Open
84 * Not Alone
85
86Federated
87=========
88
89 * Hundreds of involved companies
90 * No 'main' company
91 * "Decisions are made by those who show up"
92 * Union of priorities/use cases
93
94Impact of being Federated
95=========================
96
97 * No company can appoint humans to project positions
98 * The project cannot fire anyone
99 * Variable background of contributors
100 * Heavy reliance on consensus-oriented democracy
101
102Distributed
103===========
104
105 * There is no office
106 * Contributor base is global
107 * Multitude of contributor backgrounds
108
109Impact of being Distributed
110===========================
111
112 * Constantly at odds with American Exceptionalism
113 * Tooling must empower all contributors, regardless of background,
114 skill level or cultural context
115 * Heavy preference for text-based communication
116 * Cannot assume US-centric needs or solutions
117
118Large numbers of
119================
120
121 * Contributors (\~2k in any given 6 month period)
122 * Changes
123 * Code Repositories (1904 as of this morning)
124
125OpenStack Scale Comparison
126==========================
127
128 * 2KJPH (2,000 jobs per hour)
129 * Build Nodes from 13 Regions of 5 Public and 2 Private OpenStack Clouds
130 * Rackspace, Internap, OVH, Vexxhost, CityCloud and Linaro, Limestone
131 * 10,000 changes merged per month
132
133OpenStack Scale Comparison
134==========================
135
136 * 2KJPH (2,000 jobs per hour)
137 * Nodes from 12 Regions of 5 Public and 1 Private OpenStack Clouds
138 * Rackspace, Internap, OVH, Vexxhost, CityCloud and Linaro, Limestone
139 * 10,000 changes merged per month
140
141 By comparison, our friends at the amazing project Ansible received
142 13,000 changes and had merged 8,000 of them in its first 4 years.
143
144Four Opens
145==========
146
147 * Open Source
148 (we don't hold back Enterprise features, we don't cripple things)
149 * Open Design
150 (design process open to all, decisions are not made inside company doors)
151 * Open Development
152 (public source code, public code review, all code is reviewed and gated)
153 * Open Community
154 (lazy consensus, democratic leadership from participants,
155 public logged meetings in IRC, public archived mailing lists)
156
157Nobody is Special
158=================
159
160 * No dictators
161 * Aggressively egalitarian
162 * No "pay for play"
163
164Free Software Needs Free Tools
165==============================
166
167.. hidetitle::
168
169::
170
171 Free Software needs Free Tools
172 - Benjamin Mako Hill
173
174Fifth Open - Four Opens Applied to our Infrastructure
175=====================================================
176
177 * All tools must be Open Source
178 * Any external services must by Open Source
179 * Strongly avoid single-vendor
180
181All Tools are Open Source
182=========================
183
184.. hidetitle::
185
186No Developer is ever required to use a proprietary tool
187to work on OpenStack.
188
189Sixth Open - Four Opens Applied to Operations
190=============================================
191
192 * Ops driven by git/code-review - not by humans running commands
193 * Run as many things CD as possible
194 * Infrastructure team operates the same as the project
195 * Core reviewer status and root access are earned
196 * Human-initiated ops actions (running commands, clicking a UI) are a bug
197 * Keys/secrets are not Open :)
198
199We're Not Alone
200===============
201
202 * Dependencies (libvirt/kvm/xen, mysql/pg, rabbit,
203 python/javascript, ceph/gluster, ansible/salt/puppet/chef, ovs/odl)
204 * Adjacencies (kubernetes, ansible, terraform, opnfv, spinnaker)
205 * Vendors (plugins, products, services, distros)
206
207Developer Process In a Nutshell
208===============================
209
210 * Code Review - nobody has direct commit/push access
211 * 3rd-Party CI for vendors
212 * Gated Commits
213
214@jessfraz
215=========
216
217dear @github,
218
219hope you are well, love ya so much
220
221can I get a "squash and merge once
222
223CI passes if no other changes are
224
225pushed" button
226
227k thx
228
229Gated Commits
230=============
231
232::
233
234 Hack Review Test
235 ========= ========== ==========
236
237 push approve
238 +-------------+ +-------------+
239 | | | |
240 +------+--+ +--v----+--+ +--v-------+
241 | | | | | |
242 | $EDITOR | | Gerrit | | Zuul |
243 | | | | | |
244 +------^--+ +--+----^--+ +--+-------+
245 | | | |
246 +-------------+ +-------------+
247 clone merge
248
249Gating
250======
251
252Every change proposed for a repository is tested before it merges.
253
254Co-gating
255=========
256
257Changes to a set of repositories merge monotonically such
258that each change is tested with the current state of all
259other related repositories before it merges.
260
261Parallel Co-gating
262==================
263
264Changes are serialized such that each change is tested
265with all of the changes ahead of it to satisfy the
266gating requirement while being able to run tests for
267multiple changes simultaneously.
268
269Approve and move on
270===================
271
272 * Reviewers approve changes whenever
273 * Automation correctly deals with the rest
274
275Zuul
276====
277
278 * Multi-repo parallel co-gating engine
279 * When to run
280 * Where to run it
281 * With what git states
282 * How to respond to results
283
284Zuul Architecture
285=================
286
287.. ansi:: images/architecture.ans
288
289Not just for OpenStack
290======================
291
292 * Zuul v3 is in production for OpenStack (in OpenStack VMs)
293
294 Also running at:
295
296 * BMW (control plane in OpenShift)
297 * GoDaddy (control plane in Kubernetes)
298 * Red Hat
299 * OpenContrail
300 * OpenLab
301 * others ...
302
303Zuul Core Team Corporate Overlords
304==================================
305
306 * BMW
307 * GitHub
308 * GoDaddy
309 * OpenStack Foundation
310 * Red Hat
311 * SuSE
312
313Zuul is not a general purpose automation framework
314==================================================
315
316Zuul in a nutshell
317==================
318
319 * Listens for code events
320 * Prepares appropriate job config and git repo states
321 * Allocates nodes for test jobs
322 * Pushes git repo states to nodes
323 * Runs user-defined Ansible playbooks
324 * Collects/reports results
325 * Potentially merges change
326
327Zuul Simulation
328===============
329.. transition:: pan
330.. container:: handout
331
332 * That was a lot of words - let's walk through it one step at a time
333 * Here we have two git repos, called nova and keystone, and their
334 current HEAD state
335
336.. ansi:: images/zsim-00.ans
337
338Zuul Simulation
339===============
340.. transition:: cut
341.. container:: handout
342
343 * A change is approved for Nova
344
345.. ansi:: images/zsim-01.ans
346
347Zuul Simulation
348===============
349.. transition:: cut
350.. container:: handout
351
352 * Zuul starts running jobs for it
353 * The tests will test the current state of nova and keystone PLUS this nova
354 change
355
356.. ansi:: images/zsim-02.ans
357
358Zuul Simulation
359===============
360.. transition:: cut
361.. container:: handout
362
363 * A change is approved for Keystone
364
365.. ansi:: images/zsim-03.ans
366
367Zuul Simulation
368===============
369.. transition:: cut
370.. container:: handout
371
372 * The tests will test the current state of nova and keystone PLUS this nova
373 change
374
375.. ansi:: images/zsim-04.ans
376
377Zuul Simulation
378===============
379.. transition:: cut
380.. container:: handout
381
382 * todo
383
384.. ansi:: images/zsim-05.ans
385
386Zuul Simulation
387===============
388.. transition:: cut
389.. container:: handout
390
391 * todo
392
393.. ansi:: images/zsim-06.ans
394
395Zuul Simulation
396===============
397.. transition:: cut
398.. container:: handout
399
400 * todo
401
402.. ansi:: images/zsim-07.ans
403
404Zuul Simulation
405===============
406.. transition:: cut
407.. container:: handout
408
409 * todo
410
411.. ansi:: images/zsim-08.ans
412
413Zuul Simulation
414===============
415.. transition:: cut
416.. container:: handout
417
418 * todo
419
420.. ansi:: images/zsim-09.ans
421
422Zuul Simulation
423===============
424.. transition:: cut
425.. container:: handout
426
427 * todo
428
429.. ansi:: images/zsim-10.ans
430
431Zuul Simulation
432===============
433.. transition:: cut
434.. container:: handout
435
436 * todo
437
438.. ansi:: images/zsim-11.ans
439
440Zuul Simulation
441===============
442.. transition:: cut
443.. container:: handout
444
445 * todo
446
447.. ansi:: images/zsim-12.ans
448
449Zuul Simulation
450===============
451.. transition:: cut
452.. container:: handout
453
454 * todo
455
456.. ansi:: images/zsim-13.ans
457
458Zuul Simulation
459===============
460.. transition:: cut
461.. container:: handout
462
463 * todo
464
465.. ansi:: images/zsim-14.ans
466
467Zuul Simulation
468===============
469.. transition:: cut
470.. container:: handout
471
472 * todo
473
474.. ansi:: images/zsim-15.ans
475
476Zuul Simulation
477===============
478.. transition:: cut
479.. container:: handout
480
481 * todo
482
483.. ansi:: images/zsim-16.ans
484
485Zuul Simulation
486===============
487.. transition:: cut
488.. container:: handout
489
490 * todo
491
492.. ansi:: images/zsim-17.ans
493
494Zuul Simulation
495===============
496.. transition:: cut
497.. container:: handout
498
499 * todo
500
501.. ansi:: images/zsim-18.ans
502
503Zuul Simulation
504===============
505.. transition:: cut
506.. container:: handout
507
508 * todo
509
510.. ansi:: images/zsim-19.ans
511
512Zuul Simulation
513===============
514.. transition:: cut
515.. container:: handout
516
517 * todo
518
519.. ansi:: images/zsim-20.ans
520
521Zuul Simulation
522===============
523.. transition:: cut
524.. container:: handout
525
526 * todo
527
528.. ansi:: images/zsim-21.ans
529
530Zuul Simulation
531===============
532.. transition:: cut
533.. container:: handout
534
535 * todo
536
537.. ansi:: images/zsim-22.ans
538
539Jobs
540====
541
542* Jobs run on nodes from nodepool (static or dynamic)
543* Metadata defined in Zuul's configuration
544* Execution content in Ansible (with live streaming!)
545* Jobs may be defined centrally or in the repo being tested
546* Jobs have contextual variants that simplify configuration
547
548Shared Job Configs
549==================
550
551* Job config repos are all in git
552* Designed to support directly sharing job configurations
553* git.zuul-ci.org/zuul-jobs repo is a 'standard library'
554 to be directly shared between zuul installations
555
556Job
557===
558
559.. code:: yaml
560
561 - job:
562 name: base
563 parent: null
564 description: |
565 The base job for Zuul.
566 timeout: 1800
567 nodeset:
568 nodes:
569 - name: primary
570 label: centos-7
571 pre-run: playbooks/base/pre.yaml
572 post-run:
573 - playbooks/base/post-ssh.yaml
574 - playbooks/base/post-logs.yaml
575 secrets:
576 - site_logs
577
578Simple Job
579==========
580
581.. code:: yaml
582
583 - job:
584 name: tox
585 pre-run: playbooks/setup-tox.yaml
586 run: playbooks/tox.yaml
587 post-run: playbooks/fetch-tox-output.yaml
588
589 - job:
590 name: tox-py27
591 parent: tox
592 vars:
593 tox_envlist: py27
594
595Playbooks
596=========
597
598* Jobs run Ansible playbooks
599* Playbooks may be defined centrally or in the repo being tested
600* Playbooks can use roles from current or other Zuul repos
601 (or Galaxy, coming soon)
602* Playbooks are run on the zuul-executor using bubblewrap
603 https://github.com/projectatomic/bubblewrap
604* Playbooks are not allowed to execute content on 'localhost'
605
606Devstack-gate / Tempest Playbook
607================================
608
609.. code:: yaml
610
611 # devstack-gate / tempest playbook
612 hosts: all
613 roles:
614 - setup-multinode-networking
615 - partition-swap
616 - configure-mirrors
617 - run-devstack
618 - run-tempest
619
620Simple Shell Playbook
621=====================
622
623.. code:: yaml
624
625 hosts: controller
626 tasks:
627 - shell: ./run_tests.sh
628
629Test Like Production
630====================
631
632If you use Ansible for deployment, your test and deployment processes
633and playbooks are the same
634
635What if you don't use Ansible?
636==============================
637
638OpenStack Infra Control Plane (currently) uses Puppet
639=====================================================
640
641.. code:: yaml
642
643 # In git.openstack.org/openstack-infra/project-config/roles/legacy-install-afs-with-puppet/tasks/main.yaml
644 - name: Install puppet
645 shell: ./install_puppet.sh
646 args:
647 chdir: "{{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/system-config"
648 environment:
649 # Skip setting up pip, our images have already done this.
650 SETUP_PIP: "false"
651 become: yes
652
653 - name: Copy manifest
654 copy:
655 src: manifest.pp
656 dest: "{{ ansible_user_dir }}/manifest.pp"
657
658 - name: Run puppet
659 puppet:
660 manifest: "{{ ansible_user_dir }}/manifest.pp"
661 become: yes
662
663
664Cross-Project Example Problem
665=============================
666
667 * User reports bug in shade - auto_ip is not discovering their NAT properly
668 * Two fixes, one to detection algorithm, one to config override
669 * Config override requires adding support to os-client-config
670 * Once support is added to os-client-config, it can be consumed in shade
671 * How do we integration test this without releasing os-client-config?
672
673Cross-Project Dependencies
674==========================
675
676Testing or gating dependencies (including jobs) manually specified by
677developers
678
679.. container:: progressive
680
681 * shade https://review.openstack.org/513913/
682
683 Add unittest tips jobs
684
685 Change-ID: I5b411be5c5aa43535fa89a51d6099aadd7a8ea60
686 * os-client-config https://review.openstack.org/513915
687
688 Add shade-tox-tips jobs
689
690 Change-ID: Ie3e9a4deca1d74b94e810e87e130706fe15fe2c9
691
692 Depends-On: https://review.openstack.org/513913/
693 * os-client-config https://review.openstack.org/513751/
694
695 Added nat_source flag for networks
696
697 Change-ID: I3d8dd6d734a1013d2d4a43e11c3538c3a345820b
698
699 * shade https://review.openstack.org/#/c/513914
700
701 Add support for configured NAT source variable
702
703 Change-Id: I4b50c2323a487b5ce90f9d38a48be249cfb739c5
704
705 Depends-On: https://review.openstack.org/513914
706
707shade: Add unittest tips jobs
708=============================
709
710* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
711
712.. code:: yaml
713
714 - job:
715 name: shade-tox-py27-tips
716 parent: openstack-tox-py27
717 description: |
718 Run tox python 27 unittests against master of important libs
719 required-projects:
720 - openstack-infra/shade
721 - openstack/keystoneauth
722 - openstack/os-client-config
723
724 - job:
725 name: shade-tox-py35-tips
726 parent: openstack-tox-py35
727 description: |
728 Run tox python 35 unittests against master of important libs
729 required-projects:
730 - openstack-infra/shade
731 - openstack/keystoneauth
732 - openstack/os-client-config
733
734shade: Add unittest tips project-template
735=========================================
736
737* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
738
739.. code:: yaml
740
741 - project-template:
742 name: shade-tox-tips
743 check:
744 jobs:
745 - shade-tox-py27-tips
746 - shade-tox-py35-tips
747 gate:
748 jobs:
749 - shade-tox-py27-tips
750 - shade-tox-py35-tips
751
752shade: Add unittest tips project-template to project
753====================================================
754
755* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
756
757.. code:: yaml
758
759 - project:
760 templates:
761 - publish-to-pypi
762 - publish-openstack-sphinx-docs
763 - shade-tox-tips
764
765os-client-config: Add shade-tox-tips jobs
766=========================================
767
768* In git.openstack.org/openstack/os-client-config/.zuul.yaml:
769
770.. code:: yaml
771
772 - project:
773 templates:
774 - shade-tox-tips
775
776os-client-config: Add nat_source flag for networks
777==================================================
778
779::
780
781 diff --git a/os_client_config/cloud_config.py b/os_client_config/cloud_config.py
782 index 2e97629..d1a6983 100644
783 --- a/os_client_config/cloud_config.py
784 +++ b/os_client_config/cloud_config.py
785 @@ -581,3 +581,10 @@ class CloudConfig(object):
786 if net['nat_destination']:
787 return net['name']
788 return None
789 +
790 + def get_nat_source(self):
791 + """Get network used for NAT source."""
792 + for net in self.config['networks']:
793 + if net.get('nat_source'):
794 + return net['name']
795 + return None
796
797shade: Add support for configured NAT source variable
798=====================================================
799
800::
801
802 Zuul 10-21 13:57
803 Patch Set 5: Verified-1
804 Build failed.
805 openstack-tox-pep8 SUCCESS in 2m 29s
806 openstack-tox-py27 FAILURE in 2m 34s
807 build-openstack-releasenotes SUCCESS in 2m 47s
808 openstack-tox-py35 FAILURE in 2m 41s
809 openstack-tox-cover POST_FAILURE in 3m 52s (non-voting)
810 build-openstack-sphinx-docs SUCCESS in 2m 57s
811 shade-tox-py27-tips SUCCESS in 3m 18s
812 shade-tox-py35-tips SUCCESS in 2m 28s
813
814OpenStack Github Support for Cross Community Testing
815====================================================
816
817 * OpenStack does not use Github, but other people do
818 * Github App "OpenStack Zuul"
819 * App added to github project by project admin
820 * Project aded to OpenStack's main.yaml
821 * Test interactions between OpenStack and important adjacent communities
822 * https://github.com/ansible/ansible/pull/20974
823
824Cross Source Dependencies
825=========================
826
827.. container:: progressive
828
829 * shade https://review.openstack.org/539563
830
831 Shift voting flag and test_matrix_branch for ansible-devel job
832
833 Change-ID: Ic9d3983de641dbe618c65b2cbf2dcfa3686575df
834
835 * ansible https://github.com/ansible/ansible/pull/34925
836
837 continue fact gathering even without dmidecode
838
839 * ansible https://github.com/ansible/ansible/pull/20974
840
841 Make a generalized OpenStack cloud constructor
842
843 Depends-On: https://review.openstack.org/539563
844 Depends-On: https://github.com/ansible/ansible/pull/34925
845
846Nodesets for Multi-node Jobs
847============================
848
849.. code:: yaml
850
851 - nodeset:
852 name: ceph-cluster
853 nodes:
854 - name: controller
855 label: centos-7
856 - name: compute1
857 label: fedora-26
858 - name: compute2
859 label: fedora-26
860 groups:
861 - name: ceph-osd
862 nodes:
863 - controller
864 - name: ceph-monitor
865 nodes:
866 - controller
867 - compute1
868 - compute2
869
870Multi-node Job
871==============
872
873* nodesets are provided to Ansible for jobs in inventory
874
875.. code:: yaml
876
877 - job:
878 name: ceph-multinode
879 nodeset: ceph-cluster
880 run: playbooks/install-ceph.yaml
881
882Multi-node Ceph Job Content
883===========================
884
885.. code:: yaml
886
887 - hosts: all
888 roles:
889 - install-ceph
890 - hosts: ceph-osd
891 roles:
892 - start-ceph-osd
893 - hosts: ceph-monitor
894 roles:
895 - start-ceph-monitor
896 - hosts: all
897 roles:
898 - do-something-interesting
899
900Projects
901========
902
903* Projects are git repositories
904* Specify a set of jobs for each pipeline
905* golang git repo naming as been adopted:
906
907::
908
909 zuul@ubuntu-xenial:~$ find /home/zuul/src -mindepth 3 -maxdepth 3 -type d
910 /home/zuul/src/git.openstack.org/openstack-infra/shade
911 /home/zuul/src/git.openstack.org/openstack/keystoneauth
912 /home/zuul/src/git.openstack.org/openstack/os-client-config
913 /home/zuul/src/github.com/ansible/ansible
914
915Project with Job Dependencies
916=============================
917
918.. code:: yaml
919
920 # In git.openstack.org/openstack-infra/project-config:
921 - project:
922 name: openstack/nova
923 release:
924 jobs:
925 - build-artifacts
926 - upload-tarball:
927 dependencies: build-artifacts
928 - upload-pypi:
929 dependencies: build-artifacts
930 - notify-mirror:
931 dependencies:
932 - upload-tarball
933 - upload-pypi
934
935Secrets
936=======
937
938* Inspired by Kubernetes Secrets API
939* Projects can add named encrypted secrets to their .zuul.yaml file
940* Jobs can request to use secrets by name
941* Jobs using secrets are not reconfigured speculatively
942* Secrets can only be used by the same project they are defined in
943* Public key per project:
944 ``{{ zuul_url }}/tenant/{{ tenant }}/key/{{ project }}.pub``
945
946Secret Example (note, no admins had to enable this)
947===================================================
948
949.. code:: yaml
950
951 # In git.openstack.org/openstack/loci/.zuul.yaml:
952 - secret:
953 name: loci_docker_login
954 data:
955 user: !encrypted/pkcs1-oaep
956 - r8Nbpq5olmfLF035BZ/CUoFLIdhvBi/49KuochOAHbvns+xMiho3C7MEFzYDqJX3IhHde
957 BICYOgK7qnyINOIZL2e7pl75rEdHQwJjSFUMkpdY6wEP7f9hpolj9xVp0ifHUVQqPHMRn
958 zoPFd8MEAHxH5GLmc2SWJ98E/QUqGltxBi1YRSZoCcNtq3tHFK5Y+xQlLhIseJ2HkpDs6
959 YXOGP9Qt4Va6sdyBcA90H+apSAcYA3Duu962ySZQAsYNui/3NQq3gLA+OZeyTJtcrh4hj
960 Rb5dBnDWfSrMpxdNkbPXXgbQaxO3T0L4jbaOF8VKEsiI9olBrOeV2M9ddYJjSsHGj4XR8
961 4vwS0+doB7np93fujiDuHVgdG8R40NW2GznyKRlRtzAORla7Mzw1Y1MokcUyY6p1LlLLl
962 wUuWYCCEuRciOPhZXQ2u42qju/zrK2/dPnO8HfUINSrN0WbNq14ZwPpbj0ro02oGPbtwu
963 OTw1z+N0Nc+GuLWlwYJGYM/z0UnvDR3WEBc2kXbVev9w4n0cB3RyphML2PDZZWbw8tjnX
964 h1VsAOJ0Qo4qq1K/ft95ypd+vtjkfepEgHEBmJNwutJa9IHAkGfrkO9VkpUTPpfffnPwz
965 d0/zaaadNl6MLQUSutRwY23YIIbv+fmukxw2vnJmvn6abkBlMya7KgtifwNA8c=
966 password: !encrypted/pkcs1-oaep
967 - gUEX4eY3JAk/Xt7Evmf/hF7xr6HpNRXTibZjrKTbmI4QYHlzEBrBbHey27Pt/eYvKKeKw
968 hk8MDQ4rNX7ZK1v+CKTilUfOf4AkKYbe6JFDd4z+zIZ2PAA7ZedO5FY/OnqrG7nhLvQHE
969 5nQrYwmxRp4O8eU5qG1dSrM9X+bzri8UnsI7URjqmEsIvlUqtybQKB9qQXT4d6mOeaKGE
970 5h6Ydkb9Zdi4Qh+GpCGDYwHZKu1mBgVK5M1G6NFMy1DYz+4NJNkTRe9J+0TmWhQ/KZSqo
971 4ck0x7Tb0Nr7hQzV8SxlwkaCTLDzvbiqmsJPLmzXY2jry6QsaRCpthS01vnj47itoZ/7p
972 taH9CoJ0Gl7AkaxsrDSVjWSjatTQpsy1ub2fuzWHH4ASJFCiu83Lb2xwYts++r8ZSn+mA
973 hbEs0GzPI6dIWg0u7aUsRWMOB4A+6t2IOJibVYwmwkG8TjHRXxVCLH5sY+i3MR+NicR9T
974 IZFdY/AyH6vt5uHLQDU35+5n91pUG3F2lyiY5aeMOvBL05p27GTMuixR5ZoHcvSoHHtCq
975 7Wnk21iHqmv/UnEzqUfXZOque9YP386RBWkshrHd0x3OHUfBK/WrpivxvIGBzGwMr2qAj
976 /AhJsfDXKBBbhGOGk1u5oBLjeC4SRnAcIVh1+RWzR4/cAhOuy2EcbzxaGb6VTM=
977
978Secret Example
979==============
980
981.. code:: yaml
982
983 # In git.openstack.org/openstack/loci/.zuul.yaml:
984 - job:
985 name: publish-loci-cinder
986 parent: loci-cinder
987 post-run: playbooks/push
988 secrets:
989 - loci_docker_login
990
991 # In git.openstack.org/openstack/loci/playbooks/push.yaml:
992 - hosts: all
993 tasks:
994 - include_vars: vars.yaml
995
996 - name: Push project to DockerHub
997 block:
998 - command: docker login -u {{ loci_docker_login.user }} -p {{ loci_docker_login.password }}
999 no_log: True
1000 - command: docker push openstackloci/{{ project }}:{{ branch }}-{{ item.name }}
1001 with_items: "{{ distros }}"
1002
1003
1004What's Next?
1005============
1006
1007* MQTT publisher
1008* node providers
1009
1010 * kuberenetes
1011 * OCI/docker
1012 * Mac Stadium (for our Ansible friends)
1013 * ec2/gce/azure
1014
1015* native container/kubernetes job execution
1016
1017Important Links
1018===============
1019
1020* https://zuul-ci.org/
1021* https://git.zuul-ci.org/cgit/zuul
1022* https://zuul-ci.org/docs/zuul
1023* https://zuul-ci.org/docs/zuul-jobs/
1024* https://docs.openstack.org/infra/manual/zuulv3.html
1025* https://docs.openstack.org/infra/openstack-zuul-jobs/
1026* https://storyboard.openstack.org/#!/project/679
1027* https://storyboard.openstack.org/#!/board/41
1028* freenode:#zuul
1029
1030Questions
1031=========
1032
1033.. ansi:: images/questions.ans
1034
1035Presentty
1036=========
1037.. hidetitle::
1038.. transition:: pan
1039.. figlet:: Presentty
1040
1041* Console presentations written in reStructuredText
1042* Cross-fade, pan, tilt, cut transitions
1043* Figlet, cowsay!
1044* https://pypi.python.org/pypi/presentty
diff --git a/src/gating/images/01-gerrit.png b/src/gating/images/01-gerrit.png
new file mode 100644
index 0000000..2c8a2c4
--- /dev/null
+++ b/src/gating/images/01-gerrit.png
Binary files differ
diff --git a/src/gating/images/02-status1.png b/src/gating/images/02-status1.png
new file mode 100644
index 0000000..7b350a8
--- /dev/null
+++ b/src/gating/images/02-status1.png
Binary files differ
diff --git a/src/gating/images/03-status2.png b/src/gating/images/03-status2.png
new file mode 100644
index 0000000..0b2607d
--- /dev/null
+++ b/src/gating/images/03-status2.png
Binary files differ
diff --git a/src/gating/images/04-health.png b/src/gating/images/04-health.png
new file mode 100644
index 0000000..750d32c
--- /dev/null
+++ b/src/gating/images/04-health.png
Binary files differ
diff --git a/src/gating/images/ansible.ans b/src/gating/images/ansible.ans
new file mode 100644
index 0000000..0cadddf
--- /dev/null
+++ b/src/gating/images/ansible.ans
@@ -0,0 +1,49 @@
1
2
3 ▄▄▄▄██████▄▄▄▄
4
5 ▄▄██████████████████▄▄
6
7 ▄██████████████████████████▄
8
9 ▄██████████████████████████████▄
10
11 ▄██████████████████████████████████▄
12
13 ▄██████████████████ █████████████████▄
14
15 ▐██████████████████ █████████████████▌
16
17 ██████████████████ ▄ █████████████████
18
19 ▐█████████████████ █ ████████████████▌
20
21 █████████████████ ███ ████████████████
22
23 ▐████████████████ █████ ███████████████▌
24
25 ▐███████████████ ▀▀███ ██████████████▌
26
27 ██████████████ ▄ ▀▀█ █████████████
28
29 ▐████████████ ████▄▄ ███████████▌
30
31 ███████████ ████████▄▄ ██████████
32
33 ▐█████████ █████████████▄ ████████▌
34
35 ▀███████ ████████████████▄▄▄████████▀
36
37 ▀██████████████████████████████████▀
38
39 ▀██████████████████████████████▀
40
41 ▀██████████████████████████▀
42
43 ▀▀██████████████████▀▀
44
45 ▀▀▀▀██████▀▀▀▀
46
47
48
49 \ No newline at end of file
diff --git a/src/gating/images/architecture.ans b/src/gating/images/architecture.ans
new file mode 100644
index 0000000..ad308eb
--- /dev/null
+++ b/src/gating/images/architecture.ans
@@ -0,0 +1,45 @@
1
2
3
4
5
6
7 ┌─────────────┐
8
9 ┌───────┤ Zuul Merger │   
10
11 ┌────┴───┐ └──┬───┬──────┘
12
13 ┌──┤ Gerrit ├──┐ │ │
14
15 │ └────────┘ │ ┌─┘ │
16
17   │ ┌────────┐ │ │ ┌──┴───┐ ┌───────────────┐
18
19 ┌─────┼──┤  Web  ├──┼────┤ Zuul ├─────┤ Zuul Executor │ 
20
21 ____ │ └────┬───┘ │ │ └──┬───┘ │ ┌───────┐ │
22
23 |... | │ ┌────┴───┐ │ │ │ │  │Ansible│ │
24
25 |... | ├──┤ GitHub ├──┼─┘ │ └───┴───┬───┴───┘
26
27/______\ │ └────────┘ │ ┌────┴─────┐ │
28
29 o │ ┌────────┐ │ │ Nodepool │ │
30
31 -|- └──┤ Finger ├──┘ └────┬─────┘ │
32
33 / \ └────────┘ │ │
34
35 Dev Cloud │  │
36
37  Node 1 ─────────────┤
38
39  ...  │
40
41  Node 2 ─────────────┘
42
43(Not to scale)  
44
45 \ No newline at end of file
diff --git a/src/gating/images/circle.ans b/src/gating/images/circle.ans
new file mode 100644
index 0000000..291eb33
--- /dev/null
+++ b/src/gating/images/circle.ans
@@ -0,0 +1,49 @@
1 ▄▄▄▀▀▀▀▄▄▄
2
3 ▄▄▀▀▀ ▀▀▀▄▄
4
5 ▄▀▀ ▀▀▄
6
7 ▄▀ ▀▄
8
9 ▄▀ ▀▄
10
11 ▄▀ ▀▄
12
13 ▄▀ ▀▄
14
15 █ █
16
17 █ █
18
19▄▀ ▀▄
20
21█ █
22
23▀▄ ▄▀
24
25 █ █
26
27 █ █
28
29 ▀▄ ▄▀
30
31 ▀▄ ▄▀
32
33 ▀▄ ▄▀
34
35 ▀▄ ▄▀
36
37 ▀▄▄ ▄▄▀
38
39 ▀▀▄▄▄ ▄▄▄▀▀
40
41 ▀▀▀▄▄▄▄▀▀▀
42
43
44
45
46
47
48
49 \ No newline at end of file
diff --git a/src/gating/images/color-gertty.ans b/src/gating/images/color-gertty.ans
new file mode 100644
index 0000000..7530e70
--- /dev/null
+++ b/src/gating/images/color-gertty.ans
@@ -0,0 +1,57 @@
1Change 31337
2
3Owner Carol
4
5Project hello-world
6
7Branch master
8
9
10
11Name Verified Code-Review
12
13Alice -1 
14
15Bob   -1 
16
17Zuul +1
18
19
20
21docs SUCCESS in 2m 37s
22
23python27 SUCCESS in 13m 21s
24
25
26
27Patch Set 1 4f0a5acfb3752dd1d2fb9153e0f3277c9bcc35ad 
28
29README.txt +2,-0
30
31src/hello.py +28,-4
32
33
34
35< Review > < Diff > < Local Checkout > < Local Cherry-Pick >
36
37
38
39Alice
40
41 This change seems gratuitous. I like it!
42
43Bob
44
45 This is a really good start but i have serious concerns about the
46
47 whitespace choices you have made.
48
49
50
51
52
53
54
55
56
57 \ No newline at end of file
diff --git a/src/gating/images/convert.sh b/src/gating/images/convert.sh
new file mode 100755
index 0000000..9acce64
--- /dev/null
+++ b/src/gating/images/convert.sh
@@ -0,0 +1,4 @@
1#!/bin/sh -x
2
3cd orig
4find . -type f -name \*.ans -exec python ../../cp437utf8.py {} ../{} \;
diff --git a/src/gating/images/crd.ans b/src/gating/images/crd.ans
new file mode 100644
index 0000000..4b4436d
--- /dev/null
+++ b/src/gating/images/crd.ans
@@ -0,0 +1,29 @@
1* nova 1001,12 Add SSH host keys to intance metadata
2
3 Change-ID: I0ac10
4
5* devstack 1020,6 Configure nova to return host keys
6
7 Change-ID: I0bc10
8
9 Depends-On: I0ac10
10
11* novaclient 1030,3 Add test that host keys are returned
12
13 Change-ID: I0dc10
14
15 Depends-On: I0bc10
16
17* shade 1040,1 Return host keys on instance creation
18
19 Change-ID: I0ec10
20
21 Depends-On: I0dc10
22
23* nodepool 1050,5 Verify host keys when booting nodes
24
25 Change-ID: I0fc10
26
27 Depends-On: I0ec10
28
29 \ No newline at end of file
diff --git a/src/gating/images/cursor.ans b/src/gating/images/cursor.ans
new file mode 100644
index 0000000..6d4d108
--- /dev/null
+++ b/src/gating/images/cursor.ans
@@ -0,0 +1,47 @@
1█
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 █
46
47 \ No newline at end of file
diff --git a/src/gating/images/cursor2.ans b/src/gating/images/cursor2.ans
new file mode 100644
index 0000000..a9fe285
--- /dev/null
+++ b/src/gating/images/cursor2.ans
@@ -0,0 +1,47 @@
1█
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 █
46
47 \ No newline at end of file
diff --git a/src/gating/images/openstack.ans b/src/gating/images/openstack.ans
new file mode 100644
index 0000000..e7a66f4
--- /dev/null
+++ b/src/gating/images/openstack.ans
@@ -0,0 +1,51 @@
1  ▄▄▄▄▄▄▄▄▄▄▄ 
2
3 ▄▄▄▄▄▄▄▄▄▄▄▄█████████████████████████▄▄
4
5 █████████████████████████████████████████▄
6
7▐█████████████████▄▄▄▄▄▄▄▄▄▄▄▄▄██████████▄█▌
8
9▐██████▄███████████████████████████████████▌
10
11▐█████▐████████████████████████████████████▌
12
13▐██████████████████████████████████████████▌
14
15 ▀███████████▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█..██▐███████▌
16
17 ▄▄..████████▌  ▐ ..█▀▀▀████▌
18
19▐███..▀▀▀▀▀██▌ ▐██ █▄▄▄████▌
20
21▐█████▄▄▄▄▄██▌ ▐████▐███████▌
22
23▐████████████▌ ▐████▐███████▌
24
25▐████████████▌ ▐████▐███████▌
26
27▐████████████▌ ▐████▐███████▌
28
29 ▀███████████▌ ▐.. █▐███████▌
30
31 ▄▄██████████▌  ▄▄▄▄▄████.. ▀▀▀████▌
32
33▐██..█████▀▀▀███████████████████████▄▄▄████▌
34
35▐███..████▄▄▄██████████████████████████████▌
36
37▐████████████▄██████████████▄▄▄▄▄██████████▌
38
39 █████████████████████████████████████████▀▌
40
41 ▐██████████████████████████████████████▀▀▀ 
42
43 ▐████████████████████████████▀▀▀▀▀▀▀▀▀ 
44
45 ▀█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 
46
47
48
49
50
51 \ No newline at end of file
diff --git a/src/gating/images/orig/ansible.ans b/src/gating/images/orig/ansible.ans
new file mode 100644
index 0000000..8605d51
--- /dev/null
+++ b/src/gating/images/orig/ansible.ans
@@ -0,0 +1,49 @@
1
2
3 
4
5 
6
7 
8
9 
10
11 
12
13  
14
15  
16
17  
18
19  
20
21  
22
23  
24
25  
26
27  
28
29  
30
31   
32
33   
34
35  
36
37 
38
39 
40
41 
42
43 
44
45 
46
47
48
49 \ No newline at end of file
diff --git a/src/gating/images/orig/architecture.ans b/src/gating/images/orig/architecture.ans
new file mode 100644
index 0000000..94b0720
--- /dev/null
+++ b/src/gating/images/orig/architecture.ans
@@ -0,0 +1,45 @@
1
2
3
4
5
6
7 Ŀ
8
9 Ĵ Zuul Merger 
10
11  
12
13  
14
15  
16
17  Ŀ Ŀ Ŀ
18
19 Ĵ Gerrit Ĵ Zuul Ĵ Zuul Launcher 
20
21 ____    Ŀ 
22
23 |... |    Ansible 
24
25 |... |  
26
27/______\ Ŀ 
28
29 o  Nodepool  
30
31 -|-    
32
33 / \  
34
35 Dev Cloud  
36
37  Node 1 Ĵ
38
39  ...  
40
41  Node 2 
42
43(Not to scale)  
44
45 \ No newline at end of file
diff --git a/src/gating/images/orig/circle.ans b/src/gating/images/orig/circle.ans
new file mode 100644
index 0000000..d21b2bb
--- /dev/null
+++ b/src/gating/images/orig/circle.ans
@@ -0,0 +1,49 @@
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 \ No newline at end of file
diff --git a/src/gating/images/orig/color-gertty.ans b/src/gating/images/orig/color-gertty.ans
new file mode 100644
index 0000000..7530e70
--- /dev/null
+++ b/src/gating/images/orig/color-gertty.ans
@@ -0,0 +1,57 @@
1Change 31337
2
3Owner Carol
4
5Project hello-world
6
7Branch master
8
9
10
11Name Verified Code-Review
12
13Alice -1 
14
15Bob   -1 
16
17Zuul +1
18
19
20
21docs SUCCESS in 2m 37s
22
23python27 SUCCESS in 13m 21s
24
25
26
27Patch Set 1 4f0a5acfb3752dd1d2fb9153e0f3277c9bcc35ad 
28
29README.txt +2,-0
30
31src/hello.py +28,-4
32
33
34
35< Review > < Diff > < Local Checkout > < Local Cherry-Pick >
36
37
38
39Alice
40
41 This change seems gratuitous. I like it!
42
43Bob
44
45 This is a really good start but i have serious concerns about the
46
47 whitespace choices you have made.
48
49
50
51
52
53
54
55
56
57 \ No newline at end of file
diff --git a/src/gating/images/orig/crd.ans b/src/gating/images/orig/crd.ans
new file mode 100644
index 0000000..4b4436d
--- /dev/null
+++ b/src/gating/images/orig/crd.ans
@@ -0,0 +1,29 @@
1* nova 1001,12 Add SSH host keys to intance metadata
2
3 Change-ID: I0ac10
4
5* devstack 1020,6 Configure nova to return host keys
6
7 Change-ID: I0bc10
8
9 Depends-On: I0ac10
10
11* novaclient 1030,3 Add test that host keys are returned
12
13 Change-ID: I0dc10
14
15 Depends-On: I0bc10
16
17* shade 1040,1 Return host keys on instance creation
18
19 Change-ID: I0ec10
20
21 Depends-On: I0dc10
22
23* nodepool 1050,5 Verify host keys when booting nodes
24
25 Change-ID: I0fc10
26
27 Depends-On: I0ec10
28
29 \ No newline at end of file
diff --git a/src/gating/images/orig/cursor.ans b/src/gating/images/orig/cursor.ans
new file mode 100644
index 0000000..d9f6da9
--- /dev/null
+++ b/src/gating/images/orig/cursor.ans
@@ -0,0 +1,47 @@
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 
46
47 \ No newline at end of file
diff --git a/src/gating/images/orig/cursor2.ans b/src/gating/images/orig/cursor2.ans
new file mode 100644
index 0000000..93d8570
--- /dev/null
+++ b/src/gating/images/orig/cursor2.ans
@@ -0,0 +1,47 @@
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 
46
47 \ No newline at end of file
diff --git a/src/gating/images/orig/openstack.ans b/src/gating/images/orig/openstack.ans
new file mode 100644
index 0000000..4f689c7
--- /dev/null
+++ b/src/gating/images/orig/openstack.ans
@@ -0,0 +1,51 @@
1  
2
3 
4
5 
6
7
8
9
10
11
12
13
14
15 ..
16
17 ..   ..
18
19..  
20
21 
22
23 
24
25 
26
27 
28
29  .. 
30
31   .. 
32
33..
34
35..
36
37
38
39 
40
41  
42
43  
44
45  
46
47
48
49
50
51 \ No newline at end of file
diff --git a/src/gating/images/orig/questions.ans b/src/gating/images/orig/questions.ans
new file mode 100644
index 0000000..ae2e90a
--- /dev/null
+++ b/src/gating/images/orig/questions.ans
@@ -0,0 +1,27 @@
1
2
3
4
5
6
7
8
9 
10
11    
12
13   
14
15     
16
17    
18
19  
20
21   
22
23  
24
25 
26
27 \ No newline at end of file
diff --git a/src/gating/images/orig/redhat.ans b/src/gating/images/orig/redhat.ans
new file mode 100644
index 0000000..f297fd0
--- /dev/null
+++ b/src/gating/images/orig/redhat.ans
@@ -0,0 +1,49 @@
1
2
3  
4
5   
6
7   
8
9   
10
11     
12
13      
14
15     
16
17      
18
19  
20
21 
22
23     
24
25     
26
27 
28
29 
30
31 
32
33 
34
35  
36
37   
38
39 
40
41 
42
43 
44
45
46
47
48
49 \ No newline at end of file
diff --git a/src/gating/images/orig/startup1.ans b/src/gating/images/orig/startup1.ans
new file mode 100644
index 0000000..3510a93
--- /dev/null
+++ b/src/gating/images/orig/startup1.ans
@@ -0,0 +1,39 @@
1 Ŀ
2
3 Zuul
4
5
6
7
8
9 Ŀ
10
11
12
13Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ
14
15zm1 zm2 zm3 zm4 zm5 zm6 zm7 zm8
16
17
18
19nova keyst swift devst tmpst glanc dg projc
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37  
38
39 \ No newline at end of file
diff --git a/src/gating/images/orig/startup2.ans b/src/gating/images/orig/startup2.ans
new file mode 100644
index 0000000..3093800
--- /dev/null
+++ b/src/gating/images/orig/startup2.ans
@@ -0,0 +1,39 @@
1 Ŀ
2
3 Zuul
4
5
6
7
8
9 Ŀ
10
11
12
13Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ
14
15zm1 zm2 zm3 zm4 zm5 zm6 zm7 zm8
16
17
18
19nova keyst swift devst tmpst glanc dg projc
20
21mastr newt mitak mastr mastr diabl mastr mastr
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37  
38
39 \ No newline at end of file
diff --git a/src/gating/images/orig/td.ans b/src/gating/images/orig/td.ans
new file mode 100644
index 0000000..c0c5cd6
--- /dev/null
+++ b/src/gating/images/orig/td.ans
Binary files differ
diff --git a/src/gating/images/orig/testslide.ans b/src/gating/images/orig/testslide.ans
new file mode 100644
index 0000000..5505907
--- /dev/null
+++ b/src/gating/images/orig/testslide.ans
@@ -0,0 +1,49 @@
1ͻ
2
3 Ŀ 
4
5   
6
7   
8
9   Test Slide  Test Slide   
10
11   Test Slide  Test Slide   
12
13   Test Slide  Test Slide   
14
15   Test Slide  Test Slide   
16
17   Test Slide  Test Slide   
18
19   Test Slide  Test Slide   
20
21   Test Slide  Test Slide   
22
23  Test Slide  Test Slide   
24
25   Test Slide  Test Slide   
26
27   Test Slide  Test Slide   
28
29   Test Slide  Test Slide   
30
31   Test Slide  Test Slide   
32
33   Test Slide  Test Slide   
34
35   Test Slide  Test Slide   
36
37   Test Slide  Test Slide   
38
39   Test Slide  Test Slide   
40
41   
42
43   
44
45 
46
47ͼ
48
49 \ No newline at end of file
diff --git a/src/gating/images/orig/title.ans b/src/gating/images/orig/title.ans
new file mode 100644
index 0000000..82ef305
--- /dev/null
+++ b/src/gating/images/orig/title.ans
@@ -0,0 +1,45 @@
1 ______________ .. .. ______________
2
3( (  \ \_____)____(_____/ /  ) )
4
5 \ ) `'   `' ( /
6
7 )/   \(
8
9 /'  REST APIs and the Return of the  `\ 
10
11O   ___ ___ _ _ ___ ___ _ ___   O
12
13  / __/ _ \| \| / __|/ _ \| | | __| 
14
15 | (_| (_) | .` \__ \ (_) | |__| _|  
16
17  \___\___/|_|\_|___/\___/|____|___| 
18
19 
20
21 Application 
22
23 
24
25O  James E. Blair <corvus@inaugust.com>  O
26
27 \. ./ 
28
29 )\  ,____ ____,  /(
30
31 / ) / ____\ ____ /____ \ ( \
32
33( (_________/_/ ) ( \_\_________) )
34
35 ~-'  `' `'  `-~ 
36
37
38
39
40
41
42
43
44
45 \ No newline at end of file
diff --git a/src/gating/images/orig/workflow.ans b/src/gating/images/orig/workflow.ans
new file mode 100644
index 0000000..067cc56
--- /dev/null
+++ b/src/gating/images/orig/workflow.ans
@@ -0,0 +1,29 @@
1 Hack Review Test
2
3 ========= ========== ==========
4
5
6
7 push approve
8
9 +-------------+ +-------------+
10
11 | | | |
12
13 +------+--+ +--v----+--+ +--v-------+
14
15 | | | | | |
16
17 | $EDITOR | | Gerrit | | Zuul |
18
19 | | | | | |
20
21 +------^--+ +--+----^--+ +--+-------+
22
23 | | | |
24
25 +-------------+ +-------------+
26
27 clone merge
28
29 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-00.ans b/src/gating/images/orig/zsim-00.ans
new file mode 100644
index 0000000..4f9ed82
--- /dev/null
+++ b/src/gating/images/orig/zsim-00.ans
@@ -0,0 +1,43 @@
100 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-01.ans b/src/gating/images/orig/zsim-01.ans
new file mode 100644
index 0000000..a087092
--- /dev/null
+++ b/src/gating/images/orig/zsim-01.ans
@@ -0,0 +1,43 @@
101 Zuul Git
2
3 Ŀ
4
5  Nova #1 Nova Keystone
6
7 badbeef beefcab
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-02.ans b/src/gating/images/orig/zsim-02.ans
new file mode 100644
index 0000000..8f2938c
--- /dev/null
+++ b/src/gating/images/orig/zsim-02.ans
@@ -0,0 +1,43 @@
102 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-03.ans b/src/gating/images/orig/zsim-03.ans
new file mode 100644
index 0000000..1186441
--- /dev/null
+++ b/src/gating/images/orig/zsim-03.ans
@@ -0,0 +1,43 @@
103 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-04.ans b/src/gating/images/orig/zsim-04.ans
new file mode 100644
index 0000000..8344a58
--- /dev/null
+++ b/src/gating/images/orig/zsim-04.ans
@@ -0,0 +1,43 @@
104 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 
16
17 
18
19 
20
21 
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-05.ans b/src/gating/images/orig/zsim-05.ans
new file mode 100644
index 0000000..948d831
--- /dev/null
+++ b/src/gating/images/orig/zsim-05.ans
@@ -0,0 +1,43 @@
105 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 
16
17 
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-06.ans b/src/gating/images/orig/zsim-06.ans
new file mode 100644
index 0000000..be6cf1b
--- /dev/null
+++ b/src/gating/images/orig/zsim-06.ans
@@ -0,0 +1,43 @@
106 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 
16
17 
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-07.ans b/src/gating/images/orig/zsim-07.ans
new file mode 100644
index 0000000..e827b4f
--- /dev/null
+++ b/src/gating/images/orig/zsim-07.ans
@@ -0,0 +1,43 @@
107 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 
16
17 
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-08.ans b/src/gating/images/orig/zsim-08.ans
new file mode 100644
index 0000000..e7d5ca5
--- /dev/null
+++ b/src/gating/images/orig/zsim-08.ans
@@ -0,0 +1,43 @@
108 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 
16
17 
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-09.ans b/src/gating/images/orig/zsim-09.ans
new file mode 100644
index 0000000..c5a6f3a
--- /dev/null
+++ b/src/gating/images/orig/zsim-09.ans
@@ -0,0 +1,43 @@
109 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-10.ans b/src/gating/images/orig/zsim-10.ans
new file mode 100644
index 0000000..85e80a2
--- /dev/null
+++ b/src/gating/images/orig/zsim-10.ans
@@ -0,0 +1,43 @@
110 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 
10
11 
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 CANCELED
26
27 CANCELED
28
29 CANCELED
30
31 CANCELED
32
33 Ŀ
34
35  Nova #4 CANCELED
36
37 CANCELED
38
39 CANCELED
40
41 CANCELED .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-11.ans b/src/gating/images/orig/zsim-11.ans
new file mode 100644
index 0000000..0a7b7e2
--- /dev/null
+++ b/src/gating/images/orig/zsim-11.ans
@@ -0,0 +1,43 @@
111 Zuul Git
2
3 Ŀ
4
5  Nova #1  Nova Keystone
6
7  badbeef beefcab
8
9 Ŀ 
10
11 
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 SUCCESS
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3
26
27
28
29
30
31
32
33 Ŀ
34
35  Nova #4
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-12.ans b/src/gating/images/orig/zsim-12.ans
new file mode 100644
index 0000000..072d29b
--- /dev/null
+++ b/src/gating/images/orig/zsim-12.ans
@@ -0,0 +1,43 @@
112 Zuul Git
2
3 Ŀ
4
5  Nova #1 SUCCESS Nova Keystone
6
7 SUCCESS badbeef beefcab
8
9 Ŀ 
10
11 
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 SUCCESS
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-13.ans b/src/gating/images/orig/zsim-13.ans
new file mode 100644
index 0000000..cf656e3
--- /dev/null
+++ b/src/gating/images/orig/zsim-13.ans
@@ -0,0 +1,43 @@
113 Zuul Git
2
3 Ŀ
4
5  Nova #1 SUCCESS Nova Keystone
6
7 SUCCESS badbeef beefcab
8
9 Ŀ 
10
11 SUCCESS
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 SUCCESS
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-14.ans b/src/gating/images/orig/zsim-14.ans
new file mode 100644
index 0000000..0151210
--- /dev/null
+++ b/src/gating/images/orig/zsim-14.ans
@@ -0,0 +1,43 @@
114 Zuul Git
2
3 Ŀ
4
5  Nova #1 SUCCESS Nova Keystone
6
7 SUCCESS badbeef beefcab
8
9 Ŀ SUCCESS
10
11 SUCCESS
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 SUCCESS
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-15.ans b/src/gating/images/orig/zsim-15.ans
new file mode 100644
index 0000000..eb63977
--- /dev/null
+++ b/src/gating/images/orig/zsim-15.ans
@@ -0,0 +1,43 @@
115 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 SUCCESS
18
19 
20
21 
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-16.ans b/src/gating/images/orig/zsim-16.ans
new file mode 100644
index 0000000..d007060
--- /dev/null
+++ b/src/gating/images/orig/zsim-16.ans
@@ -0,0 +1,43 @@
116 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11
12
13 Ŀ
14
15  Keystone #2 FAILURE
16
17 SUCCESS
18
19 SUCCESS
20
21 SUCCESS
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-17.ans b/src/gating/images/orig/zsim-17.ans
new file mode 100644
index 0000000..14c9258
--- /dev/null
+++ b/src/gating/images/orig/zsim-17.ans
@@ -0,0 +1,43 @@
117 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Ŀ
24
25  Nova #3 
26
27 
28
29 
30
31 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-18.ans b/src/gating/images/orig/zsim-18.ans
new file mode 100644
index 0000000..ed780ea
--- /dev/null
+++ b/src/gating/images/orig/zsim-18.ans
@@ -0,0 +1,43 @@
118 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Ŀ
24
25  Nova #3  SUCCESS 
26
27  SUCCESS 
28
29  SUCCESS 
30
31  SUCCESS 
32
33 Ŀ
34
35  Nova #4 
36
37 
38
39 
40
41  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-19.ans b/src/gating/images/orig/zsim-19.ans
new file mode 100644
index 0000000..c82b91c
--- /dev/null
+++ b/src/gating/images/orig/zsim-19.ans
@@ -0,0 +1,43 @@
119 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11 #3
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Ŀ
34
35  Nova #4  SUCCESS 
36
37  SUCCESS 
38
39 
40
41  SUCCESS  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-20.ans b/src/gating/images/orig/zsim-20.ans
new file mode 100644
index 0000000..4d75d8b
--- /dev/null
+++ b/src/gating/images/orig/zsim-20.ans
@@ -0,0 +1,43 @@
120 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11 #3
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Ŀ
34
35  Nova #4  SUCCESS 
36
37  SUCCESS 
38
39  SUCCESS 
40
41  SUCCESS  .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-21.ans b/src/gating/images/orig/zsim-21.ans
new file mode 100644
index 0000000..5847053
--- /dev/null
+++ b/src/gating/images/orig/zsim-21.ans
@@ -0,0 +1,43 @@
121 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef beefcab
8
9 #1
10
11 #3
12
13 #4
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-22.ans b/src/gating/images/orig/zsim-22.ans
new file mode 100644
index 0000000..3ad7700
--- /dev/null
+++ b/src/gating/images/orig/zsim-22.ans
@@ -0,0 +1,43 @@
122 Zuul Git
2
3
4
5 Nova Keystone
6
7 badbeef :(
8
9 #1
10
11 #3
12
13 #4
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 .
42
43 \ No newline at end of file
diff --git a/src/gating/images/orig/zsim-keyline.ans b/src/gating/images/orig/zsim-keyline.ans
new file mode 100644
index 0000000..a2c3fb5
--- /dev/null
+++ b/src/gating/images/orig/zsim-keyline.ans
@@ -0,0 +1,45 @@
1 Zuul Git
2
3
4
5 [X] Nova #1 SUCCESS Nova Keystone
6
7 | SUCCESS * HEAD * HEAD
8
9 |--+ OOOOOOOOO..
10
11 | | SUCCESS
12
13 | |
14
15 | [X] Keystone #2 FAILURE
16
17 | SUCCESS
18
19 | OOOOOOO....
20
21 | OOOOOOOOO..
22
23 |
24
25 [X] Nova #3 OOOOOOO....
26
27 | OOOOOOO....
28
29 | OOOOO......
30
31 | OOOOOO.....
32
33 |
34
35 [X] Nova #4 OOOO.......
36
37 OOOO.......
38
39 OO.........
40
41 OOO........
42
43
44
45 \ No newline at end of file
diff --git a/src/gating/images/orig/zuul-status.ans b/src/gating/images/orig/zuul-status.ans
new file mode 100644
index 0000000..d21c0ca
--- /dev/null
+++ b/src/gating/images/orig/zuul-status.ans
@@ -0,0 +1,49 @@
1 
2
3  Check   Gate  Post 
4
5[ ]+-----------------+ [ ]+-----------------+ [ ]+-----------------+
6
7   |nova 45:20 | | |nova 45:20 |   |nova 45:20 |
8
9   |321465 13:37 | | |321465 13:37 |   |321465 13:37 |
10
11 +-----------------+ | +-----------------+ +-----------------+
12
13 | pep8 SUCCESS| | | pep8 SUCCESS| | pep8 SUCCESS|
14
15 | docs  xx  | | | docs  xx  | | docs  xx  |
16
17 | python27 x  | | | python27 x  | | python27 x  |
18
19 | tempest x  | | | tempest x  | | tempest x  |
20
21 +-----------------+ | +-----------------+ +-----------------+
22
23 |  Release  
24
25[ ]+-----------------+  +[ ]+---------------+ 
26
27   |nova 45:20 |  |   |nova 45:20 | 
28
29   |321465 13:37 |  |   |321465 13:37 | 
30
31 +-----------------+  | +---------------+ 
32
33 | pep8 FAILURE|  |   
34
35 | docs  xx  | [ ]+-----------------+  
36
37 | python27 x  |   |nova 45:20 |  
38
39 | tempest x  |   |321465 13:37 |  
40
41 +-----------------+   +-----------------+  
42
43   
44
45 
46
47 
48
49 \ No newline at end of file
diff --git a/src/gating/images/orig/zuul.ans b/src/gating/images/orig/zuul.ans
new file mode 100644
index 0000000..8442c58
--- /dev/null
+++ b/src/gating/images/orig/zuul.ans
@@ -0,0 +1,43 @@
1͵
2
3 Ĵ
4
5 
6
7
8
9
10
11
12
13  _____ _
14
15 |__ / _ _ _| |
16
17 / / | | | | | | |
18
19 / /| |_| | |_| | |
20
21 /____\__,_|\__,_|_|
22
23
24
25
26
27
28
29
30
31
32
33 
34
35 Ĵ
36
37͵
38
39
40
41
42
43 \ No newline at end of file
diff --git a/src/gating/images/questions.ans b/src/gating/images/questions.ans
new file mode 100644
index 0000000..450e9ac
--- /dev/null
+++ b/src/gating/images/questions.ans
@@ -0,0 +1,27 @@
1
2
3
4
5
6
7
8
9 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
10
11 █ ▄ ▄▄▄▄▄  ▄ █
12
13 █ ███▀▀██▄ █
14
15 █ ▀▀  ▄███ █
16
17 █  ███▀▀ █
18
19 █ ▀▀ █
20
21 █ ██▄ █
22
23 █ ▀ ▀▀▀ ▀ █
24
25 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
26
27 \ No newline at end of file
diff --git a/src/gating/images/redhat.ans b/src/gating/images/redhat.ans
new file mode 100644
index 0000000..ca7597e
--- /dev/null
+++ b/src/gating/images/redhat.ans
@@ -0,0 +1,49 @@
1
2
3  ▄████▄▄▄▄███▄▄▄▄
4
5  █▀██████████▄ █▄ 
6
7 ▐█▄ ▀▀ ▄██████████▄
8
9 ███ ▄███████████████ 
10
11  ▄▄███   ▀▀██████████████████▄
12
13  ██████▄    ▀▀███████████████▌
14
15  ▐███████▄   ▀██████████▀ ██▄▄
16
17 ▐█████████▄▄    █████████▄██████▌ 
18
19 ▀████████████▄▄ ███████████████▌
20
21 ▀▀████████████████████████████▀
22
23 ▐██▄   ▀▀█████████████████████▀ 
24
25  ▀███▄██▄  ▀▀▀▀████████▀▀▀▀ 
26
27 ▄▄██▄ █████▄ ▄▄ ▄▄ ▄▄▄ 
28
29 ████████▄▄▄███████▄▄███████████ 
30
31 █████████████████████▄▄▀▀▄███▌ ▄▄ 
32
33 ▀███████████████████████████ █████ 
34
35 ▀███████████████████████▀ ▄▄████▀  
36
37 ▀████████████████████▀ ▄█████▀   
38
39 ▀██████████████████████▀ 
40
41 ▀███████████████▀▀ 
42
43 ▀▀▀█████▀▀▀ 
44
45
46
47
48
49 \ No newline at end of file
diff --git a/src/gating/images/startup1.ans b/src/gating/images/startup1.ans
new file mode 100644
index 0000000..c657cdb
--- /dev/null
+++ b/src/gating/images/startup1.ans
@@ -0,0 +1,39 @@
1 ┌──────┐
2
3 │ Zuul │
4
5 └──┬───┘
6
7
8
9 ┌─────┬─────┬─────┬──┴──┬─────┬─────┬─────┐
10
11 │ │ │ │ │ │ │ │
12
13┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
14
15│zm1│ │zm2│ │zm3│ │zm4│ │zm5│ │zm6│ │zm7│ │zm8│
16
17└───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘
18
19nova keyst swift devst tmpst glanc dg projc
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37  
38
39 \ No newline at end of file
diff --git a/src/gating/images/startup2.ans b/src/gating/images/startup2.ans
new file mode 100644
index 0000000..65e44fb
--- /dev/null
+++ b/src/gating/images/startup2.ans
@@ -0,0 +1,39 @@
1 ┌──────┐
2
3 │ Zuul │
4
5 └──┬───┘
6
7
8
9 ┌─────┬─────┬─────┬──┴──┬─────┬─────┬─────┐
10
11 │ │ │ │ │ │ │ │
12
13┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
14
15│zm1│ │zm2│ │zm3│ │zm4│ │zm5│ │zm6│ │zm7│ │zm8│
16
17└───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘
18
19nova keyst swift devst tmpst glanc dg projc
20
21mastr newt mitak mastr mastr diabl mastr mastr
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37  
38
39 \ No newline at end of file
diff --git a/src/gating/images/td.ans b/src/gating/images/td.ans
new file mode 100644
index 0000000..dcbf243
--- /dev/null
+++ b/src/gating/images/td.ans
Binary files differ
diff --git a/src/gating/images/testslide.ans b/src/gating/images/testslide.ans
new file mode 100644
index 0000000..f2feea4
--- /dev/null
+++ b/src/gating/images/testslide.ans
@@ -0,0 +1,49 @@
1╔══════════════════════════════════════════════════════════════════╗
2
3║ ┌──────────────────────────────────────────────────────────────┐ ║
4
5║ │ │ ║
6
7║ │ │ ║
8
9║ │  Test Slide  Test Slide  │ ║
10
11║ │  Test Slide  Test Slide  │ ║
12
13║ │  Test Slide  Test Slide  │ ║
14
15║ │  Test Slide  Test Slide  │ ║
16
17║ │  Test Slide  Test Slide  │ ║
18
19║ │  Test Slide  Test Slide  │ ║
20
21║ │  Test Slide  Test Slide  │ ║
22
23║ │ Test Slide  Test Slide  │ ║
24
25║ │  Test Slide  Test Slide  │ ║
26
27║ │  Test Slide  Test Slide  │ ║
28
29║ │  Test Slide  Test Slide  │ ║
30
31║ │  Test Slide  Test Slide  │ ║
32
33║ │  Test Slide  Test Slide  │ ║
34
35║ │  Test Slide  Test Slide  │ ║
36
37║ │  Test Slide  Test Slide  │ ║
38
39║ │  Test Slide  Test Slide  │ ║
40
41║ │ │ ║
42
43║ │ │ ║
44
45║ └──────────────────────────────────────────────────────────────┘ ║
46
47╚══════════════════════════════════════════════════════════════════╝
48
49 \ No newline at end of file
diff --git a/src/gating/images/title.ans b/src/gating/images/title.ans
new file mode 100644
index 0000000..c784327
--- /dev/null
+++ b/src/gating/images/title.ans
@@ -0,0 +1,45 @@
1 ______________ .──. .──. ______________
2
3( (  \ \_____)____(_____/ /  ) )
4
5 \ ) `─────'   `─────' ( /
6
7 )/   \(
8
9 /'  REST APIs and the Return of the  `\