summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/zuulv3/cp437utf8.py69
-rw-r--r--src/zuulv3/images/01-gerrit.pngbin0 -> 126754 bytes
-rw-r--r--src/zuulv3/images/02-status1.pngbin0 -> 169213 bytes
-rw-r--r--src/zuulv3/images/03-status2.pngbin0 -> 58075 bytes
-rw-r--r--src/zuulv3/images/04-health.pngbin0 -> 40296 bytes
-rw-r--r--src/zuulv3/images/ansible.ans49
-rw-r--r--src/zuulv3/images/architecture.ans45
-rw-r--r--src/zuulv3/images/circle.ans49
-rw-r--r--src/zuulv3/images/color-gertty.ans57
-rwxr-xr-xsrc/zuulv3/images/convert.sh4
-rw-r--r--src/zuulv3/images/crd.ans29
-rw-r--r--src/zuulv3/images/cursor.ans47
-rw-r--r--src/zuulv3/images/cursor2.ans47
-rw-r--r--src/zuulv3/images/openstack.ans51
-rw-r--r--src/zuulv3/images/orig/ansible.ans49
-rw-r--r--src/zuulv3/images/orig/architecture.ans45
-rw-r--r--src/zuulv3/images/orig/circle.ans49
-rw-r--r--src/zuulv3/images/orig/color-gertty.ans57
-rw-r--r--src/zuulv3/images/orig/crd.ans29
-rw-r--r--src/zuulv3/images/orig/cursor.ans47
-rw-r--r--src/zuulv3/images/orig/cursor2.ans47
-rw-r--r--src/zuulv3/images/orig/openstack.ans51
-rw-r--r--src/zuulv3/images/orig/questions.ans27
-rw-r--r--src/zuulv3/images/orig/redhat.ans49
-rw-r--r--src/zuulv3/images/orig/startup1.ans39
-rw-r--r--src/zuulv3/images/orig/startup2.ans39
-rw-r--r--src/zuulv3/images/orig/td.ansbin0 -> 2433 bytes
-rw-r--r--src/zuulv3/images/orig/testslide.ans49
-rw-r--r--src/zuulv3/images/orig/title.ans45
-rw-r--r--src/zuulv3/images/orig/workflow.ans29
-rw-r--r--src/zuulv3/images/orig/zsim-00.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-01.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-02.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-03.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-04.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-05.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-06.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-07.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-08.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-09.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-10.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-11.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-12.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-13.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-14.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-15.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-16.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-17.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-18.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-19.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-20.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-21.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-22.ans43
-rw-r--r--src/zuulv3/images/orig/zsim-keyline.ans45
-rw-r--r--src/zuulv3/images/orig/zuul-status.ans49
-rw-r--r--src/zuulv3/images/orig/zuul.ans43
-rw-r--r--src/zuulv3/images/questions.ans27
-rw-r--r--src/zuulv3/images/redhat.ans49
-rw-r--r--src/zuulv3/images/startup1.ans39
-rw-r--r--src/zuulv3/images/startup2.ans39
-rw-r--r--src/zuulv3/images/td.ansbin0 -> 2737 bytes
-rw-r--r--src/zuulv3/images/testslide.ans49
-rw-r--r--src/zuulv3/images/title.ans45
-rw-r--r--src/zuulv3/images/workflow.ans29
-rw-r--r--src/zuulv3/images/zsim-00.ans43
-rw-r--r--src/zuulv3/images/zsim-01.ans43
-rw-r--r--src/zuulv3/images/zsim-02.ans43
-rw-r--r--src/zuulv3/images/zsim-03.ans43
-rw-r--r--src/zuulv3/images/zsim-04.ans43
-rw-r--r--src/zuulv3/images/zsim-05.ans43
-rw-r--r--src/zuulv3/images/zsim-06.ans43
-rw-r--r--src/zuulv3/images/zsim-07.ans43
-rw-r--r--src/zuulv3/images/zsim-08.ans43
-rw-r--r--src/zuulv3/images/zsim-09.ans43
-rw-r--r--src/zuulv3/images/zsim-10.ans43
-rw-r--r--src/zuulv3/images/zsim-11.ans43
-rw-r--r--src/zuulv3/images/zsim-12.ans43
-rw-r--r--src/zuulv3/images/zsim-13.ans43
-rw-r--r--src/zuulv3/images/zsim-14.ans43
-rw-r--r--src/zuulv3/images/zsim-15.ans43
-rw-r--r--src/zuulv3/images/zsim-16.ans43
-rw-r--r--src/zuulv3/images/zsim-17.ans43
-rw-r--r--src/zuulv3/images/zsim-18.ans43
-rw-r--r--src/zuulv3/images/zsim-19.ans43
-rw-r--r--src/zuulv3/images/zsim-20.ans43
-rw-r--r--src/zuulv3/images/zsim-21.ans43
-rw-r--r--src/zuulv3/images/zsim-22.ans43
-rw-r--r--src/zuulv3/images/zsim-keyline.ans45
-rw-r--r--src/zuulv3/images/zuul-status.ans49
-rw-r--r--src/zuulv3/images/zuul.ans43
-rwxr-xr-xsrc/zuulv3/start.sh8
-rw-r--r--src/zuulv3/zuul.rst1326
92 files changed, 4961 insertions, 0 deletions
diff --git a/src/zuulv3/cp437utf8.py b/src/zuulv3/cp437utf8.py
new file mode 100644
index 0000000..9b1b629
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/01-gerrit.png b/src/zuulv3/images/01-gerrit.png
new file mode 100644
index 0000000..2c8a2c4
--- /dev/null
+++ b/src/zuulv3/images/01-gerrit.png
Binary files differ
diff --git a/src/zuulv3/images/02-status1.png b/src/zuulv3/images/02-status1.png
new file mode 100644
index 0000000..7b350a8
--- /dev/null
+++ b/src/zuulv3/images/02-status1.png
Binary files differ
diff --git a/src/zuulv3/images/03-status2.png b/src/zuulv3/images/03-status2.png
new file mode 100644
index 0000000..0b2607d
--- /dev/null
+++ b/src/zuulv3/images/03-status2.png
Binary files differ
diff --git a/src/zuulv3/images/04-health.png b/src/zuulv3/images/04-health.png
new file mode 100644
index 0000000..750d32c
--- /dev/null
+++ b/src/zuulv3/images/04-health.png
Binary files differ
diff --git a/src/zuulv3/images/ansible.ans b/src/zuulv3/images/ansible.ans
new file mode 100644
index 0000000..0cadddf
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/architecture.ans b/src/zuulv3/images/architecture.ans
new file mode 100644
index 0000000..0698ccc
--- /dev/null
+++ b/src/zuulv3/images/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 Executor │
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/zuulv3/images/circle.ans b/src/zuulv3/images/circle.ans
new file mode 100644
index 0000000..291eb33
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/color-gertty.ans b/src/zuulv3/images/color-gertty.ans
new file mode 100644
index 0000000..7530e70
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/convert.sh b/src/zuulv3/images/convert.sh
new file mode 100755
index 0000000..9acce64
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/crd.ans b/src/zuulv3/images/crd.ans
new file mode 100644
index 0000000..4b4436d
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/cursor.ans b/src/zuulv3/images/cursor.ans
new file mode 100644
index 0000000..6d4d108
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/cursor2.ans b/src/zuulv3/images/cursor2.ans
new file mode 100644
index 0000000..a9fe285
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/openstack.ans b/src/zuulv3/images/openstack.ans
new file mode 100644
index 0000000..e7a66f4
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/ansible.ans b/src/zuulv3/images/orig/ansible.ans
new file mode 100644
index 0000000..8605d51
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/architecture.ans b/src/zuulv3/images/orig/architecture.ans
new file mode 100644
index 0000000..94b0720
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/circle.ans b/src/zuulv3/images/orig/circle.ans
new file mode 100644
index 0000000..d21b2bb
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/color-gertty.ans b/src/zuulv3/images/orig/color-gertty.ans
new file mode 100644
index 0000000..7530e70
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/crd.ans b/src/zuulv3/images/orig/crd.ans
new file mode 100644
index 0000000..4b4436d
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/cursor.ans b/src/zuulv3/images/orig/cursor.ans
new file mode 100644
index 0000000..d9f6da9
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/cursor2.ans b/src/zuulv3/images/orig/cursor2.ans
new file mode 100644
index 0000000..93d8570
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/openstack.ans b/src/zuulv3/images/orig/openstack.ans
new file mode 100644
index 0000000..4f689c7
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/questions.ans b/src/zuulv3/images/orig/questions.ans
new file mode 100644
index 0000000..ae2e90a
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/redhat.ans b/src/zuulv3/images/orig/redhat.ans
new file mode 100644
index 0000000..f297fd0
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/startup1.ans b/src/zuulv3/images/orig/startup1.ans
new file mode 100644
index 0000000..3510a93
--- /dev/null
+++ b/src/zuulv3/images/orig/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/zuulv3/images/orig/startup2.ans b/src/zuulv3/images/orig/startup2.ans
new file mode 100644
index 0000000..3093800
--- /dev/null
+++ b/src/zuulv3/images/orig/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/zuulv3/images/orig/td.ans b/src/zuulv3/images/orig/td.ans
new file mode 100644
index 0000000..c0c5cd6
--- /dev/null
+++ b/src/zuulv3/images/orig/td.ans
Binary files differ
diff --git a/src/zuulv3/images/orig/testslide.ans b/src/zuulv3/images/orig/testslide.ans
new file mode 100644
index 0000000..5505907
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/title.ans b/src/zuulv3/images/orig/title.ans
new file mode 100644
index 0000000..82ef305
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/workflow.ans b/src/zuulv3/images/orig/workflow.ans
new file mode 100644
index 0000000..067cc56
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-00.ans b/src/zuulv3/images/orig/zsim-00.ans
new file mode 100644
index 0000000..4f9ed82
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-01.ans b/src/zuulv3/images/orig/zsim-01.ans
new file mode 100644
index 0000000..a087092
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-02.ans b/src/zuulv3/images/orig/zsim-02.ans
new file mode 100644
index 0000000..8f2938c
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-03.ans b/src/zuulv3/images/orig/zsim-03.ans
new file mode 100644
index 0000000..1186441
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-04.ans b/src/zuulv3/images/orig/zsim-04.ans
new file mode 100644
index 0000000..8344a58
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-05.ans b/src/zuulv3/images/orig/zsim-05.ans
new file mode 100644
index 0000000..948d831
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-06.ans b/src/zuulv3/images/orig/zsim-06.ans
new file mode 100644
index 0000000..be6cf1b
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-07.ans b/src/zuulv3/images/orig/zsim-07.ans
new file mode 100644
index 0000000..e827b4f
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-08.ans b/src/zuulv3/images/orig/zsim-08.ans
new file mode 100644
index 0000000..e7d5ca5
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-09.ans b/src/zuulv3/images/orig/zsim-09.ans
new file mode 100644
index 0000000..c5a6f3a
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-10.ans b/src/zuulv3/images/orig/zsim-10.ans
new file mode 100644
index 0000000..85e80a2
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-11.ans b/src/zuulv3/images/orig/zsim-11.ans
new file mode 100644
index 0000000..0a7b7e2
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-12.ans b/src/zuulv3/images/orig/zsim-12.ans
new file mode 100644
index 0000000..072d29b
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-13.ans b/src/zuulv3/images/orig/zsim-13.ans
new file mode 100644
index 0000000..cf656e3
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-14.ans b/src/zuulv3/images/orig/zsim-14.ans
new file mode 100644
index 0000000..0151210
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-15.ans b/src/zuulv3/images/orig/zsim-15.ans
new file mode 100644
index 0000000..eb63977
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-16.ans b/src/zuulv3/images/orig/zsim-16.ans
new file mode 100644
index 0000000..d007060
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-17.ans b/src/zuulv3/images/orig/zsim-17.ans
new file mode 100644
index 0000000..14c9258
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-18.ans b/src/zuulv3/images/orig/zsim-18.ans
new file mode 100644
index 0000000..ed780ea
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-19.ans b/src/zuulv3/images/orig/zsim-19.ans
new file mode 100644
index 0000000..c82b91c
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-20.ans b/src/zuulv3/images/orig/zsim-20.ans
new file mode 100644
index 0000000..4d75d8b
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-21.ans b/src/zuulv3/images/orig/zsim-21.ans
new file mode 100644
index 0000000..5847053
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-22.ans b/src/zuulv3/images/orig/zsim-22.ans
new file mode 100644
index 0000000..3ad7700
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zsim-keyline.ans b/src/zuulv3/images/orig/zsim-keyline.ans
new file mode 100644
index 0000000..a2c3fb5
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zuul-status.ans b/src/zuulv3/images/orig/zuul-status.ans
new file mode 100644
index 0000000..d21c0ca
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/orig/zuul.ans b/src/zuulv3/images/orig/zuul.ans
new file mode 100644
index 0000000..8442c58
--- /dev/null
+++ b/src/zuulv3/images/orig/zuul.ans
@@ -0,0 +1,43 @@
1ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵³³³ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
2
3 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
4
5 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄijÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄijÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
34
35 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
36
37ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵³³³ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
38
39
40
41
42
43 \ No newline at end of file
diff --git a/src/zuulv3/images/questions.ans b/src/zuulv3/images/questions.ans
new file mode 100644
index 0000000..450e9ac
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/redhat.ans b/src/zuulv3/images/redhat.ans
new file mode 100644
index 0000000..ca7597e
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/startup1.ans b/src/zuulv3/images/startup1.ans
new file mode 100644
index 0000000..c657cdb
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/startup2.ans b/src/zuulv3/images/startup2.ans
new file mode 100644
index 0000000..65e44fb
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/td.ans b/src/zuulv3/images/td.ans
new file mode 100644
index 0000000..dcbf243
--- /dev/null
+++ b/src/zuulv3/images/td.ans
Binary files differ
diff --git a/src/zuulv3/images/testslide.ans b/src/zuulv3/images/testslide.ans
new file mode 100644
index 0000000..f2feea4
--- /dev/null
+++ b/src/zuulv3/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/zuulv3/images/title.ans b/src/zuulv3/images/title.ans
new file mode 100644
index 0000000..c784327
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/workflow.ans b/src/zuulv3/images/workflow.ans
new file mode 100644
index 0000000..067cc56
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-00.ans b/src/zuulv3/images/zsim-00.ans
new file mode 100644
index 0000000..bbfdc82
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-01.ans b/src/zuulv3/images/zsim-01.ans
new file mode 100644
index 0000000..742a968
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-02.ans b/src/zuulv3/images/zsim-02.ans
new file mode 100644
index 0000000..28809c2
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-03.ans b/src/zuulv3/images/zsim-03.ans
new file mode 100644
index 0000000..c6a2bfd
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-04.ans b/src/zuulv3/images/zsim-04.ans
new file mode 100644
index 0000000..8893ed8
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-05.ans b/src/zuulv3/images/zsim-05.ans
new file mode 100644
index 0000000..be3cd9e
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-06.ans b/src/zuulv3/images/zsim-06.ans
new file mode 100644
index 0000000..64de1d6
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-07.ans b/src/zuulv3/images/zsim-07.ans
new file mode 100644
index 0000000..6a34279
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-08.ans b/src/zuulv3/images/zsim-08.ans
new file mode 100644
index 0000000..318c67b
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-09.ans b/src/zuulv3/images/zsim-09.ans
new file mode 100644
index 0000000..441979f
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-10.ans b/src/zuulv3/images/zsim-10.ans
new file mode 100644
index 0000000..818789e
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-11.ans b/src/zuulv3/images/zsim-11.ans
new file mode 100644
index 0000000..ddb8bde
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-12.ans b/src/zuulv3/images/zsim-12.ans
new file mode 100644
index 0000000..69eef26
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-13.ans b/src/zuulv3/images/zsim-13.ans
new file mode 100644
index 0000000..5b8b54b
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-14.ans b/src/zuulv3/images/zsim-14.ans
new file mode 100644
index 0000000..f0ec335
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-15.ans b/src/zuulv3/images/zsim-15.ans
new file mode 100644
index 0000000..5ea15df
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-16.ans b/src/zuulv3/images/zsim-16.ans
new file mode 100644
index 0000000..0d18c1b
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-17.ans b/src/zuulv3/images/zsim-17.ans
new file mode 100644
index 0000000..b301dc8
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-18.ans b/src/zuulv3/images/zsim-18.ans
new file mode 100644
index 0000000..da25c2e
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-19.ans b/src/zuulv3/images/zsim-19.ans
new file mode 100644
index 0000000..14b9e51
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-20.ans b/src/zuulv3/images/zsim-20.ans
new file mode 100644
index 0000000..e1a3b8c
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-21.ans b/src/zuulv3/images/zsim-21.ans
new file mode 100644
index 0000000..ccfeef2
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-22.ans b/src/zuulv3/images/zsim-22.ans
new file mode 100644
index 0000000..8be6db5
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zsim-keyline.ans b/src/zuulv3/images/zsim-keyline.ans
new file mode 100644
index 0000000..a2c3fb5
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zuul-status.ans b/src/zuulv3/images/zuul-status.ans
new file mode 100644
index 0000000..d21c0ca
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/images/zuul.ans b/src/zuulv3/images/zuul.ans
new file mode 100644
index 0000000..6369083
--- /dev/null
+++ b/src/zuulv3/images/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/zuulv3/start.sh b/src/zuulv3/start.sh
new file mode 100755
index 0000000..9eaf8b6
--- /dev/null
+++ b/src/zuulv3/start.sh
@@ -0,0 +1,8 @@
1#!/bin/sh
2
3mate-terminal --geometry 68x24 -x presentty $(pwd)/zuul.rst &
4#geeqie -t images &
5
6sleep 1
7
8mate-terminal --maximize -x presentty-console $(pwd)/zuul.rst &
diff --git a/src/zuulv3/zuul.rst b/src/zuulv3/zuul.rst
new file mode 100644
index 0000000..2070ad6
--- /dev/null
+++ b/src/zuulv3/zuul.rst
@@ -0,0 +1,1326 @@
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
17Preshow
18=======
19.. hidetitle::
20
21.. ansi:: images/cursor.ans images/cursor2.ans
22
23Zuul
24====
25.. hidetitle::
26.. ansi:: images/zuul.ans
27
28Red Hat
29=======
30
31.. hidetitle::
32.. container:: handout
33
34 * I work for Red Hat in the Office of Technology as the Chief Architect
35 for CI/CD
36
37.. ansi:: images/redhat.ans
38
39OpenStack
40=========
41.. container:: handout
42
43 * I work on OpenStack.
44 * I sit on the Technical Committee. I was on the Board of Directors
45
46.. hidetitle::
47.. ansi:: images/openstack.ans
48
49OpenStack Infra
50===============
51.. container:: handout
52
53 * My primary technical role with OpenStack is working on the OpenStack CI
54 system.
55
56::
57
58 "most insane CI infrastructure I've ever been a part of"
59
60 -- Alex Gaynor
61
62Zuul
63====
64.. container:: handout
65
66 * As part of working on OpenStack Infra I work on Zuul
67
68.. hidetitle::
69.. ansi:: images/zuul.ans
70
71
72Ansible
73=======
74
75.. container:: handout
76
77 * And as part of working on Zuul and on OpenStack I work on Ansible
78 * I maintain the OpenStack modules for Ansible as well as the shade library
79
80.. hidetitle::
81.. ansi:: images/ansible.ans
82
83Presentation Checklist
84======================
85
86.. container:: handout
87
88 * Every good presentation needs logos, so we're starting well
89
90::
91
92 [X] Logos
93
94
95Spoilers
96========
97
98* What the old version of Zuul (v2) was
99
100 * a nifty project gating system
101
102* What the new version of Zuul (v3) is
103
104 * multinode support
105 * live configuration changes
106 * better job definition
107 * sharable job definition
108 * testing like deployment
109
110What do I mean by Massive Scale?
111================================
112
113 * Contributors (~2k / 6 month period)
114 * Companies
115 * Changes
116 * Code Repositories (1827 as of this morning)
117 * Communities
118
119OpenStack Scale
120===============
121
122 * 2,000 git repositories
123 * 2KJPH (2,000 jobs per hour)
124 * Nodes 14 Regions off 5 OpenStack Public Clouds and 2 Private Clouds
125 (Thanks Rackspace, Internap, OVH, Vexxhost, CityCloud, HPE, Red Hat)
126 * 10,000 changes merged per month
127
128OpenStack Scale
129===============
130
131 * 2,000 git repositories
132 * 2KJPH (2,000 jobs per hour)
133 * Nodes 14 Regions off 5 OpenStack Public Clouds and 2 Private Clouds
134 (Thanks Rackspace, Internap, OVH, Vexxhost, CityCloud, HPE, Red Hat)
135 * 10,000 changes merged per month
136
137 * By comparison, our friends at the amazing project Ansible received
138 13,000 changes and had merged 8,000 of them in its first 4 years.
139
140Pretty Things to Look for Scale
141===============================
142
143 * http://grafana.openstack.org/dashboard/db/zuul-status
144 * http://grafana.openstack.org/dashboard/db/nodepool
145 * http://zuulv3.openstack.org/
146
147Dealing With Scale
148==================
149
150 * Egalitarian Process
151 * Balance Centralized vs Distributed
152 * Code Review plus Enforced Testing
153
154OpenStack Developer Workflow
155============================
156.. container:: handout
157
158::
159
160 Hack Review Test
161 ========= ========== ==========
162
163 push approve
164 +-------------+ +-------------+
165 | | | |
166 +------+--+ +--v----+--+ +--v-------+
167 | | | | | |
168 | $EDITOR | | Gerrit | | Zuul |
169 | | | | | |
170 +------^--+ +--+----^--+ +--+-------+
171 | | | |
172 +-------------+ +-------------+
173 clone merge
174
175Gerrit
176======
177.. hidetitle::
178.. container:: handout
179
180 the primary interface for our developers is the code review system
181 gerrit. No matter how complex zuul becomes, this is still primary
182 focus we want the developers to have.
183
184 explain patch upload, zuul runs, test results displayed in gerrit
185 this is all the interface to zuul users need to see
186
187 but zuul is doing a lot of work behind the scenes, and if you look
188 closer, this is what you see
189
190.. ansi:: images/color-gertty.ans
191
192Github Developer Workflow
193=========================
194.. container:: handout
195
196::
197
198 Hack Review Test
199 ========= ========== ==========
200
201 push approve
202 +-------------+ +-------------+
203 | | | |
204 +------+--+ +--v----+--+ +--v-------+
205 | | | | | |
206 | $EDITOR | | Github | | Zuul |
207 | | | | | |
208 +------^--+ +--+----^--+ +--+-------+
209 | | | |
210 +-------------+ +-------------+
211 clone merge
212
213Zuul Architecture
214=================
215
216.. ansi:: images/architecture.ans
217
218Presentation Checklist
219======================
220
221::
222
223 [x] Logos
224 [x] Architecture diagram
225
226Nodepool
227========
228
229.. container:: handout
230
231 nodepool builds nodes for zuul
232 Remember that 2,000 jobs per hour number?
233 Each job gets a fresh VM - that's 2,000 VMs per hours
234 Treats our 20 regions across 9 clouds as one REALLY big cloud
235
236::
237
238 * A separate program that works very closely with *zuul*
239 * Builds images daily and uploads to clouds
240 * Creates and destroys (at least) a VM for every job
241
242Nodepool can use pre-existing images, BUT ...
243=============================================
244
245 * Clouds have 'helpful' differences between base images
246 * Cloud images have 'helpful' software pre-installed
247 * Distros have 'helpful' different user names
248 * Most clouds use DHCP for networking, but some don't
249 * We can add pre-cached content
250
251Gating
252======
253
254.. cowsay:: Every change proposed for a repository is tested before
255 it merges.
256
257Co-gating
258=========
259
260.. cowsay:: Changes to a set of repositories merge monotonically such
261 that each change is tested with the current state of all
262 other related repositories before it merges.
263
264Parallel Co-gating
265==================
266
267.. cowsay:: Changes are serialized such that each change is tested
268 with all of the changes ahead of it to satisfy the
269 gating requirement while being able to run tests for
270 multiple changes simultaneously.
271
272Presentation Checklist
273======================
274
275::
276
277 [x] Logos
278 [x] Architecture diagram
279 [x] Cows
280
281Zuul Simulation
282===============
283.. transition:: pan
284.. container:: handout
285
286 * That was a lot of words - let's walk through it one step at a time
287 * Here we have two git repos, called nova and keystone, and their
288 current HEAD state
289
290.. ansi:: images/zsim-00.ans
291
292Zuul Simulation
293===============
294.. transition:: cut
295.. container:: handout
296
297 * A change is approved for Nova
298
299.. ansi:: images/zsim-01.ans
300
301Zuul Simulation
302===============
303.. transition:: cut
304.. container:: handout
305
306 * Zuul starts running jobs for it
307 * The tests will test the current state of nova and keystone PLUS this nova
308 change
309
310.. ansi:: images/zsim-02.ans
311
312Zuul Simulation
313===============
314.. transition:: cut
315.. container:: handout
316
317 * A change is approved for Keystone
318
319.. ansi:: images/zsim-03.ans
320
321Zuul Simulation
322===============
323.. transition:: cut
324.. container:: handout
325
326 * The tests will test the current state of nova and keystone PLUS this nova
327 change
328
329.. ansi:: images/zsim-04.ans
330
331Zuul Simulation
332===============
333.. transition:: cut
334.. container:: handout
335
336 * todo
337
338.. ansi:: images/zsim-05.ans
339
340Zuul Simulation
341===============
342.. transition:: cut
343.. container:: handout
344
345 * todo
346
347.. ansi:: images/zsim-06.ans
348
349Zuul Simulation
350===============
351.. transition:: cut
352.. container:: handout
353
354 * todo
355
356.. ansi:: images/zsim-07.ans
357
358Zuul Simulation
359===============
360.. transition:: cut
361.. container:: handout
362
363 * todo
364
365.. ansi:: images/zsim-08.ans
366
367Zuul Simulation
368===============
369.. transition:: cut
370.. container:: handout
371
372 * todo
373
374.. ansi:: images/zsim-09.ans
375
376Zuul Simulation
377===============
378.. transition:: cut
379.. container:: handout
380
381 * todo
382
383.. ansi:: images/zsim-10.ans
384
385Zuul Simulation
386===============
387.. transition:: cut
388.. container:: handout
389
390 * todo
391
392.. ansi:: images/zsim-11.ans
393
394Zuul Simulation
395===============
396.. transition:: cut
397.. container:: handout
398
399 * todo
400
401.. ansi:: images/zsim-12.ans
402
403Zuul Simulation
404===============
405.. transition:: cut
406.. container:: handout
407
408 * todo
409
410.. ansi:: images/zsim-13.ans
411
412Zuul Simulation
413===============
414.. transition:: cut
415.. container:: handout
416
417 * todo
418
419.. ansi:: images/zsim-14.ans
420
421Zuul Simulation
422===============
423.. transition:: cut
424.. container:: handout
425
426 * todo
427
428.. ansi:: images/zsim-15.ans
429
430Zuul Simulation
431===============
432.. transition:: cut
433.. container:: handout
434
435 * todo
436
437.. ansi:: images/zsim-16.ans
438
439Zuul Simulation
440===============
441.. transition:: cut
442.. container:: handout
443
444 * todo
445
446.. ansi:: images/zsim-17.ans
447
448Zuul Simulation
449===============
450.. transition:: cut
451.. container:: handout
452
453 * todo
454
455.. ansi:: images/zsim-18.ans
456
457Zuul Simulation
458===============
459.. transition:: cut
460.. container:: handout
461
462 * todo
463
464.. ansi:: images/zsim-19.ans
465
466Zuul Simulation
467===============
468.. transition:: cut
469.. container:: handout
470
471 * todo
472
473.. ansi:: images/zsim-20.ans
474
475Zuul Simulation
476===============
477.. transition:: cut
478.. container:: handout
479
480 * todo
481
482.. ansi:: images/zsim-21.ans
483
484Zuul Simulation
485===============
486.. transition:: cut
487.. container:: handout
488
489 * todo
490
491.. ansi:: images/zsim-22.ans
492
493Cross-Project Problem
494=====================
495
496 * User reports bug in shade - auto_ip is not discovering their NAT properly
497 * Two fixes, one to detection algorithm, one to config override
498 * Config override requires adding support to os-client-config
499 * Once support is added to os-client-config, it can be consumed in shade
500 * How do we integration test this without releasing os-client-config?
501
502Cross-Project Dependencies
503==========================
504
505Testing or gating dependencies (including jobs) manually specified by
506developers
507
508.. container:: progressive
509
510 * shade https://review.openstack.org/#/c/513913/
511
512 Add unittest tips jobs
513
514 Change-ID: I5b411be5c5aa43535fa89a51d6099aadd7a8ea60
515 * os-client-config https://review.openstack.org/#/c/513915
516
517 Add shade-tox-tips jobs
518
519 Change-ID: Ie3e9a4deca1d74b94e810e87e130706fe15fe2c9
520
521 Depends-On: I5b411be5c5aa43535fa89a51d6099aadd7a8ea60
522 * os-client-config https://review.openstack.org/#/c/513751/
523
524 Added nat_source flag for networks
525
526 Change-ID: I3d8dd6d734a1013d2d4a43e11c3538c3a345820b
527
528 * shade https://review.openstack.org/#/c/513914
529
530 Add support for configured NAT source variable
531
532 Change-Id: I4b50c2323a487b5ce90f9d38a48be249cfb739c5
533
534 Depends-On: I3d8dd6d734a1013d2d4a43e11c3538c3a345820b
535
536shade: Add unittest tips jobs
537=============================
538
539* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
540
541.. code:: yaml
542
543 - job:
544 name: shade-tox-py27-tips
545 parent: openstack-tox-py27
546 description: |
547 Run tox python 27 unittests against master of important libs
548 required-projects:
549 - openstack-infra/shade
550 - openstack/os-client-config
551
552 - job:
553 name: shade-tox-py35-tips
554 parent: openstack-tox-py35
555 description: |
556 Run tox python 35 unittests against master of important libs
557 required-projects:
558 - openstack-infra/shade
559 - openstack/keystoneauth
560 - openstack/os-client-config
561
562shade: Add unittest tips project-template
563=========================================
564
565* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
566
567.. code:: yaml
568
569 - project-template:
570 name: shade-tox-tips
571 check:
572 jobs:
573 - shade-tox-py27-tips
574 - shade-tox-py35-tips
575 gate:
576 jobs:
577 - shade-tox-py27-tips
578 - shade-tox-py35-tips
579
580shade: Add unittest tips project-template to project
581====================================================
582
583* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
584
585.. code:: yaml
586
587 - project:
588 name: openstack-infra/shade
589 templates:
590 - publish-to-pypi
591 - publish-openstack-sphinx-docs
592 - shade-tox-tips
593
594os-client-config: Add shade-tox-tips jobs
595=========================================
596
597* In git.openstack.org/openstack/os-client-config/.zuul.yaml:
598
599.. code:: yaml
600
601 - project:
602 name: openstack/os-client-config
603 templates:
604 - shade-tox-tips
605 check:
606 jobs:
607 - legacy-osc-dsvm-functional-tips:
608 voting: false
609
610os-client-config: Add nat_source flag for networks
611==================================================
612
613::
614
615 diff --git a/os_client_config/cloud_config.py b/os_client_config/cloud_config.py
616 index 2e97629..d1a6983 100644
617 --- a/os_client_config/cloud_config.py
618 +++ b/os_client_config/cloud_config.py
619 @@ -581,3 +581,10 @@ class CloudConfig(object):
620 if net['nat_destination']:
621 return net['name']
622 return None
623 +
624 + def get_nat_source(self):
625 + """Get network used for NAT source."""
626 + for net in self.config['networks']:
627 + if net.get('nat_source'):
628 + return net['name']
629 + return None
630
631shade: Add support for configured NAT source variable
632=====================================================
633
634::
635
636 Zuul 10-21 13:57
637 Patch Set 5: Verified-1
638 Build failed.
639 openstack-tox-pep8 SUCCESS in 2m 29s
640 openstack-tox-py27 FAILURE in 2m 34s
641 build-openstack-releasenotes SUCCESS in 2m 47s
642 openstack-tox-py35 FAILURE in 2m 41s
643 openstack-tox-cover POST_FAILURE in 3m 52s (non-voting)
644 build-openstack-sphinx-docs SUCCESS in 2m 57s
645 shade-tox-py27-tips SUCCESS in 3m 18s
646 shade-tox-py35-tips SUCCESS in 2m 28s
647
648Live Configuration Changes
649==========================
650
651.. container:: handout
652
653 Zuul is a distributed system, with a distributed configuration.
654
655.. code:: yaml
656
657 - tenant:
658 name: openstack
659 source:
660 gerrit:
661 config-projects:
662 - project-config
663 untrusted-projects:
664 - openstack-infra/zuul-jobs:
665 shadow: openstack-infra/project-config
666 - openstack-infra/openstack-zuul-jobs
667 - openstack-infra/nodepool
668 - openstack-infra/shade
669 - openstack-infra/zuul
670 - openstack/requirements
671
672Zuul Startup
673============
674
675* Read config file
676
677Zuul Startup
678============
679
680* Read config file
681* Ask mergers for branches of each repo
682
683.. ansi:: images/startup1.ans
684
685Zuul Startup
686============
687
688* Read config file
689* Ask mergers for branches of each repo
690* Ask mergers for .zuul.yaml file for each branch of each repo
691
692``.zuul.yaml`` can be ``^\.?zuul.ya?ml$`` file or ``^\.?zuul.d$`` run-parts
693directory.
694
695.. ansi:: images/startup2.ans
696
697When .zuul.yaml Changes
698=======================
699
700.. container:: progressive
701
702 * Zuul looks for changes to .zuul.yaml
703 * Asks mergers for updated content
704 * Splices into configuration used for that change
705 * Works with cross-repo dependencies
706
707 ("This change depends on a change to the job definition")
708
709How do you use this thing?
710==========================
711.. transition:: tilt
712.. hidetitle::
713.. figlet:: Configuration
714
715Pipelines
716=========
717
718* Describes the process flow and lifecycle **for a change**
719* A process definition that connects git repositories, jobs, and
720 reporting mechanisms.
721* A context to fix a set of jobs to each project.
722
723Check Pipeline
724==============
725
726.. code:: yaml
727
728 - pipeline:
729 name: check
730 manager: independent
731 source: gerrit
732 trigger:
733 gerrit:
734 - event: patchset-created
735 - event: change-restored
736 success:
737 gerrit:
738 verified: 1
739
740Gate Pipeline
741=============
742
743.. code:: yaml
744
745 - pipeline:
746 name: gate
747 manager: dependent
748 trigger:
749 gerrit:
750 - event: comment-added
751 approval:
752 - workflow: 1
753 success:
754 gerrit:
755 verified: 2
756 submit: true
757
758Zuul Github Support
759===================
760
761.. code:: yaml
762
763 - pipeline:
764 name: check
765 manager: independent
766 trigger:
767 github:
768 - event: pull_request
769 action:
770 - opened
771 - changed
772 - reopened
773 success:
774 github:
775 status: 'success'
776 failure:
777 github:
778 status: 'failure'
779
780OpenStack Github Support for Cross Community Testing
781====================================================
782
783 * Github App "OpenStack Zuul"
784 * App added to github project by project admin
785 * Project aded to OpenStack's main.yaml
786 * Test interactions between OpenStack and important adjacent communities
787
788 * Ansible
789 * Kubernetes
790 * Ceph?
791 * Open vSwitch?
792
793Cross Community Testing
794=======================
795
796.. code:: yaml
797
798 - pipeline:
799 name: check
800 description: |
801 Newly uploaded patchsets enter this pipeline to receive an
802 initial +/-1 Verified vote.
803 manager: independent
804 trigger:
805 gerrit:
806 - event: patchset-created
807 - event: change-restored
808 - event: comment-added
809 comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*recheck
810 - event: comment-added
811 require-approval:
812 - Verified: [-1, -2]
813 username: zuul
814 approval:
815 - Workflow: 1
816 github:
817 - event: pull_request
818 action:
819 - opened
820 - changed
821 - reopened
822 - event: pull_request
823 action: comment
824 comment: (?i)^\s*recheck\s*$
825
826Cross Community Support cont.
827=============================
828
829.. code:: yaml
830
831 start:
832 github:
833 status: pending
834 comment: false
835 success:
836 gerrit:
837 # Note that gerrit keywords are case-sensitive.
838 Verified: 1
839 github:
840 status: 'success'
841 mysql:
842 failure:
843 gerrit:
844 Verified: -1
845 github:
846 status: 'failure'
847 mysql:
848
849Cross Community Depends-On (coming soon)
850========================================
851
852.. container:: progressive
853
854 * shade https://review.openstack.org/#/c/613914/
855
856 Add support for server groups
857
858 Change-ID: I5b411be5c5aa43535fa89a51d6099aadd7a8ea61
859
860 * ansible https://github.com/ansible/ansible/pull/32159
861
862 Add os_server_group module
863
864 Depends-On: https://review.openstack.org/#/613914/
865
866Jobs
867====
868
869* Jobs run on nodes from nodepool (static or dynamic)
870* Metadata defined in Zuul's configuration
871* Execution content in Ansible (with live streaming!)
872* Jobs may be defined centrally or in the repo being tested
873* Jobs have contextual variants that simplify configuration
874* git.openstack.org/openstack-infra/zuul-jobs repo can be directly shared
875 between zuul installations
876
877Job
878===
879
880.. code:: yaml
881
882 - job:
883 name: base
884 parent: null
885 description: |
886 The base job for Zuul.
887 timeout: 1800
888 nodeset:
889 nodes:
890 - name: primary
891 label: centos-7
892 pre-run: playbooks/base/pre
893 post-run:
894 - playbooks/base/post-ssh
895 - playbooks/base/post-logs
896 secrets:
897 - site_logs
898
899Simple Job
900==========
901
902.. code:: yaml
903
904 - job:
905 name: tox
906 pre-run: playbooks/setup-tox
907 run: playbooks/tox
908 post-run: playbooks/fetch-tox-output
909
910 - job:
911 name: tox-py27
912 parent: tox
913 vars:
914 tox_envlist: py27
915
916
917Simple Job Variant
918==================
919
920.. code:: yaml
921
922 - job:
923 name: tox-py27
924 branch: stable/mitaka
925 nodeset:
926 - name: ubuntu-trusty
927 label: ubuntu-trusty
928
929Nodesets for Multi-node Jobs
930============================
931
932.. code:: yaml
933
934 - nodeset:
935 name: ceph-cluster
936 nodes:
937 - name: controller
938 label: centos-7
939 - name: compute1
940 label: fedora-26
941 - name: compute2
942 label: fedora-26
943 groups:
944 - name: ceph-osd
945 nodes:
946 - controller
947 - name: ceph-monitor
948 nodes:
949 - controller
950 - compute1
951 - compute2
952
953Multi-node Job
954==============
955
956* nodesets are provided to Ansible for jobs in inventory
957
958.. code:: yaml
959
960 - job:
961 name: ceph-multinode
962 nodeset: ceph-cluster
963 run: playbooks/install-ceph
964
965Multi-node Ceph Job Content
966===========================
967
968.. code:: yaml
969
970 - hosts: all
971 roles:
972 - install-ceph
973 - hosts: ceph-osd
974 roles:
975 - start-ceph-osd
976 - hosts: ceph-monitor
977 roles:
978 - start-ceph-monitor
979 - hosts: all
980 roles:
981 - do-something-interesting
982
983Projects
984========
985
986* Projects are git repositories
987* Specify a set of jobs for each pipeline
988* golang git repo naming as been adopted:
989
990::
991
992 zuul@ubuntu-xenial:~$ find /home/zuul/src -mindepth 3 -maxdepth 3 -type d
993 src/git.openstack.org/openstack-infra/shade
994 src/git.openstack.org/openstack/os-client-config
995 src/github.com/ansible/ansible
996
997Project
998=======
999
1000.. code:: yaml
1001
1002 - project:
1003 # Needing to name the project in that project's .zuul.yaml is going away
1004 name: openstack/nova
1005 check:
1006 jobs:
1007 - openstack-tox-py27
1008 - openstack-tox-py35
1009 - openstack-doc-build
1010
1011Project with Local Variant
1012==========================
1013
1014.. code:: yaml
1015
1016 - project:
1017 name: openstack/nova
1018 check:
1019 jobs:
1020 - openstack-tox-py27
1021 - openstack-tox-py35
1022 - openstack-doc-build
1023 - openstack-tox-pypy:
1024 voting: false
1025
1026Project with More Local Variants
1027================================
1028
1029.. code:: yaml
1030
1031 - project:
1032 name: openstack/nova
1033 check:
1034 jobs:
1035 - openstack-tox-py27
1036 - openstack-tox-py35
1037 - openstack-doc-build:
1038 files: '^docs/.*$'
1039 - openstack-tox-pypy:
1040 voting: false
1041
1042Project with Many Local Variants
1043================================
1044
1045.. code:: yaml
1046
1047 - project:
1048 name: openstack/nova
1049 check:
1050 jobs:
1051 - openstack-tox-py27
1052 nodeset:
1053 - name: centos-7
1054 label: centos-7
1055 - openstack-tox-py27
1056 branch: stable/newton
1057 nodeset:
1058 - name: ubuntu-trusty
1059 label: ubuntu-trusty
1060 - openstack-doc-build:
1061 files: '^docs/.*$'
1062 - openstack-tox-pypy:
1063 voting: false
1064
1065Project With Central and Local Config
1066=====================================
1067
1068.. code:: yaml
1069
1070 # In git.openstack.org/openstack-infra/project-config:
1071 - project:
1072 name: openstack/nova
1073 templates:
1074 - openstack-tox-jobs
1075
1076.. code:: yaml
1077
1078 # In git.openstack.org/openstack/nova/.zuul.yaml:
1079 - project:
1080 name: openstack/nova
1081 check:
1082 - nova-placement-functional-devstack
1083
1084Project with Job Dependencies
1085=============================
1086
1087.. code:: yaml
1088
1089 - project:
1090 name: openstack/nova
1091 release:
1092 jobs:
1093 - build-artifacts
1094 - upload-tarball:
1095 dependencies: build-artifacts
1096 - upload-pypi:
1097 dependencies: build-artifacts
1098 - notify-mirror:
1099 dependencies:
1100 - upload-tarball
1101 - upload-pypi
1102
1103Playbooks
1104=========
1105
1106* Jobs run Ansible playbooks
1107* Playbooks may be defined centrally or in the repo being tested
1108* Playbooks can use roles from current or other Zuul repos (or Galaxy, coming soon)
1109* Playbooks are run on the zuul-executor using bubblewrap https://github.com/projectatomic/bubblewrap
1110* Playbooks are not allowed to execute content on 'localhost'
1111
1112Job with Roles
1113==============
1114
1115.. code:: yaml
1116
1117 - job:
1118 name: zuul-integration
1119 description: |
1120 Multi-node Zuul installation and integration test
1121 nodeset: zuul-cluster
1122 roles:
1123 - zuul: openstack/ansible-role-zuul
1124 run: playbooks/zuul-integration
1125
1126Job with Multiple Projects
1127==========================
1128
1129.. code:: yaml
1130
1131 - job:
1132 name: tox-py35-on-zuul
1133 parent: tox-py35
1134 description: |
1135 Run zuul's py35 unittests on patches to zuul-jobs
1136 vars:
1137 zuul_work_dir: src/git.openstack.org/openstack-infra/zuul
1138 required-projects:
1139 - name: openstack-infra/zuul
1140 override-branch: feature/zuulv3
1141
1142 - project: openstack-infra/zuul-jobs
1143 check:
1144 jobs:
1145 - tox-py35-on-zuul
1146
1147Devstack-gate / Tempest Playbook
1148================================
1149
1150.. code:: yaml
1151
1152 # devstack-gate / tempest playbook
1153 hosts: all
1154 roles:
1155 - setup-multinode-networking
1156 - partition-swap
1157 - configure-mirrors
1158 - run-devstack
1159 - run-tempest
1160
1161Simple Shell Playbook
1162=====================
1163
1164.. code:: yaml
1165
1166 hosts: controller
1167 tasks:
1168 - shell: ./run_tests.sh
1169
1170Test Like Production
1171====================
1172
1173If you use Ansible for deployment, your test and deployment processes
1174and playbooks are the same
1175
1176What if you don't use Ansible?
1177==============================
1178
1179OpenStack Infra Control Plane uses Puppet
1180=========================================
1181
1182.. code:: yaml
1183
1184 # In git.openstack.org/openstack-infra/project-config/roles/legacy-install-afs-with-puppet/tasks/main.yaml
1185 - name: Install puppet
1186 shell: ./install_puppet.sh
1187 args:
1188 chdir: "{{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/system-config"
1189 environment:
1190 # Skip setting up pip, our images have already done this.
1191 SETUP_PIP: "false"
1192 become: yes
1193
1194 - name: Copy manifest
1195 copy:
1196 src: manifest.pp
1197 dest: "{{ ansible_user_dir }}/manifest.pp"
1198
1199 - name: Run puppet
1200 puppet:
1201 manifest: "{{ ansible_user_dir }}/manifest.pp"
1202 become: yes
1203
1204Secrets
1205=======
1206
1207* Inspired by Kubernetes Secrets API
1208* Projects can add named encrypted secrets to their .zuul.yaml file
1209* Jobs can request to use secrets by name
1210* Jobs using secrets are not reconfigured speculatively
1211* Secrets can only be used by the same project they are defined in
1212* Public key per project:
1213 ``{{ zuul_url }}/{{ tenant }}/keys/{{ project }}.pub``
1214
1215::
1216 GET http://zuulv3.openstack.org/keys/openstack-infra/shade.pub
1217
1218Secret Example (note, no admins had to enable this)
1219===================================================
1220
1221.. code:: yaml
1222
1223 # In git.openstack.org/openstack/loci/.zuul.yaml:
1224 - secret:
1225 name: loci_docker_login
1226 data:
1227 user: !encrypted/pkcs1-oaep
1228 - r8Nbpq5olmfLF035BZ/CUoFLIdhvBi/49KuochOAHbvns+xMiho3C7MEFzYDqJX3IhHde
1229 BICYOgK7qnyINOIZL2e7pl75rEdHQwJjSFUMkpdY6wEP7f9hpolj9xVp0ifHUVQqPHMRn
1230 zoPFd8MEAHxH5GLmc2SWJ98E/QUqGltxBi1YRSZoCcNtq3tHFK5Y+xQlLhIseJ2HkpDs6
1231 YXOGP9Qt4Va6sdyBcA90H+apSAcYA3Duu962ySZQAsYNui/3NQq3gLA+OZeyTJtcrh4hj
1232 Rb5dBnDWfSrMpxdNkbPXXgbQaxO3T0L4jbaOF8VKEsiI9olBrOeV2M9ddYJjSsHGj4XR8
1233 4vwS0+doB7np93fujiDuHVgdG8R40NW2GznyKRlRtzAORla7Mzw1Y1MokcUyY6p1LlLLl
1234 wUuWYCCEuRciOPhZXQ2u42qju/zrK2/dPnO8HfUINSrN0WbNq14ZwPpbj0ro02oGPbtwu
1235 OTw1z+N0Nc+GuLWlwYJGYM/z0UnvDR3WEBc2kXbVev9w4n0cB3RyphML2PDZZWbw8tjnX
1236 h1VsAOJ0Qo4qq1K/ft95ypd+vtjkfepEgHEBmJNwutJa9IHAkGfrkO9VkpUTPpfffnPwz
1237 d0/zaaadNl6MLQUSutRwY23YIIbv+fmukxw2vnJmvn6abkBlMya7KgtifwNA8c=
1238 password: !encrypted/pkcs1-oaep
1239 - gUEX4eY3JAk/Xt7Evmf/hF7xr6HpNRXTibZjrKTbmI4QYHlzEBrBbHey27Pt/eYvKKeKw
1240 hk8MDQ4rNX7ZK1v+CKTilUfOf4AkKYbe6JFDd4z+zIZ2PAA7ZedO5FY/OnqrG7nhLvQHE
1241 5nQrYwmxRp4O8eU5qG1dSrM9X+bzri8UnsI7URjqmEsIvlUqtybQKB9qQXT4d6mOeaKGE
1242 5h6Ydkb9Zdi4Qh+GpCGDYwHZKu1mBgVK5M1G6NFMy1DYz+4NJNkTRe9J+0TmWhQ/KZSqo
1243 4ck0x7Tb0Nr7hQzV8SxlwkaCTLDzvbiqmsJPLmzXY2jry6QsaRCpthS01vnj47itoZ/7p
1244 taH9CoJ0Gl7AkaxsrDSVjWSjatTQpsy1ub2fuzWHH4ASJFCiu83Lb2xwYts++r8ZSn+mA
1245 hbEs0GzPI6dIWg0u7aUsRWMOB4A+6t2IOJibVYwmwkG8TjHRXxVCLH5sY+i3MR+NicR9T
1246 IZFdY/AyH6vt5uHLQDU35+5n91pUG3F2lyiY5aeMOvBL05p27GTMuixR5ZoHcvSoHHtCq
1247 7Wnk21iHqmv/UnEzqUfXZOque9YP386RBWkshrHd0x3OHUfBK/WrpivxvIGBzGwMr2qAj
1248 /AhJsfDXKBBbhGOGk1u5oBLjeC4SRnAcIVh1+RWzR4/cAhOuy2EcbzxaGb6VTM=
1249
1250Secret Example
1251==============
1252
1253.. code:: yaml
1254
1255 # In git.openstack.org/openstack/loci/.zuul.yaml:
1256 - job:
1257 name: publish-loci-cinder
1258 parent: loci-cinder
1259 post-run: playbooks/push
1260 secrets:
1261 - loci_docker_login
1262
1263 # In git.openstack.org/openstack/loci/playbooks/push.yaml:
1264 - hosts: all
1265 tasks:
1266 - include_vars: vars.yaml
1267
1268 - name: Push project to DockerHub
1269 block:
1270 - command: docker login -u {{ loci_docker_login.user }} -p {{ loci_docker_login.password }}
1271 no_log: True
1272 - command: docker push openstackloci/{{ project }}:{{ branch }}-{{ item.name }}
1273 with_items: "{{ distros }}"
1274
1275Status
1276======
1277
1278* zuulv3 is running for OpenStack
1279* zuulv3 also runing at BMW (in OpenShift)
1280* automation job migration sucked (I wrote the script, whoops)
1281* cleaning up fixing automation and bugs found running at scale
1282* reference documentation exists and is complete
1283* pre-repository job documentation
1284* will release v3.0 once we're satisfied it's good for other people
1285
1286What's Next?
1287============
1288
1289* dashboard + REST API
1290* user and deployer *documentation* - getting started walkthroughs
1291* node providers:
1292 * static
1293 * OCI/docker
1294 * Mac Stadium (for our Ansible friends)
1295 * bifrost
1296* support for galaxy roles
1297* in-line code-review comments from Zuul
1298* shared job doc generation
1299* native container/kubernetes execution?
1300
1301Important Links
1302===============
1303
1304* https://git.openstack.org/cgit/openstack-infra/zuul/log/?h=feature/zuulv3
1305* https://docs.openstack.org/infra/zuul/feature/zuulv3/
1306* https://docs.openstack.org/infra/manual/zuulv3.html
1307* https://docs.openstack.org/infra/openstack-zuul-jobs/
1308* https://storyboard.openstack.org/#!/project/679
1309* https://storyboard.openstack.org/#!/board/41
1310* freenode:#zuul
1311
1312Questions
1313=========
1314
1315.. ansi:: images/questions.ans
1316
1317Presentty
1318=========
1319.. hidetitle::
1320.. transition:: pan
1321.. figlet:: Presentty
1322
1323* Console presentations written in reStructuredText
1324* Cross-fade, pan, tilt, cut transitions
1325* Figlet, cowsay!
1326* https://pypi.python.org/pypi/presentty