@@ -11,57 +11,66 @@ def generate_init(init_path):
11
11
init_path = init_path + '/' + '__init__.py'
12
12
open (init_path , mode = 'a' ).close ()
13
13
14
+
14
15
# generate_csv creates the experiment chartserviceversion manifest
15
16
def generate_csv (csv_parent_path , csv_name , csv_config , litmus_env ):
16
-
17
- csv_filename = csv_parent_path + '/' + csv_name + '.' + 'experiment_chartserviceversion.yaml'
17
+ csv_filename = csv_parent_path + '/' + csv_name + '.chartserviceversion.yaml'
18
18
# Load Jinja2 template
19
- template = litmus_env .get_template ('./templates/experiment_chartserviceversion .tmpl' )
19
+ template = litmus_env .get_template ('./templates/experiment-chartserviceversion .tmpl' )
20
20
output_from_parsed_template = template .render (csv_config )
21
+
21
22
with open (csv_filename , "w" ) as f :
22
23
f .write (output_from_parsed_template )
23
24
25
+
24
26
# generate_csv creates the category chartserviceversion manifest
25
27
def generate_csv_cat (csv_parent_path , csv_name , csv_config , litmus_env ):
26
-
27
- csv_filename = csv_parent_path + '/' + csv_name + '.' + 'category_chartserviceversion.yaml'
28
+ csv_filename = csv_parent_path + '/' + csv_name + '.chartserviceversion.yaml'
28
29
29
30
# Load Jinja2 template
30
- template = litmus_env .get_template ('./templates/category_chartserviceversion .tmpl' )
31
+ template = litmus_env .get_template ('./templates/category-chartserviceversion .tmpl' )
31
32
output_from_parsed_template = template .render (csv_config )
33
+
32
34
with open (csv_filename , "w" ) as f :
33
35
f .write (output_from_parsed_template )
34
36
37
+
35
38
# generate_chart creates the experiment custom resource manifest
36
39
def generate_chart (chart_parent_path , chart_config , litmus_env ):
37
40
chart_filename = chart_parent_path + '/' + 'experiment.yaml'
38
41
39
42
# Load Jinja2 template
40
- template = litmus_env .get_template ('./templates/experiment_custom_resource .tmpl' )
43
+ template = litmus_env .get_template ('./templates/experiment-custom-resource .tmpl' )
41
44
output_from_parsed_template = template .render (chart_config )
45
+
42
46
with open (chart_filename , "w" ) as f :
43
47
f .write (output_from_parsed_template )
44
48
49
+
45
50
# generate_rbac creates the rbac for the experiment
46
51
def generate_rbac (chart_parent_path , chart_config , litmus_env ):
47
52
rbac_filename = chart_parent_path + '/' + 'rbac.yaml'
48
53
49
54
# Load Jinja2 template
50
- template = litmus_env .get_template ('./templates/experiment_rbac .tmpl' )
55
+ template = litmus_env .get_template ('./templates/experiment-rbac .tmpl' )
51
56
output_from_parsed_template = template .render (chart_config )
57
+
52
58
with open (rbac_filename , "w" ) as f :
53
59
f .write (output_from_parsed_template )
54
60
61
+
55
62
# generate_engine creates the chaos engine for the experiment
56
63
def generate_engine (chart_parent_path , chart_config , litmus_env ):
57
64
engine_filename = chart_parent_path + '/' + 'engine.yaml'
58
65
59
66
# Load Jinja2 template
60
- template = litmus_env .get_template ('./templates/experiment_engine .tmpl' )
67
+ template = litmus_env .get_template ('./templates/experiment-engine .tmpl' )
61
68
output_from_parsed_template = template .render (chart_config )
69
+
62
70
with open (engine_filename , "w" ) as f :
63
71
f .write (output_from_parsed_template )
64
72
73
+
65
74
# generate_chaoslib creates the chaosLib for the experiment
66
75
def generate_chaoslib (chaoslib_parent_path , chaoslib_name , chaoslib_config , litmus_env ):
67
76
chaoslib_filename = chaoslib_parent_path + '/' + chaoslib_name + '.py'
@@ -71,12 +80,14 @@ def generate_chaoslib(chaoslib_parent_path, chaoslib_name, chaoslib_config, litm
71
80
# Load Jinja2 template
72
81
template = litmus_env .get_template ('./templates/chaoslib.tmpl' )
73
82
output_from_parsed_template = template .render (chaoslib_config )
83
+
74
84
with open (chaoslib_filename , "w" ) as f :
75
85
f .write (output_from_parsed_template )
76
86
77
87
# generate __init__.py file
78
88
generate_init (chaoslib_parent_path )
79
89
90
+
80
91
# generate_environment creates the environment for the experiment
81
92
def generate_environment (environment_parent_path , environment_config , litmus_env ):
82
93
environment_filename = environment_parent_path + '/environment.py'
@@ -86,12 +97,14 @@ def generate_environment(environment_parent_path, environment_config, litmus_env
86
97
# Load Jinja2 template
87
98
template = litmus_env .get_template ('./templates/environment.tmpl' )
88
99
output_from_parsed_template = template .render (environment_config )
100
+
89
101
with open (environment_filename , "w" ) as f :
90
102
f .write (output_from_parsed_template )
91
103
92
104
# generate __init__.py file
93
105
generate_init (environment_parent_path )
94
106
107
+
95
108
# generate_types creates the types.py for the experiment
96
109
def generate_types (types_parent_path , types_config , litmus_env ):
97
110
types_filename = types_parent_path + '/types.py'
@@ -101,51 +114,60 @@ def generate_types(types_parent_path, types_config, litmus_env):
101
114
# Load Jinja2 template
102
115
template = litmus_env .get_template ('./templates/types.tmpl' )
103
116
output_from_parsed_template = template .render (types_config )
117
+
104
118
with open (types_filename , "w" ) as f :
105
119
f .write (output_from_parsed_template )
106
120
107
121
# generate __init__.py file
108
122
generate_init (types_parent_path )
109
123
124
+
110
125
# generate_k8s_deployment creates the experiment kubernetes deployment manifest
111
126
def generate_k8s_deployment (k8s_parent_path , k8s_config , litmus_env ):
112
127
k8s_filename = k8s_parent_path + '/' + 'test.yml'
113
128
114
129
# Load Jinja2 template
115
- template = litmus_env .get_template ('./templates/experiment_k8s_deployment .tmpl' )
130
+ template = litmus_env .get_template ('./templates/experiment-k8s-deployment .tmpl' )
116
131
output_from_parsed_template = template .render (k8s_config )
132
+
117
133
with open (k8s_filename , "w" ) as f :
118
134
f .write (output_from_parsed_template )
119
135
136
+
120
137
# generate_experiment creates the expriment.py file
121
138
def generate_experiment (experiment_parent_path , experiment_name , experiment_config , litmus_env ):
122
139
experiment_filename = experiment_parent_path + '/' + experiment_name + '.py'
123
140
124
141
# Load Jinja2 template
125
142
template = litmus_env .get_template ('./templates/experiment.tmpl' )
126
143
output_from_parsed_template = template .render (experiment_config )
144
+
127
145
with open (experiment_filename , "w+" ) as f :
128
146
f .write (output_from_parsed_template )
129
147
130
148
# generate __init__.py file
131
149
generate_init (experiment_parent_path )
132
150
151
+
133
152
# generate_package creates the package manifest
134
153
def generate_package (package_parent_path , config , package_name , litmus_env ):
135
154
package_filename = package_parent_path + '/' + package_name + '.package.yaml'
136
155
137
156
# Load Jinja2 template
138
157
template = litmus_env .get_template ('./templates/package.tmpl' )
139
158
output_package = template .render (config )
159
+
140
160
with open (package_filename , "w" ) as f :
141
161
f .write (output_package )
142
162
163
+
143
164
# create_dir create new directory
144
165
def create_dir (path ):
145
166
if os .path .isdir (path ) != True :
146
167
os .makedirs (path )
147
168
148
- def generate_icon (chart_parent_path , litmus_root , image_name , litmus_env ):
169
+
170
+ def generate_icon (chart_parent_path , litmus_root , image_name ):
149
171
src_dir = litmus_root + "/contribute/developer-guide/icons/"
150
172
dst_dir = chart_parent_path + '/' + "icons/"
151
173
create_dir (dst_dir )
@@ -154,6 +176,7 @@ def generate_icon(chart_parent_path, litmus_root, image_name, litmus_env):
154
176
shutil .copy (jpgfile , dst_dir )
155
177
os .rename (dst_dir + '/' + 'k8s.png' , dst_dir + '/' + image_name + '.png' )
156
178
179
+
157
180
def main ():
158
181
159
182
parser = argparse .ArgumentParser ()
@@ -178,17 +201,27 @@ def main():
178
201
# get name and category
179
202
entity_name = config ['name' ]
180
203
category_name = config ['category' ]
204
+
205
+ # Replace underscore (_) with hyphen (-)
206
+ # in entity_name_yaml and category_name_yaml
207
+ # for chart filenames and k8s objects
208
+ # like service-accounts, chart file names etc.
209
+ entity_name_k8s = entity_name .replace ("_" , "-" )
210
+ category_name_k8s = category_name .replace ("_" , "-" )
181
211
182
212
env = Environment (loader = FileSystemLoader ('./' ), trim_blocks = True , lstrip_blocks = True , autoescape = select_autoescape (['yaml' ]))
183
213
184
214
# store the litmus root from bootstrap folder
185
215
litmus_root = os .path .abspath (os .path .join (".." , os .pardir ))
186
216
187
217
# initilise directories
188
- exp_root_dir = litmus_root + '/experiments/' + '/' + config [ 'category' ]
218
+ exp_root_dir = litmus_root + '/experiments/' + '/' + category_name
189
219
create_dir (exp_root_dir )
190
- experiment_root_dir = exp_root_dir + '/' + config ['name' ]
220
+
221
+ experiment_root_dir = exp_root_dir + '/' + entity_name
191
222
create_dir (experiment_root_dir )
223
+
224
+ # Generate init files
192
225
generate_init (exp_root_dir )
193
226
194
227
# if generate_type is chart, only generate the chart(top)-level CSV & package manifests
@@ -201,21 +234,21 @@ def main():
201
234
if chartType == "category" or chartType == "all" :
202
235
203
236
# generate icon for category
204
- generate_icon (chart_dir , litmus_root , category_name , env )
237
+ generate_icon (chart_dir , litmus_root , category_name_k8s )
205
238
206
239
# generate category chartserviceversion
207
- generate_csv_cat (chart_dir , category_name , config , env )
240
+ generate_csv_cat (chart_dir , category_name_k8s , config , env )
208
241
209
242
# generate package
210
- generate_package (chart_dir , config , category_name , env )
243
+ generate_package (chart_dir , config , category_name_k8s , env )
211
244
212
245
if chartType == "experiment" or chartType == "all" :
213
246
214
247
# generate icon for category
215
- generate_icon (chart_dir , litmus_root , entity_name , env )
248
+ generate_icon (chart_dir , litmus_root , entity_name_k8s )
216
249
217
250
# generate experiment charts
218
- generate_csv (chart_dir , entity_name , config , env )
251
+ generate_csv (chart_dir , entity_name_k8s , config , env )
219
252
220
253
# generate experiment-custom-resource
221
254
generate_chart (chart_dir , config , env )
@@ -245,13 +278,13 @@ def main():
245
278
generate_init (experiment_root_dir )
246
279
247
280
# initialise chaosLib, environment and types directory
248
- chaoslib_dir = litmus_root + '/chaosLib/litmus/' + config [ 'name' ] + '/lib'
249
- environment_dir = litmus_root + '/pkg/' + config [ 'category' ] + '/environment'
250
- types_dir = litmus_root + '/pkg/' + config [ 'category' ] + '/types'
281
+ chaoslib_dir = litmus_root + '/chaosLib/litmus/' + entity_name + '/lib'
282
+ environment_dir = litmus_root + '/pkg/' + category_name + '/environment'
283
+ types_dir = litmus_root + '/pkg/' + category_name + '/types'
251
284
252
285
# create and generate __init__.py file in chaosLib experiment dir
253
- create_dir (litmus_root + '/chaosLib/litmus/' + config [ 'name' ] )
254
- generate_init (litmus_root + '/chaosLib/litmus/' + config [ 'name' ] )
286
+ create_dir (litmus_root + '/chaosLib/litmus/' + entity_name )
287
+ generate_init (litmus_root + '/chaosLib/litmus/' + entity_name )
255
288
256
289
# generate experiment.py
257
290
generate_experiment (experiment_dir , entity_name , config , env )
@@ -268,7 +301,7 @@ def main():
268
301
# generate k8s deployment
269
302
generate_k8s_deployment (test_dir , config , env )
270
303
271
- generate_init (litmus_root + '/pkg/' + config [ 'category' ] )
304
+ generate_init (litmus_root + '/pkg/' + category_name )
272
305
273
306
print ("experiment created successfully" )
274
307
else :
0 commit comments