9140b0b16d74e9c329b77a8a7f8273ca6586bb97
[osm/devops.git] /
1 #######################################################################################
2 # Copyright ETSI Contributors and Others.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 #    http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13 # implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #######################################################################################
17
18 apiVersion: argoproj.io/v1alpha1
19 kind: WorkflowTemplate
20 metadata:
21   name: cluster-management-wft
22   namespace: osm-workflows
23 spec:
24   templates:
25
26   # Create a PaaS cluster using CrossPlane (any cloud)
27   - name: create-crossplane-cluster
28     inputs:
29       parameters:
30       # Volumes with cloned repos
31       - name: fleet_volume_name
32       - name: fleet_mount_path
33         value: "/fleet"
34       - name: sw_catalogs_volume_name
35       - name: sw_catalogs_mount_path
36         value: "/sw-catalogs"
37
38       # Specific parameters
39       - name: cluster_kustomization_name
40       - name: cluster_name
41       ## As of today, one among `aks`, `eks` or `gke`:
42       - name: cluster_type
43       - name: providerconfig_name
44       - name: vm_size
45       - name: node_count
46       - name: cluster_location
47       - name: k8s_version
48       - name: public_key_mgmt
49       - name: public_key_new_cluster
50       - name: secret_name_private_age_key_for_new_cluster
51       - name: key_name_in_secret
52         value: "agekey"
53       - name: fleet_repo_url
54       - name: sw_catalogs_repo_url
55       - name: mgmt_project_name
56         value: "osm_admin"
57       ## Do we want to skip OSM's bootstrap?
58       - name: skip_bootstrap
59         value: "false"
60       ## AKS only (otherwise, empty)
61       - name: rg_name
62         values: ""
63       ## GKE only (otherwise, empty)
64       - name: preemptible_nodes
65         values: "false"
66       # Other parameters - Recommended to keep defaults
67       - name: mgmt_cluster_name
68         value: "_management"
69       - name: base_templates_path
70         value: "cloud-resources"
71       - name: cloned_fleet_folder_name
72         value: "fleet-osm"
73       - name: cloned_sw_catalogs_folder_name
74         value: "sw-catalogs-osm"
75       # Debug?
76       - name: debug
77         value: "false"
78
79     container:
80       image: opensourcemano/osm-krm-functions:testing-daily
81       # imagePullPolicy: Always
82       env:
83       - name: PRIVATE_KEY_NEW_CLUSTER
84         valueFrom:
85           secretKeyRef:
86             name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
87             key: "{{inputs.parameters.key_name_in_secret}}"
88       - name: DEBUG
89         value: "{{inputs.parameters.debug}}"
90       command: ["/app/scripts/entrypoint.sh"]
91       args:
92       - create_crossplane_cluster
93       - "{{inputs.parameters.cluster_kustomization_name}}"
94       - "{{inputs.parameters.cluster_name}}"
95       - "{{inputs.parameters.cluster_type}}"
96       - "{{inputs.parameters.providerconfig_name}}"
97       - "{{inputs.parameters.vm_size}}"
98       - "{{inputs.parameters.node_count}}"
99       - "{{inputs.parameters.cluster_location}}"
100       - "{{inputs.parameters.k8s_version}}"
101       - "{{inputs.parameters.public_key_mgmt}}"
102       - "{{inputs.parameters.public_key_new_cluster}}"
103       - ''
104       - "{{inputs.parameters.rg_name}}"
105       - "{{inputs.parameters.preemptible_nodes}}"
106       - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
107       - "{{inputs.parameters.fleet_repo_url}}"
108       - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
109       - "{{inputs.parameters.sw_catalogs_repo_url}}"
110       - "{{inputs.parameters.skip_bootstrap}}"
111       - "{{inputs.parameters.mgmt_project_name}}"
112       - "{{inputs.parameters.mgmt_cluster_name}}"
113       - "{{inputs.parameters.base_templates_path}}"
114
115       volumeMounts:
116       - name: fleet-repo-volume
117         mountPath: '{{inputs.parameters.fleet_mount_path}}'
118       - name: sw-catalogs-repo-volume
119         mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
120     volumes:
121       - name: fleet-repo-volume
122         persistentVolumeClaim:
123           claimName: '{{inputs.parameters.fleet_volume_name}}'
124       - name: sw-catalogs-repo-volume
125         persistentVolumeClaim:
126           claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
127     securityContext:
128       runAsUser: 10000
129     #   runAsGroup: 10000
130     #   fsGroup: 10000
131
132
133   # Update a PaaS cluster created using CrossPlane (any cloud)
134   - name: update-crossplane-cluster
135     inputs:
136       parameters:
137       # Volumes with cloned repos
138       - name: fleet_volume_name
139       - name: fleet_mount_path
140         value: "/fleet"
141       - name: sw_catalogs_volume_name
142       - name: sw_catalogs_mount_path
143         value: "/sw-catalogs"
144
145       # Specific parameters
146       - name: cluster_kustomization_name
147       - name: cluster_name
148       ## As of today, one among `aks`, `eks` or `gke`:
149       - name: cluster_type
150       - name: providerconfig_name
151       - name: vm_size
152       - name: node_count
153       - name: cluster_location
154       - name: k8s_version
155       - name: public_key_mgmt
156       - name: public_key_new_cluster
157       - name: secret_name_private_age_key_for_new_cluster
158       - name: key_name_in_secret
159         value: "agekey"
160       - name: fleet_repo_url
161       - name: sw_catalogs_repo_url
162       - name: mgmt_project_name
163         value: "osm_admin"
164       ## AKS only (otherwise, empty)
165       - name: rg_name
166         values: ""
167       ## GKE only (otherwise, empty)
168       - name: preemptible_nodes
169         values: "false"
170       # Other parameters - Recommended to keep defaults
171       - name: mgmt_cluster_name
172         value: "_management"
173       - name: base_templates_path
174         value: "cloud-resources"
175       - name: cloned_fleet_folder_name
176         value: "fleet-osm"
177       - name: cloned_sw_catalogs_folder_name
178         value: "sw-catalogs-osm"
179       # Debug?
180       - name: debug
181         value: "false"
182
183     container:
184       image: opensourcemano/osm-krm-functions:testing-daily
185       # imagePullPolicy: Always
186       env:
187       - name: PRIVATE_KEY_NEW_CLUSTER
188         valueFrom:
189           secretKeyRef:
190             name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
191             key: "{{inputs.parameters.key_name_in_secret}}"
192       - name: DEBUG
193         value: "{{inputs.parameters.debug}}"
194       command: ["/app/scripts/entrypoint.sh"]
195       args:
196       - update_crossplane_cluster
197       - "{{inputs.parameters.cluster_kustomization_name}}"
198       - "{{inputs.parameters.cluster_name}}"
199       - "{{inputs.parameters.cluster_type}}"
200       - "{{inputs.parameters.providerconfig_name}}"
201       - "{{inputs.parameters.vm_size}}"
202       - "{{inputs.parameters.node_count}}"
203       - "{{inputs.parameters.cluster_location}}"
204       - "{{inputs.parameters.k8s_version}}"
205       - "{{inputs.parameters.public_key_mgmt}}"
206       - "{{inputs.parameters.public_key_new_cluster}}"
207       - ''
208       - "{{inputs.parameters.rg_name}}"
209       - "{{inputs.parameters.preemptible_nodes}}"
210       - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
211       - "{{inputs.parameters.fleet_repo_url}}"
212       - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
213       - "{{inputs.parameters.sw_catalogs_repo_url}}"
214       ## Note that during upgrades, OSM's bootstrap is avoided:
215       - "true"
216       - "{{inputs.parameters.mgmt_project_name}}"
217       - "{{inputs.parameters.mgmt_cluster_name}}"
218       - "{{inputs.parameters.base_templates_path}}"
219
220       volumeMounts:
221       - name: fleet-repo-volume
222         mountPath: '{{inputs.parameters.fleet_mount_path}}'
223       - name: sw-catalogs-repo-volume
224         mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
225     volumes:
226       - name: fleet-repo-volume
227         persistentVolumeClaim:
228           claimName: '{{inputs.parameters.fleet_volume_name}}'
229       - name: sw-catalogs-repo-volume
230         persistentVolumeClaim:
231           claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
232     securityContext:
233       runAsUser: 10000
234     #   runAsGroup: 10000
235     #   fsGroup: 10000
236
237
238   # Bootstrap remote cluster running in **ANY cloud**
239   - name: bootstrap-remote-cluster
240     inputs:
241       parameters:
242       # Volumes with cloned repos
243       - name: fleet_volume_name
244       - name: fleet_mount_path
245         value: "/fleet"
246       - name: sw_catalogs_volume_name
247       - name: sw_catalogs_mount_path
248         value: "/sw-catalogs"
249
250       # Specific parameters
251       - name: cluster_name
252       - name: cluster_kustomization_name
253       - name: public_key_mgmt
254       - name: public_key_new_cluster
255       - name: secret_name_private_age_key_for_new_cluster
256       - name: key_name_in_secret
257         value: "agekey"
258       - name: fleet_repo_url
259       - name: sw_catalogs_repo_url
260
261       # Other parameters - Recommended to keep defaults
262       - name: mgmt_project_name
263         value: "osm_admin"
264       - name: imported_cluster
265         value: "false"
266       - name: fleet_repo_dir
267         value: "/fleet/fleet-osm/"
268       - name: sw_catalogs_repo_dir
269         value: "/sw-catalogs/sw-catalogs-osm/"
270
271       # Debug/dry run?
272       - name: debug
273         value: "false"
274
275     container:
276       image: opensourcemano/osm-krm-functions:testing-daily
277       # imagePullPolicy: Always
278       env:
279       - name: PRIVATE_KEY_NEW_CLUSTER
280         valueFrom:
281           secretKeyRef:
282             name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
283             key: "{{inputs.parameters.key_name_in_secret}}"
284       - name: DEBUG
285         value: "{{inputs.parameters.debug}}"
286       command: ["/app/scripts/entrypoint.sh"]
287       args:
288       - create_bootstrap_for_remote_cluster
289       - "{{inputs.parameters.cluster_name}}"
290       - "{{inputs.parameters.cluster_kustomization_name}}"
291       - "{{inputs.parameters.fleet_repo_dir}}"
292       - "{{inputs.parameters.sw_catalogs_repo_dir}}"
293       - "{{inputs.parameters.fleet_repo_url}}"
294       - "{{inputs.parameters.sw_catalogs_repo_url}}"
295       - "{{inputs.parameters.mgmt_project_name}}"
296       - "{{inputs.parameters.public_key_mgmt}}"
297       - "{{inputs.parameters.public_key_new_cluster}}"
298       - ''
299       - "{{inputs.parameters.imported_cluster}}"
300       volumeMounts:
301       - name: fleet-repo-volume
302         mountPath: '{{inputs.parameters.fleet_mount_path}}'
303       - name: sw-catalogs-repo-volume
304         mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
305     volumes:
306       - name: fleet-repo-volume
307         persistentVolumeClaim:
308           claimName: '{{inputs.parameters.fleet_volume_name}}'
309       - name: sw-catalogs-repo-volume
310         persistentVolumeClaim:
311           claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
312     securityContext:
313       runAsUser: 10000
314     #   runAsGroup: 10000
315     #   fsGroup: 10000
316
317
318   # Disconnect Flux in remote cluster running in **ANY cloud**
319   - name: disconnect-flux-remote-cluster
320     inputs:
321       parameters:
322       # Volumes with cloned repos
323       - name: fleet_volume_name
324       - name: fleet_mount_path
325         value: "/fleet"
326
327       # Specific parameters
328       - name: cluster_kustomization_name
329       - name: mgmt_project_name
330         value: "osm_admin"
331
332       # Other parameters - Recommended to keep defaults
333       - name: fleet_repo_dir
334         value: "/fleet/fleet-osm/"
335
336       # Debug/dry run?
337       - name: debug
338         value: "false"
339
340     container:
341       image: opensourcemano/osm-krm-functions:testing-daily
342       # imagePullPolicy: Always
343       env:
344       - name: DEBUG
345         value: "{{inputs.parameters.debug}}"
346       command: ["/app/scripts/entrypoint.sh"]
347       args:
348       - disconnect_flux_remote_cluster
349       - "{{inputs.parameters.cluster_kustomization_name}}"
350       - "{{inputs.parameters.fleet_repo_dir}}"
351       - "{{inputs.parameters.mgmt_project_name}}"
352       volumeMounts:
353       - name: fleet-repo-volume
354         mountPath: '{{inputs.parameters.fleet_mount_path}}'
355     volumes:
356       - name: fleet-repo-volume
357         persistentVolumeClaim:
358           claimName: '{{inputs.parameters.fleet_volume_name}}'
359     securityContext:
360       runAsUser: 10000
361     #   runAsGroup: 10000
362     #   fsGroup: 10000
363
364
365   # Delete cluster from **ANY** cloud
366   - name: delete-cluster
367     inputs:
368       parameters:
369       # Volumes with cloned repos
370       - name: fleet_volume_name
371       - name: fleet_mount_path
372         value: "/fleet"
373
374       # Specific parameters
375       - name: cluster_kustomization_name
376       - name: project_name
377         value: "osm_admin"
378
379       # Other parameters - Recommended to keep defaults
380       - name: fleet_repo_dir
381         value: "/fleet/fleet-osm/"
382       - name: mgmt_resources_dir
383         value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
384
385     container:
386       image: opensourcemano/osm-krm-functions:testing-daily
387       # imagePullPolicy: Always
388       command: ["/app/scripts/entrypoint.sh"]
389       args:
390       - delete_remote_cluster
391       - "{{inputs.parameters.cluster_kustomization_name}}"
392       - "{{inputs.parameters.project_name}}"
393       - "{{inputs.parameters.fleet_repo_dir}}"
394       - "{{inputs.parameters.mgmt_resources_dir}}"
395
396       volumeMounts:
397       - name: fleet-repo-volume
398         mountPath: '{{inputs.parameters.fleet_mount_path}}'
399     volumes:
400       - name: fleet-repo-volume
401         persistentVolumeClaim:
402           claimName: '{{inputs.parameters.fleet_volume_name}}'
403     securityContext:
404       runAsUser: 10000
405     #   runAsGroup: 10000
406     #   fsGroup: 10000
407
408
409   # Purge and delete cluster from **ANY** cloud
410   - name: purge-delete-cluster
411     inputs:
412       parameters:
413       # Volumes with cloned repos
414       - name: fleet_volume_name
415       - name: fleet_mount_path
416         value: "/fleet"
417
418       # Specific parameters
419       - name: cluster_kustomization_name
420       - name: project_name
421         value: "osm_admin"
422
423       # Is a purge needed before deleting?
424       - name: purge
425         value: "true"
426       ## Secret where the kubeconfig is stored (may not exist)
427       - name: temp_kubeconfig_secret_name
428         valueFrom:
429           expression: "kubeconfig-{{inputs.parameters.cluster_kustomization_name}}"
430
431       # Other parameters - Recommended to keep defaults
432       - name: temp_kubeconfig_secret_key
433         value: "kubeconfig"
434       - name: fleet_repo_dir
435         value: "/fleet/fleet-osm/"
436       - name: mgmt_resources_dir
437         value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
438
439     container:
440       image: ttl.sh/osm-krm-functions:24h
441       # imagePullPolicy: Always
442       command: ["/app/scripts/entrypoint.sh"]
443       args:
444       - delete_remote_cluster
445       - "{{inputs.parameters.cluster_kustomization_name}}"
446       - "{{inputs.parameters.project_name}}"
447       - "{{inputs.parameters.fleet_repo_dir}}"
448       - "{{inputs.parameters.mgmt_resources_dir}}"
449       - ''
450       - ''
451       - ''
452       - ''
453       - ''
454       - "{{inputs.parameters.purge}}"
455
456       volumeMounts:
457       - name: fleet-repo-volume
458         mountPath: '{{inputs.parameters.fleet_mount_path}}'
459       - name: kubeconfig-volume
460         mountPath: '/app/.kube'
461     volumes:
462       - name: fleet-repo-volume
463         persistentVolumeClaim:
464           claimName: '{{inputs.parameters.fleet_volume_name}}'
465       - name: kubeconfig-volume
466         secret:
467           secretName: '{{inputs.parameters.temp_kubeconfig_secret_name}}'
468           optional: true
469           items:
470             - key: '{{inputs.parameters.temp_kubeconfig_secret_key}}'
471               path: 'config'
472     securityContext:
473       fsGroup: 10000
474       # runAsUser: 10000
475       # runAsGroup: 10000