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"
80 image: opensourcemano/osm-krm-functions:testing-daily
81 # imagePullPolicy: Always
83 - name: PRIVATE_KEY_NEW_CLUSTER
86 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
87 key: "{{inputs.parameters.key_name_in_secret}}"
89 value: "{{inputs.parameters.debug}}"
90 command: ["/app/scripts/entrypoint.sh"]
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}}"
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}}"
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}}'
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}}'
133 # Update a PaaS cluster created using CrossPlane (any cloud)
134 - name: update-crossplane-cluster
137 # Volumes with cloned repos
138 - name: fleet_volume_name
139 - name: fleet_mount_path
141 - name: sw_catalogs_volume_name
142 - name: sw_catalogs_mount_path
143 value: "/sw-catalogs"
145 # Specific parameters
146 - name: cluster_kustomization_name
148 ## As of today, one among `aks`, `eks` or `gke`:
150 - name: providerconfig_name
153 - name: cluster_location
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
160 - name: fleet_repo_url
161 - name: sw_catalogs_repo_url
162 - name: mgmt_project_name
164 ## AKS only (otherwise, empty)
167 ## GKE only (otherwise, empty)
168 - name: preemptible_nodes
170 # Other parameters - Recommended to keep defaults
171 - name: mgmt_cluster_name
173 - name: base_templates_path
174 value: "cloud-resources"
175 - name: cloned_fleet_folder_name
177 - name: cloned_sw_catalogs_folder_name
178 value: "sw-catalogs-osm"
184 image: opensourcemano/osm-krm-functions:testing-daily
185 # imagePullPolicy: Always
187 - name: PRIVATE_KEY_NEW_CLUSTER
190 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
191 key: "{{inputs.parameters.key_name_in_secret}}"
193 value: "{{inputs.parameters.debug}}"
194 command: ["/app/scripts/entrypoint.sh"]
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}}"
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:
216 - "{{inputs.parameters.mgmt_project_name}}"
217 - "{{inputs.parameters.mgmt_cluster_name}}"
218 - "{{inputs.parameters.base_templates_path}}"
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}}'
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}}'
238 # Bootstrap remote cluster running in **ANY cloud**
239 - name: bootstrap-remote-cluster
242 # Volumes with cloned repos
243 - name: fleet_volume_name
244 - name: fleet_mount_path
246 - name: sw_catalogs_volume_name
247 - name: sw_catalogs_mount_path
248 value: "/sw-catalogs"
250 # Specific parameters
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
258 - name: fleet_repo_url
259 - name: sw_catalogs_repo_url
261 # Other parameters - Recommended to keep defaults
262 - name: mgmt_project_name
264 - name: imported_cluster
266 - name: fleet_repo_dir
267 value: "/fleet/fleet-osm/"
268 - name: sw_catalogs_repo_dir
269 value: "/sw-catalogs/sw-catalogs-osm/"
276 image: opensourcemano/osm-krm-functions:testing-daily
277 # imagePullPolicy: Always
279 - name: PRIVATE_KEY_NEW_CLUSTER
282 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
283 key: "{{inputs.parameters.key_name_in_secret}}"
285 value: "{{inputs.parameters.debug}}"
286 command: ["/app/scripts/entrypoint.sh"]
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}}"
299 - "{{inputs.parameters.imported_cluster}}"
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}}'
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}}'
318 # Disconnect Flux in remote cluster running in **ANY cloud**
319 - name: disconnect-flux-remote-cluster
322 # Volumes with cloned repos
323 - name: fleet_volume_name
324 - name: fleet_mount_path
327 # Specific parameters
328 - name: cluster_kustomization_name
329 - name: mgmt_project_name
332 # Other parameters - Recommended to keep defaults
333 - name: fleet_repo_dir
334 value: "/fleet/fleet-osm/"
341 image: opensourcemano/osm-krm-functions:testing-daily
342 # imagePullPolicy: Always
345 value: "{{inputs.parameters.debug}}"
346 command: ["/app/scripts/entrypoint.sh"]
348 - disconnect_flux_remote_cluster
349 - "{{inputs.parameters.cluster_kustomization_name}}"
350 - "{{inputs.parameters.fleet_repo_dir}}"
351 - "{{inputs.parameters.mgmt_project_name}}"
353 - name: fleet-repo-volume
354 mountPath: '{{inputs.parameters.fleet_mount_path}}'
356 - name: fleet-repo-volume
357 persistentVolumeClaim:
358 claimName: '{{inputs.parameters.fleet_volume_name}}'
365 # Delete cluster from **ANY** cloud
366 - name: delete-cluster
369 # Volumes with cloned repos
370 - name: fleet_volume_name
371 - name: fleet_mount_path
374 # Specific parameters
375 - name: cluster_kustomization_name
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"
386 image: opensourcemano/osm-krm-functions:testing-daily
387 # imagePullPolicy: Always
388 command: ["/app/scripts/entrypoint.sh"]
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}}"
397 - name: fleet-repo-volume
398 mountPath: '{{inputs.parameters.fleet_mount_path}}'
400 - name: fleet-repo-volume
401 persistentVolumeClaim:
402 claimName: '{{inputs.parameters.fleet_volume_name}}'
409 # Purge and delete cluster from **ANY** cloud
410 - name: purge-delete-cluster
413 # Volumes with cloned repos
414 - name: fleet_volume_name
415 - name: fleet_mount_path
418 # Specific parameters
419 - name: cluster_kustomization_name
423 # Is a purge needed before deleting?
426 ## Secret where the kubeconfig is stored (may not exist)
427 - name: temp_kubeconfig_secret_name
429 expression: "kubeconfig-{{inputs.parameters.cluster_kustomization_name}}"
431 # Other parameters - Recommended to keep defaults
432 - name: temp_kubeconfig_secret_key
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"
440 image: ttl.sh/osm-krm-functions:24h
441 # imagePullPolicy: Always
442 command: ["/app/scripts/entrypoint.sh"]
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}}"
454 - "{{inputs.parameters.purge}}"
457 - name: fleet-repo-volume
458 mountPath: '{{inputs.parameters.fleet_mount_path}}'
459 - name: kubeconfig-volume
460 mountPath: '/app/.kube'
462 - name: fleet-repo-volume
463 persistentVolumeClaim:
464 claimName: '{{inputs.parameters.fleet_volume_name}}'
465 - name: kubeconfig-volume
467 secretName: '{{inputs.parameters.temp_kubeconfig_secret_name}}'
470 - key: '{{inputs.parameters.temp_kubeconfig_secret_key}}'