-
Notifications
You must be signed in to change notification settings - Fork 11
/
batou3-notes
160 lines (75 loc) · 3.32 KB
/
batou3-notes
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
programmatische definition des environments während
der (konvergenten) configure phase
entdecken neuer hosts
- hosts sind komponenten die selbst verbindungen repräsentieren
- komponenten können stellvertreter woanders hin sein
- fakten und daten zum kontroller übertragen
- übergreifende skripte die nicht nur lokale logik haben
- was ist das top-level ... ein environment?
- oder ist 'deploy' nur ein task und environments
fallen als konzept weg? oder als aspekt eines tasks? (tue X in environment bla),
d.h. ein (task) deployment wird von einem
skript konstruiert mit model und environment
als input
- komponente die daten irgendwo hinliefert ("fetch")
- ordering nicht nur am tree (siehe host configure)
- komponenten abstrahieren eine verify/update/cmd syntax
- je nach top-komponente
- workdirs und komponenten sind interessant: wann gibt es ein workdir und wann nicht?
- implizite workdirs verorten das batou mit seinem ~batou/deployment ziel
- explizite workdirs (für die es defaults gibt) wären interessant
- konfigurations-konvergenz mit reaktion auf die faktenlage:
- tree muss gebaut werden, daran die fakten angefüttert
- wenn die fakten sich ändern und jmd zugegriffen hat (hierarchiches/globbing?) dann fakten wieder updaten und
- fakten als generischere variante von provide/require?
- was ist die einheitliche API im tree und wie variieren wir? procurves können bestimmte sachen ja nicht so einfach
- task typen: ssh (single), pssh, query, grep, find, download ...
- controller als daemon (der connections haelt und neu aufbaut, cli als wrapper
- automatischer shutdown des controllers nach x zeit inaktivität in bestimmten situationen
- controller hält das modell (nicht der erste host) aber wir führen code aus der daten erzeugt und nach lokal überträgt um das modell einheitlich zu halten und übergreifende entscheidungen coden zu können (wir wollen ja fakten remote einsammeln und dann lokal zu einem modell zusammenziehen)
- nicht per sub-classing sonder per decorator
- was sind die obereinheiten die wir haben?
(subject, predicate, object ... )
| | |
connection policy component
@task
class Deploy(object):
@subject
@component
class Foobar(object):
def configure()
def verify()
def update()
- wie kann man komponenten-übergreifende sachen ausdrücken?
@ensure
def everything_is_up
@do
def deploy():
@define
def
@get
class Foo(object):
def ensure(self):
...
- "lockfile" pro user@host um eine ressource zu markieren, dass sie von einer anderen controller-instanz (z.b. local user vs. pipeline) benutzt wird
- sinnvolle lernkurve?
- kann ich mit einer einzelnen Instanz (local) anfangen und das dann immer komplizierter machen?
-> instanz an remote host
-> host an environment
-> environment an pipeline
- ohne brüche in den konzepten beim verkomplizieren?
-- model --
class Frontend(Host):
def configure(self):
self += Nginx()
self += Foobar()
self += Blubble()
-- environment --
map Frontend Component/role to
-- deploy.py task ---
-- backup.py task --
class Foobar(ProcurveSwitch):
def configure(self):
for x in range(1, 10):
# tools für einfacheres hostname-templating
host = Host(f'foobar{x}')