1 #######################################################################################
2 # Copyright ETSI Contributors and Others.
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #######################################################################################
18 apiVersion: argoproj.io/v1alpha1
19 kind: WorkflowTemplate
21 name: cluster-management-wft
22 namespace: osm-workflows
26 # Create a PaaS cluster using CrossPlane (any cloud)
27 - name: create-crossplane-cluster
30 # Volumes with cloned repos
31 - name: fleet_volume_name
32 - name: fleet_mount_path
34 - name: sw_catalogs_volume_name
35 - name: sw_catalogs_mount_path
39 - name: cluster_kustomization_name
41 ## As of today, one among `aks`, `eks` or `gke`:
43 - name: providerconfig_name
46 - name: cluster_location
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
53 - name: fleet_repo_url
54 - name: sw_catalogs_repo_url
55 - name: mgmt_project_name
57 ## Do we want to skip OSM's bootstrap?
58 - name: skip_bootstrap
60 ## AKS only (otherwise, empty)
63 ## GKE only (otherwise, empty)
64 - name: preemptible_nodes
66 # Other parameters - Recommended to keep defaults
67 - name: mgmt_cluster_name
69 - name: base_templates_path
70 value: "cloud-resources"
71 - name: cloned_fleet_folder_name
73 - name: cloned_sw_catalogs_folder_name
74 value: "sw-catalogs-osm"
75 ## EKS only (otherwise, empty)
76 - name: cluster_iam_role
77 - name: cluster_private_subnets_id
78 - name: cluster_public_subnets_id
79 - name: cluster_subnets_configmap_name
85 image: opensourcemano/osm-krm-functions:testing-daily
86 # imagePullPolicy: Always
88 - name: PRIVATE_KEY_NEW_CLUSTER
91 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
92 key: "{{inputs.parameters.key_name_in_secret}}"
94 value: "{{inputs.parameters.debug}}"
95 command: ["/app/scripts/entrypoint.sh"]
97 - create_crossplane_cluster
98 - "{{inputs.parameters.cluster_kustomization_name}}"
99 - "{{inputs.parameters.cluster_name}}"
100 - "{{inputs.parameters.cluster_type}}"
101 - "{{inputs.parameters.providerconfig_name}}"
102 - "{{inputs.parameters.vm_size}}"
103 - "{{inputs.parameters.node_count}}"
104 - "{{inputs.parameters.cluster_location}}"
105 - "{{inputs.parameters.k8s_version}}"
106 - "{{inputs.parameters.public_key_mgmt}}"
107 - "{{inputs.parameters.public_key_new_cluster}}"
109 - "{{inputs.parameters.rg_name}}"
110 - "{{inputs.parameters.preemptible_nodes}}"
111 - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
112 - "{{inputs.parameters.fleet_repo_url}}"
113 - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
114 - "{{inputs.parameters.sw_catalogs_repo_url}}"
115 - "{{inputs.parameters.skip_bootstrap}}"
116 - "{{inputs.parameters.mgmt_project_name}}"
117 - "{{inputs.parameters.mgmt_cluster_name}}"
118 - "{{inputs.parameters.base_templates_path}}"
119 - "{{inputs.parameters.cluster_iam_role}}"
120 - "{{inputs.parameters.cluster_private_subnets_id}}"
121 - "{{inputs.parameters.cluster_public_subnets_id}}"
122 - "{{inputs.parameters.cluster_subnets_configmap_name}}"
125 - name: fleet-repo-volume
126 mountPath: '{{inputs.parameters.fleet_mount_path}}'
127 - name: sw-catalogs-repo-volume
128 mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
130 - name: fleet-repo-volume
131 persistentVolumeClaim:
132 claimName: '{{inputs.parameters.fleet_volume_name}}'
133 - name: sw-catalogs-repo-volume
134 persistentVolumeClaim:
135 claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
142 # Update a PaaS cluster created using CrossPlane (any cloud)
143 - name: update-crossplane-cluster
146 # Volumes with cloned repos
147 - name: fleet_volume_name
148 - name: fleet_mount_path
150 - name: sw_catalogs_volume_name
151 - name: sw_catalogs_mount_path
152 value: "/sw-catalogs"
154 # Specific parameters
155 - name: cluster_kustomization_name
157 ## As of today, one among `aks`, `eks` or `gke`:
159 - name: providerconfig_name
162 - name: cluster_location
164 - name: public_key_mgmt
165 - name: public_key_new_cluster
166 - name: secret_name_private_age_key_for_new_cluster
167 - name: key_name_in_secret
169 - name: fleet_repo_url
170 - name: sw_catalogs_repo_url
171 - name: mgmt_project_name
173 ## AKS only (otherwise, empty)
176 ## GKE only (otherwise, empty)
177 - name: preemptible_nodes
179 # Other parameters - Recommended to keep defaults
180 - name: mgmt_cluster_name
182 - name: base_templates_path
183 value: "cloud-resources"
184 - name: cloned_fleet_folder_name
186 - name: cloned_sw_catalogs_folder_name
187 value: "sw-catalogs-osm"
193 image: opensourcemano/osm-krm-functions:testing-daily
194 # imagePullPolicy: Always
196 - name: PRIVATE_KEY_NEW_CLUSTER
199 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
200 key: "{{inputs.parameters.key_name_in_secret}}"
202 value: "{{inputs.parameters.debug}}"
203 command: ["/app/scripts/entrypoint.sh"]
205 - update_crossplane_cluster
206 - "{{inputs.parameters.cluster_kustomization_name}}"
207 - "{{inputs.parameters.cluster_name}}"
208 - "{{inputs.parameters.cluster_type}}"
209 - "{{inputs.parameters.providerconfig_name}}"
210 - "{{inputs.parameters.vm_size}}"
211 - "{{inputs.parameters.node_count}}"
212 - "{{inputs.parameters.cluster_location}}"
213 - "{{inputs.parameters.k8s_version}}"
214 - "{{inputs.parameters.public_key_mgmt}}"
215 - "{{inputs.parameters.public_key_new_cluster}}"
217 - "{{inputs.parameters.rg_name}}"
218 - "{{inputs.parameters.preemptible_nodes}}"
219 - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
220 - "{{inputs.parameters.fleet_repo_url}}"
221 - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
222 - "{{inputs.parameters.sw_catalogs_repo_url}}"
223 ## Note that during upgrades, OSM's bootstrap is avoided:
225 - "{{inputs.parameters.mgmt_project_name}}"
226 - "{{inputs.parameters.mgmt_cluster_name}}"
227 - "{{inputs.parameters.base_templates_path}}"
230 - name: fleet-repo-volume
231 mountPath: '{{inputs.parameters.fleet_mount_path}}'
232 - name: sw-catalogs-repo-volume
233 mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
235 - name: fleet-repo-volume
236 persistentVolumeClaim:
237 claimName: '{{inputs.parameters.fleet_volume_name}}'
238 - name: sw-catalogs-repo-volume
239 persistentVolumeClaim:
240 claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
247 # Bootstrap remote cluster running in **ANY cloud**
248 - name: bootstrap-remote-cluster
251 # Volumes with cloned repos
252 - name: fleet_volume_name
253 - name: fleet_mount_path
255 - name: sw_catalogs_volume_name
256 - name: sw_catalogs_mount_path
257 value: "/sw-catalogs"
259 # Specific parameters
261 - name: cluster_kustomization_name
262 - name: public_key_mgmt
263 - name: public_key_new_cluster
264 - name: secret_name_private_age_key_for_new_cluster
265 - name: key_name_in_secret
267 - name: fleet_repo_url
268 - name: sw_catalogs_repo_url
270 # Other parameters - Recommended to keep defaults
271 - name: mgmt_project_name
273 - name: imported_cluster
275 - name: fleet_repo_dir
276 value: "/fleet/fleet-osm/"
277 - name: sw_catalogs_repo_dir
278 value: "/sw-catalogs/sw-catalogs-osm/"
285 image: opensourcemano/osm-krm-functions:testing-daily
286 # imagePullPolicy: Always
288 - name: PRIVATE_KEY_NEW_CLUSTER
291 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
292 key: "{{inputs.parameters.key_name_in_secret}}"
294 value: "{{inputs.parameters.debug}}"
295 command: ["/app/scripts/entrypoint.sh"]
297 - create_bootstrap_for_remote_cluster
298 - "{{inputs.parameters.cluster_name}}"
299 - "{{inputs.parameters.cluster_kustomization_name}}"
300 - "{{inputs.parameters.fleet_repo_dir}}"
301 - "{{inputs.parameters.sw_catalogs_repo_dir}}"
302 - "{{inputs.parameters.fleet_repo_url}}"
303 - "{{inputs.parameters.sw_catalogs_repo_url}}"
304 - "{{inputs.parameters.mgmt_project_name}}"
305 - "{{inputs.parameters.public_key_mgmt}}"
306 - "{{inputs.parameters.public_key_new_cluster}}"
308 - "{{inputs.parameters.imported_cluster}}"
310 - name: fleet-repo-volume
311 mountPath: '{{inputs.parameters.fleet_mount_path}}'
312 - name: sw-catalogs-repo-volume
313 mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
315 - name: fleet-repo-volume
316 persistentVolumeClaim:
317 claimName: '{{inputs.parameters.fleet_volume_name}}'
318 - name: sw-catalogs-repo-volume
319 persistentVolumeClaim:
320 claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
327 # Disconnect Flux in remote cluster running in **ANY cloud**
328 - name: disconnect-flux-remote-cluster
331 # Volumes with cloned repos
332 - name: fleet_volume_name
333 - name: fleet_mount_path
336 # Specific parameters
337 - name: cluster_kustomization_name
338 - name: mgmt_project_name
341 # Other parameters - Recommended to keep defaults
342 - name: fleet_repo_dir
343 value: "/fleet/fleet-osm/"
350 image: opensourcemano/osm-krm-functions:testing-daily
351 # imagePullPolicy: Always
354 value: "{{inputs.parameters.debug}}"
355 command: ["/app/scripts/entrypoint.sh"]
357 - disconnect_flux_remote_cluster
358 - "{{inputs.parameters.cluster_kustomization_name}}"
359 - "{{inputs.parameters.fleet_repo_dir}}"
360 - "{{inputs.parameters.mgmt_project_name}}"
362 - name: fleet-repo-volume
363 mountPath: '{{inputs.parameters.fleet_mount_path}}'
365 - name: fleet-repo-volume
366 persistentVolumeClaim:
367 claimName: '{{inputs.parameters.fleet_volume_name}}'
374 # Delete cluster from **ANY** cloud
375 - name: delete-cluster
378 # Volumes with cloned repos
379 - name: fleet_volume_name
380 - name: fleet_mount_path
383 # Specific parameters
384 - name: cluster_kustomization_name
388 # Other parameters - Recommended to keep defaults
389 - name: fleet_repo_dir
390 value: "/fleet/fleet-osm/"
391 - name: mgmt_resources_dir
392 value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
395 image: opensourcemano/osm-krm-functions:testing-daily
396 # imagePullPolicy: Always
397 command: ["/app/scripts/entrypoint.sh"]
399 - delete_remote_cluster
400 - "{{inputs.parameters.cluster_kustomization_name}}"
401 - "{{inputs.parameters.project_name}}"
402 - "{{inputs.parameters.fleet_repo_dir}}"
403 - "{{inputs.parameters.mgmt_resources_dir}}"
406 - name: fleet-repo-volume
407 mountPath: '{{inputs.parameters.fleet_mount_path}}'
409 - name: fleet-repo-volume
410 persistentVolumeClaim:
411 claimName: '{{inputs.parameters.fleet_volume_name}}'
418 # Purge and delete cluster from **ANY** cloud
419 - name: purge-delete-cluster
422 # Volumes with cloned repos
423 - name: fleet_volume_name
424 - name: fleet_mount_path
427 # Specific parameters
428 - name: cluster_kustomization_name
432 # Is a purge needed before deleting?
435 ## Secret where the kubeconfig is stored (may not exist)
436 - name: temp_kubeconfig_secret_name
438 expression: "kubeconfig-{{inputs.parameters.cluster_kustomization_name}}"
440 # Other parameters - Recommended to keep defaults
441 - name: temp_kubeconfig_secret_key
443 - name: fleet_repo_dir
444 value: "/fleet/fleet-osm/"
445 - name: mgmt_resources_dir
446 value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
449 image: opensourcemano/osm-krm-functions:testing-daily
450 # imagePullPolicy: Always
451 command: ["/app/scripts/entrypoint.sh"]
453 - delete_remote_cluster
454 - "{{inputs.parameters.cluster_kustomization_name}}"
455 - "{{inputs.parameters.project_name}}"
456 - "{{inputs.parameters.fleet_repo_dir}}"
457 - "{{inputs.parameters.mgmt_resources_dir}}"
463 - "{{inputs.parameters.purge}}"
466 - name: fleet-repo-volume
467 mountPath: '{{inputs.parameters.fleet_mount_path}}'
468 - name: kubeconfig-volume
469 mountPath: '/app/.kube'
471 - name: fleet-repo-volume
472 persistentVolumeClaim:
473 claimName: '{{inputs.parameters.fleet_volume_name}}'
474 - name: kubeconfig-volume
476 secretName: '{{inputs.parameters.temp_kubeconfig_secret_name}}'
479 - key: '{{inputs.parameters.temp_kubeconfig_secret_key}}'