summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2018-03-24 09:20:26 -0500
committerMonty Taylor <mordred@inaugust.com>2018-03-24 09:05:20 -0700
commit5be1b057adf8a639f718409b2fd8986272d05ac0 (patch)
treed5e21cae658e9be5d1db065229a74bf4b1d3f5e2
parent0560476234c83a1a2ec36e0ed803de1b60008502 (diff)
Add infra talk for ons
-rw-r--r--src/infra/cp437utf8.py69
-rw-r--r--src/infra/images/01-gerrit.pngbin0 -> 126754 bytes
-rw-r--r--src/infra/images/02-status1.pngbin0 -> 169213 bytes
-rw-r--r--src/infra/images/03-status2.pngbin0 -> 58075 bytes
-rw-r--r--src/infra/images/04-health.pngbin0 -> 40296 bytes
-rw-r--r--src/infra/images/ansible.ans49
-rw-r--r--src/infra/images/architecture.ans45
-rw-r--r--src/infra/images/circle.ans49
-rw-r--r--src/infra/images/color-gertty.ans57
-rwxr-xr-xsrc/infra/images/convert.sh4
-rw-r--r--src/infra/images/crd.ans29
-rw-r--r--src/infra/images/cursor.ans47
-rw-r--r--src/infra/images/cursor2.ans47
-rw-r--r--src/infra/images/openstack.ans51
-rw-r--r--src/infra/images/orig/ansible.ans49
-rw-r--r--src/infra/images/orig/architecture.ans45
-rw-r--r--src/infra/images/orig/circle.ans49
-rw-r--r--src/infra/images/orig/color-gertty.ans57
-rw-r--r--src/infra/images/orig/crd.ans29
-rw-r--r--src/infra/images/orig/cursor.ans47
-rw-r--r--src/infra/images/orig/cursor2.ans47
-rw-r--r--src/infra/images/orig/openstack.ans51
-rw-r--r--src/infra/images/orig/questions.ans27
-rw-r--r--src/infra/images/orig/redhat.ans49
-rw-r--r--src/infra/images/orig/startup1.ans39
-rw-r--r--src/infra/images/orig/startup2.ans39
-rw-r--r--src/infra/images/orig/td.ansbin0 -> 2433 bytes
-rw-r--r--src/infra/images/orig/testslide.ans49
-rw-r--r--src/infra/images/orig/title.ans45
-rw-r--r--src/infra/images/orig/workflow.ans29
-rw-r--r--src/infra/images/orig/zsim-00.ans43
-rw-r--r--src/infra/images/orig/zsim-01.ans43
-rw-r--r--src/infra/images/orig/zsim-02.ans43
-rw-r--r--src/infra/images/orig/zsim-03.ans43
-rw-r--r--src/infra/images/orig/zsim-04.ans43
-rw-r--r--src/infra/images/orig/zsim-05.ans43
-rw-r--r--src/infra/images/orig/zsim-06.ans43
-rw-r--r--src/infra/images/orig/zsim-07.ans43
-rw-r--r--src/infra/images/orig/zsim-08.ans43
-rw-r--r--src/infra/images/orig/zsim-09.ans43
-rw-r--r--src/infra/images/orig/zsim-10.ans43
-rw-r--r--src/infra/images/orig/zsim-11.ans43
-rw-r--r--src/infra/images/orig/zsim-12.ans43
-rw-r--r--src/infra/images/orig/zsim-13.ans43
-rw-r--r--src/infra/images/orig/zsim-14.ans43
-rw-r--r--src/infra/images/orig/zsim-15.ans43
-rw-r--r--src/infra/images/orig/zsim-16.ans43
-rw-r--r--src/infra/images/orig/zsim-17.ans43
-rw-r--r--src/infra/images/orig/zsim-18.ans43
-rw-r--r--src/infra/images/orig/zsim-19.ans43
-rw-r--r--src/infra/images/orig/zsim-20.ans43
-rw-r--r--src/infra/images/orig/zsim-21.ans43
-rw-r--r--src/infra/images/orig/zsim-22.ans43
-rw-r--r--src/infra/images/orig/zsim-keyline.ans45
-rw-r--r--src/infra/images/orig/zuul-status.ans49
-rw-r--r--src/infra/images/orig/zuul.ans43
-rw-r--r--src/infra/images/questions.ans27
-rw-r--r--src/infra/images/redhat.ans49
-rw-r--r--src/infra/images/startup1.ans39
-rw-r--r--src/infra/images/startup2.ans39
-rw-r--r--src/infra/images/td.ansbin0 -> 2737 bytes
-rw-r--r--src/infra/images/testslide.ans49
-rw-r--r--src/infra/images/title.ans45
-rw-r--r--src/infra/images/workflow.ans29
-rw-r--r--src/infra/images/zsim-00.ans43
-rw-r--r--src/infra/images/zsim-01.ans43
-rw-r--r--src/infra/images/zsim-02.ans43
-rw-r--r--src/infra/images/zsim-03.ans43
-rw-r--r--src/infra/images/zsim-04.ans43
-rw-r--r--src/infra/images/zsim-05.ans43
-rw-r--r--src/infra/images/zsim-06.ans43
-rw-r--r--src/infra/images/zsim-07.ans43
-rw-r--r--src/infra/images/zsim-08.ans43
-rw-r--r--src/infra/images/zsim-09.ans43
-rw-r--r--src/infra/images/zsim-10.ans43
-rw-r--r--src/infra/images/zsim-11.ans43
-rw-r--r--src/infra/images/zsim-12.ans43
-rw-r--r--src/infra/images/zsim-13.ans43
-rw-r--r--src/infra/images/zsim-14.ans43
-rw-r--r--src/infra/images/zsim-15.ans43
-rw-r--r--src/infra/images/zsim-16.ans43
-rw-r--r--src/infra/images/zsim-17.ans43
-rw-r--r--src/infra/images/zsim-18.ans43
-rw-r--r--src/infra/images/zsim-19.ans43
-rw-r--r--src/infra/images/zsim-20.ans43
-rw-r--r--src/infra/images/zsim-21.ans43
-rw-r--r--src/infra/images/zsim-22.ans43
-rw-r--r--src/infra/images/zsim-keyline.ans45
-rw-r--r--src/infra/images/zuul-status.ans49
-rw-r--r--src/infra/images/zuul.ans43
-rw-r--r--src/infra/infra.rst1239
-rwxr-xr-xsrc/infra/start.sh8
92 files changed, 4874 insertions, 0 deletions
diff --git a/src/infra/cp437utf8.py b/src/infra/cp437utf8.py
new file mode 100644
index 0000000..9b1b629
--- /dev/null
+++ b/src/infra/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/infra/images/01-gerrit.png b/src/infra/images/01-gerrit.png
new file mode 100644
index 0000000..2c8a2c4
--- /dev/null
+++ b/src/infra/images/01-gerrit.png
Binary files differ
diff --git a/src/infra/images/02-status1.png b/src/infra/images/02-status1.png
new file mode 100644
index 0000000..7b350a8
--- /dev/null
+++ b/src/infra/images/02-status1.png
Binary files differ
diff --git a/src/infra/images/03-status2.png b/src/infra/images/03-status2.png
new file mode 100644
index 0000000..0b2607d
--- /dev/null
+++ b/src/infra/images/03-status2.png
Binary files differ
diff --git a/src/infra/images/04-health.png b/src/infra/images/04-health.png
new file mode 100644
index 0000000..750d32c
--- /dev/null
+++ b/src/infra/images/04-health.png
Binary files differ
diff --git a/src/infra/images/ansible.ans b/src/infra/images/ansible.ans
new file mode 100644
index 0000000..0cadddf
--- /dev/null
+++ b/src/infra/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/infra/images/architecture.ans b/src/infra/images/architecture.ans
new file mode 100644
index 0000000..ad308eb
--- /dev/null
+++ b/src/infra/images/architecture.ans
@@ -0,0 +1,45 @@
1
2
3
4
5
6
7 ┌─────────────â”
8
9 ┌───────┤ Zuul Merger │   
10
11 ┌────┴───â” └──┬───┬──────┘
12
13 ┌──┤ Gerrit ├──â” │ │
14
15 │ └────────┘ │ ┌─┘ │
16
17   │ ┌────────â” │ │ ┌──┴───â” ┌───────────────â”
18
19 ┌─────┼──┤  Web  ├──┼────┤ Zuul ├─────┤ Zuul Executor │ 
20
21 ____ │ └────┬───┘ │ │ └──┬───┘ │ ┌───────â” │
22
23 |... | │ ┌────┴───â” │ │ │ │  │Ansible│ │
24
25 |... | ├──┤ GitHub ├──┼─┘ │ └───┴───┬───┴───┘
26
27/______\ │ └────────┘ │ ┌────┴─────â” │
28
29 o │ ┌────────â” │ │ Nodepool │ │
30
31 -|- └──┤ Finger ├──┘ └────┬─────┘ │
32
33 / \ └────────┘ │ │
34
35 Dev Cloud │  │
36
37  Node 1 ─────────────┤
38
39  ...  │
40
41  Node 2 ─────────────┘
42
43(Not to scale)  
44
45 \ No newline at end of file
diff --git a/src/infra/images/circle.ans b/src/infra/images/circle.ans
new file mode 100644
index 0000000..291eb33
--- /dev/null
+++ b/src/infra/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/infra/images/color-gertty.ans b/src/infra/images/color-gertty.ans
new file mode 100644
index 0000000..7530e70
--- /dev/null
+++ b/src/infra/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/infra/images/convert.sh b/src/infra/images/convert.sh
new file mode 100755
index 0000000..9acce64
--- /dev/null
+++ b/src/infra/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/infra/images/crd.ans b/src/infra/images/crd.ans
new file mode 100644
index 0000000..4b4436d
--- /dev/null
+++ b/src/infra/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/infra/images/cursor.ans b/src/infra/images/cursor.ans
new file mode 100644
index 0000000..6d4d108
--- /dev/null
+++ b/src/infra/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/infra/images/cursor2.ans b/src/infra/images/cursor2.ans
new file mode 100644
index 0000000..a9fe285
--- /dev/null
+++ b/src/infra/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/infra/images/openstack.ans b/src/infra/images/openstack.ans
new file mode 100644
index 0000000..e7a66f4
--- /dev/null
+++ b/src/infra/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/infra/images/orig/ansible.ans b/src/infra/images/orig/ansible.ans
new file mode 100644
index 0000000..8605d51
--- /dev/null
+++ b/src/infra/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/infra/images/orig/architecture.ans b/src/infra/images/orig/architecture.ans
new file mode 100644
index 0000000..94b0720
--- /dev/null
+++ b/src/infra/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/infra/images/orig/circle.ans b/src/infra/images/orig/circle.ans
new file mode 100644
index 0000000..d21b2bb
--- /dev/null
+++ b/src/infra/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/infra/images/orig/color-gertty.ans b/src/infra/images/orig/color-gertty.ans
new file mode 100644
index 0000000..7530e70
--- /dev/null
+++ b/src/infra/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/infra/images/orig/crd.ans b/src/infra/images/orig/crd.ans
new file mode 100644
index 0000000..4b4436d
--- /dev/null
+++ b/src/infra/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/infra/images/orig/cursor.ans b/src/infra/images/orig/cursor.ans
new file mode 100644
index 0000000..d9f6da9
--- /dev/null
+++ b/src/infra/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/infra/images/orig/cursor2.ans b/src/infra/images/orig/cursor2.ans
new file mode 100644
index 0000000..93d8570
--- /dev/null
+++ b/src/infra/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/infra/images/orig/openstack.ans b/src/infra/images/orig/openstack.ans
new file mode 100644
index 0000000..4f689c7
--- /dev/null
+++ b/src/infra/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/infra/images/orig/questions.ans b/src/infra/images/orig/questions.ans
new file mode 100644
index 0000000..ae2e90a
--- /dev/null
+++ b/src/infra/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/infra/images/orig/redhat.ans b/src/infra/images/orig/redhat.ans
new file mode 100644
index 0000000..f297fd0
--- /dev/null
+++ b/src/infra/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/infra/images/orig/startup1.ans b/src/infra/images/orig/startup1.ans
new file mode 100644
index 0000000..3510a93
--- /dev/null
+++ b/src/infra/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/infra/images/orig/startup2.ans b/src/infra/images/orig/startup2.ans
new file mode 100644
index 0000000..3093800
--- /dev/null
+++ b/src/infra/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/infra/images/orig/td.ans b/src/infra/images/orig/td.ans
new file mode 100644
index 0000000..c0c5cd6
--- /dev/null
+++ b/src/infra/images/orig/td.ans
Binary files differ
diff --git a/src/infra/images/orig/testslide.ans b/src/infra/images/orig/testslide.ans
new file mode 100644
index 0000000..5505907
--- /dev/null
+++ b/src/infra/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/infra/images/orig/title.ans b/src/infra/images/orig/title.ans
new file mode 100644
index 0000000..82ef305
--- /dev/null
+++ b/src/infra/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/infra/images/orig/workflow.ans b/src/infra/images/orig/workflow.ans
new file mode 100644
index 0000000..067cc56
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-00.ans b/src/infra/images/orig/zsim-00.ans
new file mode 100644
index 0000000..4f9ed82
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-01.ans b/src/infra/images/orig/zsim-01.ans
new file mode 100644
index 0000000..a087092
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-02.ans b/src/infra/images/orig/zsim-02.ans
new file mode 100644
index 0000000..8f2938c
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-03.ans b/src/infra/images/orig/zsim-03.ans
new file mode 100644
index 0000000..1186441
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-04.ans b/src/infra/images/orig/zsim-04.ans
new file mode 100644
index 0000000..8344a58
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-05.ans b/src/infra/images/orig/zsim-05.ans
new file mode 100644
index 0000000..948d831
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-06.ans b/src/infra/images/orig/zsim-06.ans
new file mode 100644
index 0000000..be6cf1b
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-07.ans b/src/infra/images/orig/zsim-07.ans
new file mode 100644
index 0000000..e827b4f
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-08.ans b/src/infra/images/orig/zsim-08.ans
new file mode 100644
index 0000000..e7d5ca5
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-09.ans b/src/infra/images/orig/zsim-09.ans
new file mode 100644
index 0000000..c5a6f3a
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-10.ans b/src/infra/images/orig/zsim-10.ans
new file mode 100644
index 0000000..85e80a2
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-11.ans b/src/infra/images/orig/zsim-11.ans
new file mode 100644
index 0000000..0a7b7e2
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-12.ans b/src/infra/images/orig/zsim-12.ans
new file mode 100644
index 0000000..072d29b
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-13.ans b/src/infra/images/orig/zsim-13.ans
new file mode 100644
index 0000000..cf656e3
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-14.ans b/src/infra/images/orig/zsim-14.ans
new file mode 100644
index 0000000..0151210
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-15.ans b/src/infra/images/orig/zsim-15.ans
new file mode 100644
index 0000000..eb63977
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-16.ans b/src/infra/images/orig/zsim-16.ans
new file mode 100644
index 0000000..d007060
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-17.ans b/src/infra/images/orig/zsim-17.ans
new file mode 100644
index 0000000..14c9258
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-18.ans b/src/infra/images/orig/zsim-18.ans
new file mode 100644
index 0000000..ed780ea
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-19.ans b/src/infra/images/orig/zsim-19.ans
new file mode 100644
index 0000000..c82b91c
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-20.ans b/src/infra/images/orig/zsim-20.ans
new file mode 100644
index 0000000..4d75d8b
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-21.ans b/src/infra/images/orig/zsim-21.ans
new file mode 100644
index 0000000..5847053
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-22.ans b/src/infra/images/orig/zsim-22.ans
new file mode 100644
index 0000000..3ad7700
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zsim-keyline.ans b/src/infra/images/orig/zsim-keyline.ans
new file mode 100644
index 0000000..a2c3fb5
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zuul-status.ans b/src/infra/images/orig/zuul-status.ans
new file mode 100644
index 0000000..d21c0ca
--- /dev/null
+++ b/src/infra/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/infra/images/orig/zuul.ans b/src/infra/images/orig/zuul.ans
new file mode 100644
index 0000000..8442c58
--- /dev/null
+++ b/src/infra/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/infra/images/questions.ans b/src/infra/images/questions.ans
new file mode 100644
index 0000000..450e9ac
--- /dev/null
+++ b/src/infra/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/infra/images/redhat.ans b/src/infra/images/redhat.ans
new file mode 100644
index 0000000..ca7597e
--- /dev/null
+++ b/src/infra/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/infra/images/startup1.ans b/src/infra/images/startup1.ans
new file mode 100644
index 0000000..c657cdb
--- /dev/null
+++ b/src/infra/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/infra/images/startup2.ans b/src/infra/images/startup2.ans
new file mode 100644
index 0000000..65e44fb
--- /dev/null
+++ b/src/infra/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/infra/images/td.ans b/src/infra/images/td.ans
new file mode 100644
index 0000000..dcbf243
--- /dev/null
+++ b/src/infra/images/td.ans
Binary files differ
diff --git a/src/infra/images/testslide.ans b/src/infra/images/testslide.ans
new file mode 100644
index 0000000..f2feea4
--- /dev/null
+++ b/src/infra/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/infra/images/title.ans b/src/infra/images/title.ans
new file mode 100644
index 0000000..c784327
--- /dev/null
+++ b/src/infra/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/infra/images/workflow.ans b/src/infra/images/workflow.ans
new file mode 100644
index 0000000..067cc56
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-00.ans b/src/infra/images/zsim-00.ans
new file mode 100644
index 0000000..bbfdc82
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-01.ans b/src/infra/images/zsim-01.ans
new file mode 100644
index 0000000..742a968
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-02.ans b/src/infra/images/zsim-02.ans
new file mode 100644
index 0000000..28809c2
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-03.ans b/src/infra/images/zsim-03.ans
new file mode 100644
index 0000000..c6a2bfd
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-04.ans b/src/infra/images/zsim-04.ans
new file mode 100644
index 0000000..8893ed8
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-05.ans b/src/infra/images/zsim-05.ans
new file mode 100644
index 0000000..be3cd9e
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-06.ans b/src/infra/images/zsim-06.ans
new file mode 100644
index 0000000..64de1d6
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-07.ans b/src/infra/images/zsim-07.ans
new file mode 100644
index 0000000..6a34279
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-08.ans b/src/infra/images/zsim-08.ans
new file mode 100644
index 0000000..318c67b
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-09.ans b/src/infra/images/zsim-09.ans
new file mode 100644
index 0000000..441979f
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-10.ans b/src/infra/images/zsim-10.ans
new file mode 100644
index 0000000..818789e
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-11.ans b/src/infra/images/zsim-11.ans
new file mode 100644
index 0000000..ddb8bde
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-12.ans b/src/infra/images/zsim-12.ans
new file mode 100644
index 0000000..69eef26
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-13.ans b/src/infra/images/zsim-13.ans
new file mode 100644
index 0000000..5b8b54b
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-14.ans b/src/infra/images/zsim-14.ans
new file mode 100644
index 0000000..f0ec335
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-15.ans b/src/infra/images/zsim-15.ans
new file mode 100644
index 0000000..5ea15df
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-16.ans b/src/infra/images/zsim-16.ans
new file mode 100644
index 0000000..0d18c1b
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-17.ans b/src/infra/images/zsim-17.ans
new file mode 100644
index 0000000..b301dc8
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-18.ans b/src/infra/images/zsim-18.ans
new file mode 100644
index 0000000..da25c2e
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-19.ans b/src/infra/images/zsim-19.ans
new file mode 100644
index 0000000..14b9e51
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-20.ans b/src/infra/images/zsim-20.ans
new file mode 100644
index 0000000..e1a3b8c
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-21.ans b/src/infra/images/zsim-21.ans
new file mode 100644
index 0000000..ccfeef2
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-22.ans b/src/infra/images/zsim-22.ans
new file mode 100644
index 0000000..8be6db5
--- /dev/null
+++ b/src/infra/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/infra/images/zsim-keyline.ans b/src/infra/images/zsim-keyline.ans
new file mode 100644
index 0000000..a2c3fb5
--- /dev/null
+++ b/src/infra/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/infra/images/zuul-status.ans b/src/infra/images/zuul-status.ans
new file mode 100644
index 0000000..d21c0ca
--- /dev/null
+++ b/src/infra/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/infra/images/zuul.ans b/src/infra/images/zuul.ans
new file mode 100644
index 0000000..6369083
--- /dev/null
+++ b/src/infra/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/infra/infra.rst b/src/infra/infra.rst
new file mode 100644
index 0000000..4b199d3
--- /dev/null
+++ b/src/infra/infra.rst
@@ -0,0 +1,1239 @@
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
17OpenStack
18=========
19
20tl;dr
21=====
22
23 * multi repo
24 * integrated deliverable
25 * gated commits
26 * open tooling
27 * nobody is special
28 * there is no Dana, only Zuul
29
30OpenStack Is
31============
32
33 * Federated
34 * Distributed
35 * Large
36 * Open
37 * Not Alone
38
39Federated
40=========
41
42 * Hundreds of involved companies
43 * No 'main' company
44 * "Decisions are made by those who show up"
45 * Union of priorities/use cases
46
47Impact of being Federated
48=========================
49
50 * No company can appoint humans to project positions
51 * The project cannot fire anyone
52 * Variable background of contributors
53 * Heavy reliance on consensus-oriented democracy
54
55Distributed
56===========
57
58 * There is no office
59 * Contributor base is global
60 * Multitude of contributor backgrounds
61
62Impact of being Distributed
63===========================
64
65 * Constantly at odds with American Exceptionalism
66 * Tooling must empower all contributors, regardless of background,
67 skill level or cultural context
68 * Heavy preference for text-based communication
69 * Cannot assume US-centric needs or solutions
70
71Large numbers of
72================
73
74 * Contributors (\~2k in any given 6 month period)
75 * Changes
76 * Code Repositories (1889 as of this morning)
77
78OpenStack Scale Comparison
79==========================
80
81 * 2KJPH (2,000 jobs per hour)
82 * Nodes from 13 Regions of 5 Public and 2 Private OpenStack Clouds
83 * Rackspace, Internap, OVH, Vexxhost, CityCloud and Linaro, Limestone
84 * 10,000 changes merged per month
85
86OpenStack Scale Comparison
87==========================
88
89 * 2KJPH (2,000 jobs per hour)
90 * Nodes from 12 Regions of 5 Public and 1 Private OpenStack Clouds
91 * Rackspace, Internap, OVH, Vexxhost, CityCloud and Linaro, Limestone
92 * 10,000 changes merged per month
93
94 By comparison, our friends at the amazing project Ansible received
95 13,000 changes and had merged 8,000 of them in its first 4 years.
96
97Four Opens
98==========
99
100 * Open Source
101 (we don't hold back Enterprise features, we don't cripple things)
102 * Open Design
103 (design process open to all, decisions are not made inside company doors)
104 * Open Development
105 (public source code, public code review, all code is reviewed and gated)
106 * Open Community
107 (lazy consensus, democratic leadership from participants,
108 public logged meetings in IRC, public archived mailing lists)
109
110Nobody is Special
111=================
112
113 * No dictators
114 * Aggressively egalitarian
115 * No "pay for play"
116
117Fifth Open - Four Opens Applied to the Infrastructure
118=====================================================
119
120 * All tools must be Open
121 * Any external services must by Open
122 * Strongly avoid single-vendor
123
124Multi-Vendor Open Tooling
125=========================
126
127 * Philosophical
128 * Pragmatic
129
130Sixth Open - Four Opens Applied to Operations
131=============================================
132
133 * Ops driven by git/code-review - not by humans running commands
134 * Run as many things CD as possible
135 * Infrastructure team operates the same as the project
136 * Core reviewer status and root access are earned
137 * Human-initiated ops actions (running commands, clicking a UI) are a bug
138 * Keys/secrets are not Open :)
139
140We're Not Alone
141===============
142
143 * Dependencies (libvirt/kvm/xen, mysql/pg, rabbit,
144 python/javascript, ceph/gluster, ansible/salt/puppet/chef, ovs/odl)
145 * Adjacencies (kubernetes, ansible, terraform, opnfv, spinnaker)
146 * Vendors (plugins, products, services, distros)
147
148In a Nutshell
149=============
150
151 * Code Review - nobody has commit/push access
152 * Gated Commits
153 * 3rd-Party CI for vendors
154
155Infra Responsibilities
156======================
157
158 * Communication and Planning Systems
159 * Source Code (code hosting, code review)
160 * Contributor Feedback and Reporting
161 * Content Publication
162 * Automated Gating
163
164All of our systems run in OpenStack Public Clouds
165=================================================
166
167Communication and Planning Systems
168==================================
169
170 * Etherpad http://etherpad.openstack.org
171 * Pastebin http://paste.openstack.org
172 * Issue/Feature Tracking (storyboard) http://storyboard.openstack.org
173 * Forum (askbot) http://ask.openstack.org
174 * Mailing Lists (mailman) http://lists.openstack.org
175 * IRC registration, meetings, bots and logging http://eavesdrop.openstack.org
176 * Meeting planning (yaml2ical)
177 * PBX (asterisk)
178
179Source Code
180===========
181
182 * Code Review (gerrit) http://review.openstack.org
183 * git replica farm (git/cgit) http://git.openstack.org
184 * Code Search (hound) http://codesearch.openstack.org
185
186Contributor Feedback and Reporting
187==================================
188
189 * Build Logs (apache) http://logs.openstack.org
190 * Log Indexing (ELK) http://logstash.openstack.org
191 * Known Failure Identification http://status.openstack.org/elastic-recheck/
192 * Test Trending http://status.openstack.org/openstack-health/#/
193 * Metrics/Statistics http://grafana.openstack.org/
194
195Content Publication
196===================
197
198 * Documentation http://docs.openstack.org
199 * Tag-driven releases to PyPI, NPM, Maven, etc
200
201Gated Commits
202=============
203
204::
205
206 Hack Review Test
207 ========= ========== ==========
208
209 push approve
210 +-------------+ +-------------+
211 | | | |
212 +------+--+ +--v----+--+ +--v-------+
213 | | | | | |
214 | $EDITOR | | Gerrit | | Zuul |
215 | | | | | |
216 +------^--+ +--+----^--+ +--+-------+
217 | | | |
218 +-------------+ +-------------+
219 clone merge
220
221Gating
222======
223
224Every change proposed for a repository is tested before it merges.
225
226Co-gating
227=========
228
229Changes to a set of repositories merge monotonically such
230that each change is tested with the current state of all
231other related repositories before it merges.
232
233Parallel Co-gating
234==================
235
236Changes are serialized such that each change is tested
237with all of the changes ahead of it to satisfy the
238gating requirement while being able to run tests for
239multiple changes simultaneously.
240
241Zuul
242====
243
244 * Custom-written multi-repo parallel co-gating engine
245 * When to run
246 * Where to run it
247 * With what git states
248 * How to respond to results
249
250Not just for OpenStack
251======================
252
253 * Zuul v3 is in production for OpenStack (in OpenStack VMs)
254
255 Also running at:
256
257 * BMW (control plane in OpenShift)
258 * Godaddy (control plane in kuberenetes)
259 * OpenContrail (just learned about that yesterday)
260 * OpenLab
261
262Zuul is not a general purpose automation framework
263==================================================
264
265Zuul in a nutshell
266==================
267
268 * Listens for code events
269 * Prepares appropriate job config and git repo states
270 * Allocates nodes for test jobs
271 * Pushes git repo states to nodes
272 * Runs user-defined Ansible playbooks
273 * Collects/reports results
274 * Potentially merges change
275
276Zuul Simulation
277===============
278.. transition:: pan
279.. container:: handout
280
281 * That was a lot of words - let's walk through it one step at a time
282 * Here we have two git repos, called nova and keystone, and their
283 current HEAD state
284
285.. ansi:: images/zsim-00.ans
286
287Zuul Simulation
288===============
289.. transition:: cut
290.. container:: handout
291
292 * A change is approved for Nova
293
294.. ansi:: images/zsim-01.ans
295
296Zuul Simulation
297===============
298.. transition:: cut
299.. container:: handout
300
301 * Zuul starts running jobs for it
302 * The tests will test the current state of nova and keystone PLUS this nova
303 change
304
305.. ansi:: images/zsim-02.ans
306
307Zuul Simulation
308===============
309.. transition:: cut
310.. container:: handout
311
312 * A change is approved for Keystone
313
314.. ansi:: images/zsim-03.ans
315
316Zuul Simulation
317===============
318.. transition:: cut
319.. container:: handout
320
321 * The tests will test the current state of nova and keystone PLUS this nova
322 change
323
324.. ansi:: images/zsim-04.ans
325
326Zuul Simulation
327===============
328.. transition:: cut
329.. container:: handout
330
331 * todo
332
333.. ansi:: images/zsim-05.ans
334
335Zuul Simulation
336===============
337.. transition:: cut
338.. container:: handout
339
340 * todo
341
342.. ansi:: images/zsim-06.ans
343
344Zuul Simulation
345===============
346.. transition:: cut
347.. container:: handout
348
349 * todo
350
351.. ansi:: images/zsim-07.ans
352
353Zuul Simulation
354===============
355.. transition:: cut
356.. container:: handout
357
358 * todo
359
360.. ansi:: images/zsim-08.ans
361
362Zuul Simulation
363===============
364.. transition:: cut
365.. container:: handout
366
367 * todo
368
369.. ansi:: images/zsim-09.ans
370
371Zuul Simulation
372===============
373.. transition:: cut
374.. container:: handout
375
376 * todo
377
378.. ansi:: images/zsim-10.ans
379
380Zuul Simulation
381===============
382.. transition:: cut
383.. container:: handout
384
385 * todo
386
387.. ansi:: images/zsim-11.ans
388
389Zuul Simulation
390===============
391.. transition:: cut
392.. container:: handout
393
394 * todo
395
396.. ansi:: images/zsim-12.ans
397
398Zuul Simulation
399===============
400.. transition:: cut
401.. container:: handout
402
403 * todo
404
405.. ansi:: images/zsim-13.ans
406
407Zuul Simulation
408===============
409.. transition:: cut
410.. container:: handout
411
412 * todo
413
414.. ansi:: images/zsim-14.ans
415
416Zuul Simulation
417===============
418.. transition:: cut
419.. container:: handout
420
421 * todo
422
423.. ansi:: images/zsim-15.ans
424
425Zuul Simulation
426===============
427.. transition:: cut
428.. container:: handout
429
430 * todo
431
432.. ansi:: images/zsim-16.ans
433
434Zuul Simulation
435===============
436.. transition:: cut
437.. container:: handout
438
439 * todo
440
441.. ansi:: images/zsim-17.ans
442
443Zuul Simulation
444===============
445.. transition:: cut
446.. container:: handout
447
448 * todo
449
450.. ansi:: images/zsim-18.ans
451
452Zuul Simulation
453===============
454.. transition:: cut
455.. container:: handout
456
457 * todo
458
459.. ansi:: images/zsim-19.ans
460
461Zuul Simulation
462===============
463.. transition:: cut
464.. container:: handout
465
466 * todo
467
468.. ansi:: images/zsim-20.ans
469
470Zuul Simulation
471===============
472.. transition:: cut
473.. container:: handout
474
475 * todo
476
477.. ansi:: images/zsim-21.ans
478
479Zuul Simulation
480===============
481.. transition:: cut
482.. container:: handout
483
484 * todo
485
486.. ansi:: images/zsim-22.ans
487
488Zuul Architecture
489=================
490
491.. ansi:: images/architecture.ans
492
493Nodepool
494========
495
496.. container:: handout
497
498 nodepool builds nodes for zuul
499 Remember that 2,000 jobs per hour number?
500 Each job gets a fresh VM - that's 2,000 VMs per hours
501 Treats our 12 regions across 6 clouds as one REALLY big cloud
502
503::
504
505 * A separate program that works very closely with *zuul*
506 * Builds images daily and uploads to clouds
507 * Creates and destroys zero or more VMs for every job
508 * Supports using pre-existing nodes (static provider)
509
510Nodepool can use pre-existing images, BUT ...
511=============================================
512
513 * Clouds have 'helpful' differences between base images
514 * Cloud images have 'helpful' software pre-installed
515 * Distros have 'helpful' different user names
516 * Most clouds use DHCP for networking, but some don't
517 * We can add pre-cached content
518
519Cross-Project Example Problem
520=============================
521
522 * User reports bug in shade - auto_ip is not discovering their NAT properly
523 * Two fixes, one to detection algorithm, one to config override
524 * Config override requires adding support to os-client-config
525 * Once support is added to os-client-config, it can be consumed in shade
526 * How do we integration test this without releasing os-client-config?
527
528Cross-Project Dependencies
529==========================
530
531Testing or gating dependencies (including jobs) manually specified by
532developers
533
534.. container:: progressive
535
536 * shade https://review.openstack.org/513913/
537
538 Add unittest tips jobs
539
540 Change-ID: I5b411be5c5aa43535fa89a51d6099aadd7a8ea60
541 * os-client-config https://review.openstack.org/513915
542
543 Add shade-tox-tips jobs
544
545 Change-ID: Ie3e9a4deca1d74b94e810e87e130706fe15fe2c9
546
547 Depends-On: https://review.openstack.org/513913/
548 * os-client-config https://review.openstack.org/513751/
549
550 Added nat_source flag for networks
551
552 Change-ID: I3d8dd6d734a1013d2d4a43e11c3538c3a345820b
553
554 * shade https://review.openstack.org/#/c/513914
555
556 Add support for configured NAT source variable
557
558 Change-Id: I4b50c2323a487b5ce90f9d38a48be249cfb739c5
559
560 Depends-On: https://review.openstack.org/513914
561
562shade: Add unittest tips jobs
563=============================
564
565* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
566
567.. code:: yaml
568
569 - job:
570 name: shade-tox-py27-tips
571 parent: openstack-tox-py27
572 description: |
573 Run tox python 27 unittests against master of important libs
574 required-projects:
575 - openstack-infra/shade
576 - openstack/keystoneauth
577 - openstack/os-client-config
578
579 - job:
580 name: shade-tox-py35-tips
581 parent: openstack-tox-py35
582 description: |
583 Run tox python 35 unittests against master of important libs
584 required-projects:
585 - openstack-infra/shade
586 - openstack/keystoneauth
587 - openstack/os-client-config
588
589shade: Add unittest tips project-template
590=========================================
591
592* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
593
594.. code:: yaml
595
596 - project-template:
597 name: shade-tox-tips
598 check:
599 jobs:
600 - shade-tox-py27-tips
601 - shade-tox-py35-tips
602 gate:
603 jobs:
604 - shade-tox-py27-tips
605 - shade-tox-py35-tips
606
607shade: Add unittest tips project-template to project
608====================================================
609
610* In git.openstack.org/openstack-infra/shade/.zuul.yaml:
611
612.. code:: yaml
613
614 - project:
615 templates:
616 - publish-to-pypi
617 - publish-openstack-sphinx-docs
618 - shade-tox-tips
619
620os-client-config: Add shade-tox-tips jobs
621=========================================
622
623* In git.openstack.org/openstack/os-client-config/.zuul.yaml:
624
625.. code:: yaml
626
627 - project:
628 templates:
629 - shade-tox-tips
630 check:
631 jobs:
632 - legacy-osc-dsvm-functional-tips:
633 voting: false
634
635os-client-config: Add nat_source flag for networks
636==================================================
637
638::
639
640 diff --git a/os_client_config/cloud_config.py b/os_client_config/cloud_config.py
641 index 2e97629..d1a6983 100644
642 --- a/os_client_config/cloud_config.py
643 +++ b/os_client_config/cloud_config.py
644 @@ -581,3 +581,10 @@ class CloudConfig(object):
645 if net['nat_destination']:
646 return net['name']
647 return None
648 +
649 + def get_nat_source(self):
650 + """Get network used for NAT source."""
651 + for net in self.config['networks']:
652 + if net.get('nat_source'):
653 + return net['name']
654 + return None
655
656shade: Add support for configured NAT source variable
657=====================================================
658
659::
660
661 Zuul 10-21 13:57
662 Patch Set 5: Verified-1
663 Build failed.
664 openstack-tox-pep8 SUCCESS in 2m 29s
665 openstack-tox-py27 FAILURE in 2m 34s
666 build-openstack-releasenotes SUCCESS in 2m 47s
667 openstack-tox-py35 FAILURE in 2m 41s
668 openstack-tox-cover POST_FAILURE in 3m 52s (non-voting)
669 build-openstack-sphinx-docs SUCCESS in 2m 57s
670 shade-tox-py27-tips SUCCESS in 3m 18s
671 shade-tox-py35-tips SUCCESS in 2m 28s
672
673Live Configuration Changes
674==========================
675
676.. container:: handout
677
678 Zuul is a distributed system, with a distributed configuration.
679
680.. code:: yaml
681
682 - tenant:
683 name: openstack
684 source:
685 gerrit:
686 config-projects:
687 - project-config
688 untrusted-projects:
689 - openstack-infra/zuul-jobs:
690 shadow: openstack-infra/project-config
691 - openstack-infra/openstack-zuul-jobs
692 - openstack-infra/nodepool
693 - openstack-infra/shade
694 - openstack-infra/zuul
695 - openstack/requirements
696
697Zuul Startup
698============
699
700* Read config file
701
702Zuul Startup
703============
704
705* Read config file
706* Ask mergers for branches of each repo
707
708.. ansi:: images/startup1.ans
709
710Zuul Startup
711============
712
713* Read config file
714* Ask mergers for branches of each repo
715* Ask mergers for .zuul.yaml file for each branch of each repo
716
717``.zuul.yaml`` can be ``^\.?zuul.yaml$`` file or ``^\.?zuul.d$`` run-parts
718directory.
719
720.. ansi:: images/startup2.ans
721
722When .zuul.yaml Changes
723=======================
724
725.. container:: progressive
726
727 * Zuul looks for changes to .zuul.yaml
728 * Asks mergers for updated content
729 * Splices into configuration used for that change
730 * Works with cross-repo dependencies
731
732 ("This change depends on a change to the job definition")
733
734OpenStack Github Support for Cross Community Testing
735====================================================
736
737 * OpenStack does not use Github, but other people do
738 * Github App "OpenStack Zuul"
739 * App added to github project by project admin
740 * Project aded to OpenStack's main.yaml
741 * Test interactions between OpenStack and important adjacent communities
742 * https://github.com/ansible/ansible/pull/20974
743
744OpenLab for ecosystem testing
745=============================
746
747 * Hey Melvin
748 * Separate from but friendly with Infra
749 * Joint effort by Huawei and Intel
750 * Provides resources and support to test things that consume OpenStack
751 * gophercloud/terraform, ansible/openstack
752
753Cross Source Dependencies
754=========================
755
756.. container:: progressive
757
758 * shade https://review.openstack.org/539563
759
760 Shift voting flag and test_matrix_branch for ansible-devel job
761
762 Change-ID: Ic9d3983de641dbe618c65b2cbf2dcfa3686575df
763
764 * ansible https://github.com/ansible/ansible/pull/34925
765
766 continue fact gathering even without dmidecode
767
768 * ansible https://github.com/ansible/ansible/pull/20974
769
770 Make a generalized OpenStack cloud constructor
771
772 Depends-On: https://review.openstack.org/539563
773 Depends-On: https://github.com/ansible/ansible/pull/34925
774
775Jobs
776====
777
778* Jobs run on nodes from nodepool (static or dynamic)
779* Metadata defined in Zuul's configuration
780* Execution content in Ansible (with live streaming!)
781* Jobs may be defined centrally or in the repo being tested
782* Jobs have contextual variants that simplify configuration
783
784Shared Job Configs
785==================
786
787* Job config repos are all in git
788* Designed to support directly sharing job configurations
789* git.openstack.org/openstack-infra/zuul-jobs repo is a 'standard library'
790 to be directly shared between zuul installations
791
792Job
793===
794
795.. code:: yaml
796
797 - job:
798 name: base
799 parent: null
800 description: |
801 The base job for Zuul.
802 timeout: 1800
803 nodeset:
804 nodes:
805 - name: primary
806 label: centos-7
807 pre-run: playbooks/base/pre.yaml
808 post-run:
809 - playbooks/base/post-ssh.yaml
810 - playbooks/base/post-logs.yaml
811 secrets:
812 - site_logs
813
814Simple Job
815==========
816
817.. code:: yaml
818
819 - job:
820 name: tox
821 pre-run: playbooks/setup-tox.yaml
822 run: playbooks/tox.yaml
823 post-run: playbooks/fetch-tox-output.yaml
824
825 - job:
826 name: tox-py27
827 parent: tox
828 vars:
829 tox_envlist: py27
830
831
832Simple Job Variant
833==================
834
835.. code:: yaml
836
837 - job:
838 name: tox-py27
839 branches: stable/mitaka
840 nodeset:
841 - name: ubuntu-trusty
842 label: ubuntu-trusty
843
844Nodesets for Multi-node Jobs
845============================
846
847.. code:: yaml
848
849 - nodeset:
850 name: ceph-cluster
851 nodes:
852 - name: controller
853 label: centos-7
854 - name: compute1
855 label: fedora-26
856 - name: compute2
857 label: fedora-26
858 groups:
859 - name: ceph-osd
860 nodes:
861 - controller
862 - name: ceph-monitor
863 nodes:
864 - controller
865 - compute1
866 - compute2
867
868Multi-node Job
869==============
870
871* nodesets are provided to Ansible for jobs in inventory
872
873.. code:: yaml
874
875 - job:
876 name: ceph-multinode
877 nodeset: ceph-cluster
878 run: playbooks/install-ceph.yaml
879
880Multi-node Ceph Job Content
881===========================
882
883.. code:: yaml
884
885 - hosts: all
886 roles:
887 - install-ceph
888 - hosts: ceph-osd
889 roles:
890 - start-ceph-osd
891 - hosts: ceph-monitor
892 roles:
893 - start-ceph-monitor
894 - hosts: all
895 roles:
896 - do-something-interesting
897
898Projects
899========
900
901* Projects are git repositories
902* Specify a set of jobs for each pipeline
903* golang git repo naming as been adopted:
904
905::
906
907 zuul@ubuntu-xenial:~$ find /home/zuul/src -mindepth 3 -maxdepth 3 -type d
908 /home/zuul/src/git.openstack.org/openstack-infra/shade
909 /home/zuul/src/git.openstack.org/openstack/keystoneauth
910 /home/zuul/src/git.openstack.org/openstack/os-client-config
911 /home/zuul/src/github.com/ansible/ansible
912
913Project
914=======
915
916.. code:: yaml
917
918 - project:
919 check:
920 jobs:
921 - openstack-tox-py27
922 - openstack-tox-py35
923 - openstack-doc-build
924
925Project with Local Variant
926==========================
927
928.. code:: yaml
929
930 - project:
931 check:
932 jobs:
933 - openstack-tox-py27
934 - openstack-tox-py35
935 - openstack-doc-build
936 - openstack-tox-pypy:
937 voting: false
938
939Project with More Local Variants
940================================
941
942.. code:: yaml
943
944 - project:
945 name: openstack/nova
946 check:
947 jobs:
948 - openstack-tox-py27
949 - openstack-tox-py35
950 - openstack-doc-build:
951 files: '^docs/.*$'
952 - openstack-tox-pypy:
953 voting: false
954
955Project with Many Local Variants
956================================
957
958.. code:: yaml
959
960 - project:
961 name: openstack/nova
962 check:
963 jobs:
964 - openstack-tox-py27
965 nodeset:
966 - name: centos-7
967 label: centos-7
968 - openstack-tox-py27
969 branches: stable/newton
970 nodeset:
971 - name: ubuntu-trusty
972 label: ubuntu-trusty
973 - openstack-doc-build:
974 files: '^docs/.*$'
975 - openstack-tox-pypy:
976 voting: false
977
978Project With Central and Local Config
979=====================================
980
981.. code:: yaml
982
983 # In git.openstack.org/openstack-infra/project-config:
984 - project:
985 name: openstack/nova
986 templates:
987 - openstack-tox-jobs
988
989.. code:: yaml
990
991 # In git.openstack.org/openstack/nova/.zuul.yaml:
992 - project:
993 check:
994 - nova-placement-functional-devstack
995
996Project with Job Dependencies
997=============================
998
999.. code:: yaml
1000
1001 # In git.openstack.org/openstack-infra/project-config:
1002 - project:
1003 name: openstack/nova
1004 release:
1005 jobs:
1006 - build-artifacts
1007 - upload-tarball:
1008 dependencies: build-artifacts
1009 - upload-pypi:
1010 dependencies: build-artifacts
1011 - notify-mirror:
1012 dependencies:
1013 - upload-tarball
1014 - upload-pypi
1015
1016Playbooks
1017=========
1018
1019* Jobs run Ansible playbooks
1020* Playbooks may be defined centrally or in the repo being tested
1021* Playbooks can use roles from current or other Zuul repos
1022 (or Galaxy, coming soon)
1023* Playbooks are run on the zuul-executor using bubblewrap
1024 https://github.com/projectatomic/bubblewrap
1025* Playbooks are not allowed to execute content on 'localhost'
1026
1027Job with Roles
1028==============
1029
1030.. code:: yaml
1031
1032 - job:
1033 name: zuul-integration
1034 description: |
1035 Multi-node Zuul installation and integration test
1036 nodeset: zuul-cluster
1037 roles:
1038 - zuul: openstack-infra/ansible-role-zuul
1039 run: playbooks/zuul-integration
1040
1041Job with Multiple Projects
1042==========================
1043
1044.. code:: yaml
1045
1046 - job:
1047 name: tox-py35-on-zuul
1048 parent: tox-py35
1049 description: |
1050 Run zuul's py35 unittests on patches to zuul-jobs
1051 vars:
1052 zuul_work_dir: src/git.openstack.org/openstack-infra/zuul
1053 required-projects:
1054 - openstack-infra/zuul
1055
1056 - project:
1057 name: openstack-infra/zuul-jobs
1058 check:
1059 jobs:
1060 - tox-py35-on-zuul
1061
1062Devstack-gate / Tempest Playbook
1063================================
1064
1065.. code:: yaml
1066
1067 # devstack-gate / tempest playbook
1068 hosts: all
1069 roles:
1070 - setup-multinode-networking
1071 - partition-swap
1072 - configure-mirrors
1073 - run-devstack
1074 - run-tempest
1075
1076Simple Shell Playbook
1077=====================
1078
1079.. code:: yaml
1080
1081 hosts: controller
1082 tasks:
1083 - shell: ./run_tests.sh
1084
1085Test Like Production
1086====================
1087
1088If you use Ansible for deployment, your test and deployment processes
1089and playbooks are the same
1090
1091What if you don't use Ansible?
1092==============================
1093
1094OpenStack Infra Control Plane uses Puppet
1095=========================================
1096
1097.. code:: yaml
1098
1099 # In git.openstack.org/openstack-infra/project-config/roles/legacy-install-afs-with-puppet/tasks/main.yaml
1100 - name: Install puppet
1101 shell: ./install_puppet.sh
1102 args:
1103 chdir: "{{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/system-config"
1104 environment:
1105 # Skip setting up pip, our images have already done this.
1106 SETUP_PIP: "false"
1107 become: yes
1108
1109 - name: Copy manifest
1110 copy:
1111 src: manifest.pp
1112 dest: "{{ ansible_user_dir }}/manifest.pp"
1113
1114 - name: Run puppet
1115 puppet:
1116 manifest: "{{ ansible_user_dir }}/manifest.pp"
1117 become: yes
1118
1119Secrets
1120=======
1121
1122* Inspired by Kubernetes Secrets API
1123* Projects can add named encrypted secrets to their .zuul.yaml file
1124* Jobs can request to use secrets by name
1125* Jobs using secrets are not reconfigured speculatively
1126* Secrets can only be used by the same project they are defined in
1127* Public key per project:
1128 ``{{ zuul_url }}/{{ tenant }}/{{ project }}.pub``
1129
1130::
1131 GET http://zuul.openstack.org/openstack-infra/shade.pub
1132
1133Secret Example (note, no admins had to enable this)
1134===================================================
1135
1136.. code:: yaml
1137
1138 # In git.openstack.org/openstack/loci/.zuul.yaml:
1139 - secret:
1140 name: loci_docker_login
1141 data:
1142 user: !encrypted/pkcs1-oaep
1143 - r8Nbpq5olmfLF035BZ/CUoFLIdhvBi/49KuochOAHbvns+xMiho3C7MEFzYDqJX3IhHde
1144 BICYOgK7qnyINOIZL2e7pl75rEdHQwJjSFUMkpdY6wEP7f9hpolj9xVp0ifHUVQqPHMRn
1145 zoPFd8MEAHxH5GLmc2SWJ98E/QUqGltxBi1YRSZoCcNtq3tHFK5Y+xQlLhIseJ2HkpDs6
1146 YXOGP9Qt4Va6sdyBcA90H+apSAcYA3Duu962ySZQAsYNui/3NQq3gLA+OZeyTJtcrh4hj
1147 Rb5dBnDWfSrMpxdNkbPXXgbQaxO3T0L4jbaOF8VKEsiI9olBrOeV2M9ddYJjSsHGj4XR8
1148 4vwS0+doB7np93fujiDuHVgdG8R40NW2GznyKRlRtzAORla7Mzw1Y1MokcUyY6p1LlLLl
1149 wUuWYCCEuRciOPhZXQ2u42qju/zrK2/dPnO8HfUINSrN0WbNq14ZwPpbj0ro02oGPbtwu
1150 OTw1z+N0Nc+GuLWlwYJGYM/z0UnvDR3WEBc2kXbVev9w4n0cB3RyphML2PDZZWbw8tjnX
1151 h1VsAOJ0Qo4qq1K/ft95ypd+vtjkfepEgHEBmJNwutJa9IHAkGfrkO9VkpUTPpfffnPwz
1152 d0/zaaadNl6MLQUSutRwY23YIIbv+fmukxw2vnJmvn6abkBlMya7KgtifwNA8c=
1153 password: !encrypted/pkcs1-oaep
1154 - gUEX4eY3JAk/Xt7Evmf/hF7xr6HpNRXTibZjrKTbmI4QYHlzEBrBbHey27Pt/eYvKKeKw
1155 hk8MDQ4rNX7ZK1v+CKTilUfOf4AkKYbe6JFDd4z+zIZ2PAA7ZedO5FY/OnqrG7nhLvQHE
1156 5nQrYwmxRp4O8eU5qG1dSrM9X+bzri8UnsI7URjqmEsIvlUqtybQKB9qQXT4d6mOeaKGE
1157 5h6Ydkb9Zdi4Qh+GpCGDYwHZKu1mBgVK5M1G6NFMy1DYz+4NJNkTRe9J+0TmWhQ/KZSqo
1158 4ck0x7Tb0Nr7hQzV8SxlwkaCTLDzvbiqmsJPLmzXY2jry6QsaRCpthS01vnj47itoZ/7p
1159 taH9CoJ0Gl7AkaxsrDSVjWSjatTQpsy1ub2fuzWHH4ASJFCiu83Lb2xwYts++r8ZSn+mA
1160 hbEs0GzPI6dIWg0u7aUsRWMOB4A+6t2IOJibVYwmwkG8TjHRXxVCLH5sY+i3MR+NicR9T
1161 IZFdY/AyH6vt5uHLQDU35+5n91pUG3F2lyiY5aeMOvBL05p27GTMuixR5ZoHcvSoHHtCq
1162 7Wnk21iHqmv/UnEzqUfXZOque9YP386RBWkshrHd0x3OHUfBK/WrpivxvIGBzGwMr2qAj
1163 /AhJsfDXKBBbhGOGk1u5oBLjeC4SRnAcIVh1+RWzR4/cAhOuy2EcbzxaGb6VTM=
1164
1165Secret Example
1166==============
1167
1168.. code:: yaml
1169
1170 # In git.openstack.org/openstack/loci/.zuul.yaml:
1171 - job:
1172 name: publish-loci-cinder
1173 parent: loci-cinder
1174 post-run: playbooks/push
1175 secrets:
1176 - loci_docker_login
1177
1178 # In git.openstack.org/openstack/loci/playbooks/push.yaml:
1179 - hosts: all
1180 tasks:
1181 - include_vars: vars.yaml
1182
1183 - name: Push project to DockerHub
1184 block:
1185 - command: docker login -u {{ loci_docker_login.user }} -p {{ loci_docker_login.password }}
1186 no_log: True
1187 - command: docker push openstackloci/{{ project }}:{{ branch }}-{{ item.name }}
1188 with_items: "{{ distros }}"
1189
1190Status
1191======
1192
1193* Zuul v3 is in production for OpenStack (in OpenStack VMs)
1194* Zuul v3 also runing at BMW (in OpenShift) and Godaddy (in kuberenetes)
1195 and Huawei's OpenLab.
1196* Software Factory updated to v3
1197 https://softwarefactory-project.io/sf/welcome.html
1198* will tag and release v3.0 once we're satisfied it's good for other people
1199 (within the next few weeks)
1200
1201What's Next?
1202============
1203
1204* shared job doc generation
1205* node providers
1206 * kuberenetes
1207 * OCI/docker
1208 * Mac Stadium (for our Ansible friends)
1209 * ec2
1210* native container/kubernetes job execution
1211
1212Important Links
1213===============
1214
1215* https://zuul-ci.org/
1216* https://git.openstack.org/cgit/openstack-infra/zuul
1217* https://docs.openstack.org/infra/zuul
1218* https://docs.openstack.org/infra/manual/zuulv3.html
1219* https://docs.openstack.org/infra/zuul-jobs/
1220* https://docs.openstack.org/infra/openstack-zuul-jobs/
1221* https://storyboard.openstack.org/#!/project/679
1222* https://storyboard.openstack.org/#!/board/41
1223* freenode:#zuul
1224
1225Questions
1226=========
1227
1228.. ansi:: images/questions.ans
1229
1230Presentty
1231=========
1232.. hidetitle::
1233.. transition:: pan
1234.. figlet:: Presentty
1235
1236* Console presentations written in reStructuredText
1237* Cross-fade, pan, tilt, cut transitions
1238* Figlet, cowsay!
1239* https://pypi.python.org/pypi/presentty
diff --git a/src/infra/start.sh b/src/infra/start.sh
new file mode 100755
index 0000000..9eaf8b6
--- /dev/null
+++ b/src/infra/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 &