Skip to content

Commit cb7980c

Browse files
vivekkumar-gitVivek Kumar
and
Vivek Kumar
authored
Updated chart templates to remove requirement of replacing underscore with hyphen in generated charts (#49)
Signed-off-by: Vivek Kumar <[email protected]> Co-authored-by: Vivek Kumar <[email protected]>
1 parent bb1147e commit cb7980c

12 files changed

+112
-70
lines changed

Diff for: README.md

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ To know more about LitmusChaos experiments [refer](https://litmuschaos.github.io
3939
- Now fork and clone [chaos-charts](https://github.com/litmuschaos/chaos-charts), Enter into [workflow](https://github.com/litmuschaos/chaos-charts/tree/master/workflows) directory.
4040
- Enter into `charts` directory to add charts which has been generated using sdk, for [reference](https://github.com/litmuschaos/chaos-charts/tree/master/charts/cassandra)
4141
- Enter into `workflow` directory and add workflow manifests for [reference](https://github.com/litmuschaos/chaos-charts/tree/master/workflows/podtato-head)
42-
- **Note**: Update `sample_category` and `sample_exec_chaos` to `sample-category` and `sample-exec-chaos` inside manifest in every chart name while updating chaos-charts. Example: `sample_category.package.yaml` to `sample-category.package.yaml`
4342
- Connect your Git repository with chaos-center [ChaosHub](https://docs.litmuschaos.io/docs/concepts/chaoshub/)
4443
- Workflow can be added as a predefined workflow in Github and users can test by following the given steps:
4544
- Fork and clone [chaos-charts](https://github.com/litmuschaos/chaos-charts), now Enter into [workflow](https://github.com/litmuschaos/chaos-charts/tree/master/workflows) directory.

Diff for: contribute/developer-guide/README.md

+3-4
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,9 @@ scaffolded files consist of placeholders which can then be filled as desired.
145145
$ ls -ltr sample_category/charts
146146
147147
total 24
148-
-rw-rw-r-- 1 oumkale oumkale 144 Jul 7 18:48 sample_category.package.yaml
149-
-rw-rw-r-- 1 oumkale oumkale 848 Jul 7 18:48 sample_category.category_chartserviceversion.yaml
150-
-rw-rw-r-- 1 oumkale oumkale 989 Jul 7 18:48 sample_exec_chaos.experiment_chartserviceversion.yaml
148+
-rw-rw-r-- 1 oumkale oumkale 144 Jul 7 18:48 sample-category.package.yaml
149+
-rw-rw-r-- 1 oumkale oumkale 848 Jul 7 18:48 sample-category.chartserviceversion.yaml
150+
-rw-rw-r-- 1 oumkale oumkale 989 Jul 7 18:48 sample-exec-chaos.chartserviceversion.yaml
151151
-rw-rw-r-- 1 oumkale oumkale 1540 Jul 7 18:48 experiment.yaml
152152
-rw-rw-r-- 1 oumkale oumkale 1224 Jul 7 18:48 rbac.yaml
153153
-rw-rw-r-- 1 oumkale oumkale 731 Jul 7 18:48 engine.yaml
@@ -220,7 +220,6 @@ Follow the steps provided below to setup okteto & test the experiment execution.
220220
This should take you to the bash prompt on the dev container into which the content of the litmus-python repo is loaded.
221221

222222
- Note :
223-
- Replace `_` in chart manifest with `-` ex: sample_category to sample-category. Don't replace in directory name.
224223
- Add packages routes for all the files which are generated from sdk in `setup.py` before creating image.
225224
example :
226225
```

Diff for: contribute/developer-guide/generate_experiment.py

+57-24
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,66 @@ def generate_init(init_path):
1111
init_path = init_path + '/' + '__init__.py'
1212
open(init_path, mode='a').close()
1313

14+
1415
# generate_csv creates the experiment chartserviceversion manifest
1516
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'
1818
# Load Jinja2 template
19-
template = litmus_env.get_template('./templates/experiment_chartserviceversion.tmpl')
19+
template = litmus_env.get_template('./templates/experiment-chartserviceversion.tmpl')
2020
output_from_parsed_template = template.render(csv_config)
21+
2122
with open(csv_filename, "w") as f:
2223
f.write(output_from_parsed_template)
2324

25+
2426
# generate_csv creates the category chartserviceversion manifest
2527
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'
2829

2930
# Load Jinja2 template
30-
template = litmus_env.get_template('./templates/category_chartserviceversion.tmpl')
31+
template = litmus_env.get_template('./templates/category-chartserviceversion.tmpl')
3132
output_from_parsed_template = template.render(csv_config)
33+
3234
with open(csv_filename, "w") as f:
3335
f.write(output_from_parsed_template)
3436

37+
3538
# generate_chart creates the experiment custom resource manifest
3639
def generate_chart(chart_parent_path, chart_config, litmus_env):
3740
chart_filename = chart_parent_path + '/' + 'experiment.yaml'
3841

3942
# 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')
4144
output_from_parsed_template = template.render(chart_config)
45+
4246
with open(chart_filename, "w") as f:
4347
f.write(output_from_parsed_template)
4448

49+
4550
# generate_rbac creates the rbac for the experiment
4651
def generate_rbac(chart_parent_path, chart_config, litmus_env):
4752
rbac_filename = chart_parent_path + '/' + 'rbac.yaml'
4853

4954
# Load Jinja2 template
50-
template = litmus_env.get_template('./templates/experiment_rbac.tmpl')
55+
template = litmus_env.get_template('./templates/experiment-rbac.tmpl')
5156
output_from_parsed_template = template.render(chart_config)
57+
5258
with open(rbac_filename, "w") as f:
5359
f.write(output_from_parsed_template)
5460

61+
5562
# generate_engine creates the chaos engine for the experiment
5663
def generate_engine(chart_parent_path, chart_config, litmus_env):
5764
engine_filename = chart_parent_path + '/' + 'engine.yaml'
5865

5966
# Load Jinja2 template
60-
template = litmus_env.get_template('./templates/experiment_engine.tmpl')
67+
template = litmus_env.get_template('./templates/experiment-engine.tmpl')
6168
output_from_parsed_template = template.render(chart_config)
69+
6270
with open(engine_filename, "w") as f:
6371
f.write(output_from_parsed_template)
6472

73+
6574
# generate_chaoslib creates the chaosLib for the experiment
6675
def generate_chaoslib(chaoslib_parent_path, chaoslib_name, chaoslib_config, litmus_env):
6776
chaoslib_filename = chaoslib_parent_path + '/' + chaoslib_name + '.py'
@@ -71,12 +80,14 @@ def generate_chaoslib(chaoslib_parent_path, chaoslib_name, chaoslib_config, litm
7180
# Load Jinja2 template
7281
template = litmus_env.get_template('./templates/chaoslib.tmpl')
7382
output_from_parsed_template = template.render(chaoslib_config)
83+
7484
with open(chaoslib_filename, "w") as f:
7585
f.write(output_from_parsed_template)
7686

7787
# generate __init__.py file
7888
generate_init(chaoslib_parent_path)
7989

90+
8091
# generate_environment creates the environment for the experiment
8192
def generate_environment(environment_parent_path, environment_config, litmus_env):
8293
environment_filename = environment_parent_path + '/environment.py'
@@ -86,12 +97,14 @@ def generate_environment(environment_parent_path, environment_config, litmus_env
8697
# Load Jinja2 template
8798
template = litmus_env.get_template('./templates/environment.tmpl')
8899
output_from_parsed_template = template.render(environment_config)
100+
89101
with open(environment_filename, "w") as f:
90102
f.write(output_from_parsed_template)
91103

92104
# generate __init__.py file
93105
generate_init(environment_parent_path)
94106

107+
95108
# generate_types creates the types.py for the experiment
96109
def generate_types(types_parent_path, types_config, litmus_env):
97110
types_filename = types_parent_path + '/types.py'
@@ -101,51 +114,60 @@ def generate_types(types_parent_path, types_config, litmus_env):
101114
# Load Jinja2 template
102115
template = litmus_env.get_template('./templates/types.tmpl')
103116
output_from_parsed_template = template.render(types_config)
117+
104118
with open(types_filename, "w") as f:
105119
f.write(output_from_parsed_template)
106120

107121
# generate __init__.py file
108122
generate_init(types_parent_path)
109123

124+
110125
# generate_k8s_deployment creates the experiment kubernetes deployment manifest
111126
def generate_k8s_deployment(k8s_parent_path, k8s_config, litmus_env):
112127
k8s_filename = k8s_parent_path + '/' + 'test.yml'
113128

114129
# 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')
116131
output_from_parsed_template = template.render(k8s_config)
132+
117133
with open(k8s_filename, "w") as f:
118134
f.write(output_from_parsed_template)
119135

136+
120137
# generate_experiment creates the expriment.py file
121138
def generate_experiment(experiment_parent_path, experiment_name, experiment_config, litmus_env):
122139
experiment_filename = experiment_parent_path + '/' + experiment_name + '.py'
123140

124141
# Load Jinja2 template
125142
template = litmus_env.get_template('./templates/experiment.tmpl')
126143
output_from_parsed_template = template.render(experiment_config)
144+
127145
with open(experiment_filename, "w+") as f:
128146
f.write(output_from_parsed_template)
129147

130148
# generate __init__.py file
131149
generate_init(experiment_parent_path)
132150

151+
133152
# generate_package creates the package manifest
134153
def generate_package(package_parent_path, config, package_name, litmus_env):
135154
package_filename = package_parent_path + '/' + package_name + '.package.yaml'
136155

137156
# Load Jinja2 template
138157
template = litmus_env.get_template('./templates/package.tmpl')
139158
output_package = template.render(config)
159+
140160
with open(package_filename, "w") as f:
141161
f.write(output_package)
142162

163+
143164
# create_dir create new directory
144165
def create_dir(path):
145166
if os.path.isdir(path) != True:
146167
os.makedirs(path)
147168

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):
149171
src_dir = litmus_root + "/contribute/developer-guide/icons/"
150172
dst_dir = chart_parent_path + '/' + "icons/"
151173
create_dir(dst_dir)
@@ -154,6 +176,7 @@ def generate_icon(chart_parent_path, litmus_root, image_name, litmus_env):
154176
shutil.copy(jpgfile, dst_dir)
155177
os.rename(dst_dir + '/' + 'k8s.png', dst_dir + '/' + image_name +'.png')
156178

179+
157180
def main():
158181

159182
parser = argparse.ArgumentParser()
@@ -178,17 +201,27 @@ def main():
178201
# get name and category
179202
entity_name = config['name']
180203
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("_", "-")
181211

182212
env = Environment(loader = FileSystemLoader('./'), trim_blocks=True, lstrip_blocks=True, autoescape=select_autoescape(['yaml']))
183213

184214
# store the litmus root from bootstrap folder
185215
litmus_root = os.path.abspath(os.path.join("..", os.pardir))
186216

187217
# initilise directories
188-
exp_root_dir = litmus_root + '/experiments/' + '/' + config['category']
218+
exp_root_dir = litmus_root + '/experiments/' + '/' + category_name
189219
create_dir(exp_root_dir)
190-
experiment_root_dir = exp_root_dir + '/' + config['name']
220+
221+
experiment_root_dir = exp_root_dir + '/' + entity_name
191222
create_dir(experiment_root_dir)
223+
224+
# Generate init files
192225
generate_init(exp_root_dir)
193226

194227
# if generate_type is chart, only generate the chart(top)-level CSV & package manifests
@@ -201,21 +234,21 @@ def main():
201234
if chartType == "category" or chartType == "all":
202235

203236
# generate icon for category
204-
generate_icon(chart_dir, litmus_root, category_name, env)
237+
generate_icon(chart_dir, litmus_root, category_name_k8s)
205238

206239
# generate category chartserviceversion
207-
generate_csv_cat(chart_dir, category_name, config, env)
240+
generate_csv_cat(chart_dir, category_name_k8s, config, env)
208241

209242
# generate package
210-
generate_package(chart_dir, config, category_name, env)
243+
generate_package(chart_dir, config, category_name_k8s, env)
211244

212245
if chartType == "experiment" or chartType == "all":
213246

214247
# generate icon for category
215-
generate_icon(chart_dir, litmus_root, entity_name, env)
248+
generate_icon(chart_dir, litmus_root, entity_name_k8s)
216249

217250
# generate experiment charts
218-
generate_csv(chart_dir, entity_name, config, env)
251+
generate_csv(chart_dir, entity_name_k8s, config, env)
219252

220253
# generate experiment-custom-resource
221254
generate_chart(chart_dir, config, env)
@@ -245,13 +278,13 @@ def main():
245278
generate_init(experiment_root_dir)
246279

247280
# 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'
251284

252285
# 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)
255288

256289
# generate experiment.py
257290
generate_experiment(experiment_dir, entity_name, config, env)
@@ -268,7 +301,7 @@ def main():
268301
# generate k8s deployment
269302
generate_k8s_deployment(test_dir, config, env)
270303

271-
generate_init(litmus_root + '/pkg/' + config['category'])
304+
generate_init(litmus_root + '/pkg/' + category_name)
272305

273306
print("experiment created successfully")
274307
else:
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
apiVersion: litmuchaos.io/v1alpha1
22
kind: ChartServiceVersion
33
metadata:
4-
name: {{ category }}
4+
name: {{ category | replace("_", "-") }}
55
version: {{ version }}
66
annotations:
7-
categories: {{ category }}
7+
categories: {{ category | replace("_", "-") }}
88
spec:
9-
displayName: {{ ccategory }} chaos
9+
displayName: {{ category | replace("_", "-") }} chaos
1010
categoryDescription: >
1111
{{ description }}
1212
experiments:
13-
- {{ name }}
13+
- {{ name | replace("_", "-") }}
1414
keywords:
1515
{%- for key in keywords %}
1616
- "{{ key }}"
1717
{%- endfor %}
1818
maintainers:
1919
{%- for i in maintainers %}
20-
- name: {{- i.name }}
21-
email: {{- i.email }}
20+
- name: {{ i.name }}
21+
email: {{ i.email }}
2222
{%- endfor %}
2323
minKubeVersion: {{ minkubernetesversion }}
2424
provider:
2525
name: {{ provider.name }}
2626
links:
2727
{%- for ref in references %}
28-
- name: {{- ref.name }}
29-
url: {{- ref.url }}
28+
- name: {{ ref.name }}
29+
url: {{ ref.url }}
3030
{%- endfor %}
3131
icon:
3232
- url:
3333
mediatype: ""
34-
chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/{{ category }}/experiments.yaml
34+
chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/{{ category | replace("_", "-") }}/experiments.yaml

Diff for: contribute/developer-guide/templates/environment.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import pkg.maths.maths as maths
55

66
#GetENV fetches all the env variables from the runner pod
77
def GetENV(experimentDetails):
8-
experimentDetails.ExperimentName = os.getenv("EXPERIMENT_NAME", "pod-delete")
8+
experimentDetails.ExperimentName = os.getenv("EXPERIMENT_NAME", "{{ name | replace("_", "-") }}")
99
experimentDetails.ChaosNamespace = os.getenv("CHAOS_NAMESPACE", "litmus")
1010
experimentDetails.EngineName = os.getenv("CHAOSENGINE", "")
1111
experimentDetails.ChaosDuration = maths.atoi(os.getenv("TOTAL_CHAOS_DURATION", "30"))
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
apiVersion: litmuchaos.io/v1alpha1
22
kind: ChartServiceVersion
33
metadata:
4-
name: {{ name }}
4+
name: {{ name | replace("_", "-") }}
55
version: {{ version }}
66
annotations:
7-
categories: {{ category }}
7+
categories: {{ category | replace("_", "-") }}
88
spec:
9-
displayName: {{ name }}
9+
displayName: {{ name | replace("_", "-") }}
1010
categoryDescription: >
1111
{{ description }}
1212
keywords:
@@ -20,8 +20,8 @@ spec:
2020
maturity: {{ maturity }}
2121
maintainers:
2222
{%- for i in maintainers %}
23-
- name: {{- i.name }}
24-
email: {{- i.email }}
23+
- name: {{ i.name }}
24+
email: {{ i.email }}
2525
{%- endfor %}
2626
minKubeVersion: {{ minkubernetesversion }}
2727
provider:
@@ -31,10 +31,10 @@ spec:
3131
app.kubernetes.io/version: latest
3232
links:
3333
{%- for ref in references %}
34-
- name: {{- ref.name }}
35-
url: {{- ref.url }}
34+
- name: {{ ref.name }}
35+
url: {{ ref.url }}
3636
{%- endfor %}
3737
icon:
3838
- url:
3939
mediatype: ""
40-
chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/{{ category }}/{{ name }}/experiment.yaml
40+
chaosexpcrdlink: https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/{{ category | replace("_", "-") }}/{{ name | replace("_", "-") }}/experiment.yaml

0 commit comments

Comments
 (0)