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 # Create a PaaS cluster using CAPI (Openstack)
248 - name: create-capi-openstack-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"
258 # Specific parameters
259 - name: cluster_kustomization_name
264 - name: providerconfig_name
265 - name: public_key_mgmt
266 - name: public_key_new_cluster
267 - name: secret_name_private_age_key_for_new_cluster
268 - name: key_name_in_secret
270 - name: fleet_repo_url
271 - name: sw_catalogs_repo_url
272 - name: mgmt_project_name
274 ## CAPI and CAPI Openstack specific parameters
275 - name: control_plane_vm_size
277 - name: control_plane_node_count
279 - name: openstack_dns_nameservers
281 - name: openstack_external_network_id
283 - name: openstack_failure_domain
285 - name: openstack_ssh_key_name
289 - name: openstack_worker_image_name
291 - name: openstack_control_plane_image_name
293 - name: capo_resources_namespace
294 value: "managed-resources"
295 ## Do we want to skip OSM's bootstrap?
296 - name: skip_bootstrap
298 # Other parameters - Recommended to keep defaults
299 - name: mgmt_cluster_name
301 - name: base_templates_path
302 value: "cloud-resources/capi"
303 - name: cloned_fleet_folder_name
305 - name: cloned_sw_catalogs_folder_name
306 value: "sw-catalogs-osm"
312 image: opensourcemano/osm-krm-functions:testing-daily
313 # imagePullPolicy: Always
315 - name: PRIVATE_KEY_NEW_CLUSTER
318 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
319 key: "{{inputs.parameters.key_name_in_secret}}"
321 value: "{{inputs.parameters.debug}}"
322 command: ["/app/scripts/entrypoint.sh"]
324 - create_capi_openstack_cluster
325 - "{{inputs.parameters.cluster_kustomization_name}}"
326 - "{{inputs.parameters.cluster_name}}"
327 - "{{inputs.parameters.vm_size}}"
328 - "{{inputs.parameters.control_plane_vm_size}}"
329 - "{{inputs.parameters.node_count}}"
330 - "{{inputs.parameters.control_plane_node_count}}"
331 - "{{inputs.parameters.k8s_version}}"
332 - "{{inputs.parameters.providerconfig_name}}"
333 - "{{inputs.parameters.openstack_dns_nameservers}}"
334 - "{{inputs.parameters.openstack_external_network_id}}"
335 - "{{inputs.parameters.openstack_failure_domain}}"
336 - "{{inputs.parameters.openstack_ssh_key_name}}"
337 - "{{inputs.parameters.cluster_cni}}"
338 - "{{inputs.parameters.openstack_worker_image_name}}"
339 - "{{inputs.parameters.openstack_control_plane_image_name}}"
340 - "{{inputs.parameters.public_key_mgmt}}"
341 - "{{inputs.parameters.public_key_new_cluster}}"
343 - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
344 - "{{inputs.parameters.fleet_repo_url}}"
345 - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
346 - "{{inputs.parameters.sw_catalogs_repo_url}}"
347 - "{{inputs.parameters.skip_bootstrap}}"
348 - "{{inputs.parameters.mgmt_project_name}}"
349 - "{{inputs.parameters.mgmt_cluster_name}}"
350 - "{{inputs.parameters.base_templates_path}}"
351 - '{{inputs.parameters.capo_resources_namespace}}'
354 - name: fleet-repo-volume
355 mountPath: '{{inputs.parameters.fleet_mount_path}}'
356 - name: sw-catalogs-repo-volume
357 mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
359 - name: fleet-repo-volume
360 persistentVolumeClaim:
361 claimName: '{{inputs.parameters.fleet_volume_name}}'
362 - name: sw-catalogs-repo-volume
363 persistentVolumeClaim:
364 claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
371 # Update a PaaS cluster created using CAPI (Openstack)
372 - name: update-capi-openstack-cluster
375 # Volumes with cloned repos
376 - name: fleet_volume_name
377 - name: fleet_mount_path
379 - name: sw_catalogs_volume_name
380 - name: sw_catalogs_mount_path
381 value: "/sw-catalogs"
382 # Specific parameters
383 - name: cluster_kustomization_name
388 - name: providerconfig_name
389 - name: public_key_mgmt
390 - name: public_key_new_cluster
391 - name: secret_name_private_age_key_for_new_cluster
392 - name: key_name_in_secret
394 - name: fleet_repo_url
395 - name: sw_catalogs_repo_url
396 - name: mgmt_project_name
398 ## CAPI and CAPI Openstack specific parameters
399 - name: control_plane_vm_size
401 - name: control_plane_node_count
403 - name: openstack_dns_nameservers
405 - name: openstack_external_network_id
407 - name: openstack_failure_domain
409 - name: openstack_ssh_key_name
413 - name: openstack_worker_image_name
415 - name: openstack_control_plane_image_name
417 - name: capo_resources_namespace
418 value: "managed-resources"
419 ## Do we want to skip OSM's bootstrap?
420 - name: skip_bootstrap
422 # Other parameters - Recommended to keep defaults
423 - name: mgmt_cluster_name
425 - name: base_templates_path
426 value: "cloud-resources/capi"
427 - name: cloned_fleet_folder_name
429 - name: cloned_sw_catalogs_folder_name
430 value: "sw-catalogs-osm"
436 image: opensourcemano/osm-krm-functions:testing-daily
437 # imagePullPolicy: Always
439 - name: PRIVATE_KEY_NEW_CLUSTER
442 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
443 key: "{{inputs.parameters.key_name_in_secret}}"
445 value: "{{inputs.parameters.debug}}"
446 command: ["/app/scripts/entrypoint.sh"]
448 - update_capi_openstack_cluster
449 - "{{inputs.parameters.cluster_kustomization_name}}"
450 - "{{inputs.parameters.cluster_name}}"
451 - "{{inputs.parameters.vm_size}}"
452 - "{{inputs.parameters.control_plane_vm_size}}"
453 - "{{inputs.parameters.node_count}}"
454 - "{{inputs.parameters.control_plane_node_count}}"
455 - "{{inputs.parameters.k8s_version}}"
456 - "{{inputs.parameters.providerconfig_name}}"
457 - "{{inputs.parameters.openstack_dns_nameservers}}"
458 - "{{inputs.parameters.openstack_external_network_id}}"
459 - "{{inputs.parameters.openstack_failure_domain}}"
460 - "{{inputs.parameters.openstack_ssh_key_name}}"
461 - "{{inputs.parameters.cluster_cni}}"
462 - "{{inputs.parameters.openstack_worker_image_name}}"
463 - "{{inputs.parameters.openstack_control_plane_image_name}}"
464 - "{{inputs.parameters.public_key_mgmt}}"
465 - "{{inputs.parameters.public_key_new_cluster}}"
467 - "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
468 - "{{inputs.parameters.fleet_repo_url}}"
469 - "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
470 - "{{inputs.parameters.sw_catalogs_repo_url}}"
471 ## Note that during upgrades, OSM's bootstrap is avoided:
473 - "{{inputs.parameters.mgmt_project_name}}"
474 - "{{inputs.parameters.mgmt_cluster_name}}"
475 - "{{inputs.parameters.base_templates_path}}"
476 - '{{inputs.parameters.capo_resources_namespace}}'
479 - name: fleet-repo-volume
480 mountPath: '{{inputs.parameters.fleet_mount_path}}'
481 - name: sw-catalogs-repo-volume
482 mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
484 - name: fleet-repo-volume
485 persistentVolumeClaim:
486 claimName: '{{inputs.parameters.fleet_volume_name}}'
487 - name: sw-catalogs-repo-volume
488 persistentVolumeClaim:
489 claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
496 # Bootstrap remote cluster running in **ANY cloud**
497 - name: bootstrap-remote-cluster
500 # Volumes with cloned repos
501 - name: fleet_volume_name
502 - name: fleet_mount_path
504 - name: sw_catalogs_volume_name
505 - name: sw_catalogs_mount_path
506 value: "/sw-catalogs"
508 # Specific parameters
510 - name: cluster_kustomization_name
511 - name: public_key_mgmt
512 - name: public_key_new_cluster
513 - name: secret_name_private_age_key_for_new_cluster
514 - name: key_name_in_secret
516 - name: fleet_repo_url
517 - name: sw_catalogs_repo_url
519 # Other parameters - Recommended to keep defaults
520 - name: mgmt_project_name
522 - name: imported_cluster
524 - name: fleet_repo_dir
525 value: "/fleet/fleet-osm/"
526 - name: sw_catalogs_repo_dir
527 value: "/sw-catalogs/sw-catalogs-osm/"
534 image: opensourcemano/osm-krm-functions:testing-daily
535 # imagePullPolicy: Always
537 - name: PRIVATE_KEY_NEW_CLUSTER
540 name: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
541 key: "{{inputs.parameters.key_name_in_secret}}"
543 value: "{{inputs.parameters.debug}}"
544 command: ["/app/scripts/entrypoint.sh"]
546 - create_bootstrap_for_remote_cluster
547 - "{{inputs.parameters.cluster_name}}"
548 - "{{inputs.parameters.cluster_kustomization_name}}"
549 - "{{inputs.parameters.fleet_repo_dir}}"
550 - "{{inputs.parameters.sw_catalogs_repo_dir}}"
551 - "{{inputs.parameters.fleet_repo_url}}"
552 - "{{inputs.parameters.sw_catalogs_repo_url}}"
553 - "{{inputs.parameters.mgmt_project_name}}"
554 - "{{inputs.parameters.public_key_mgmt}}"
555 - "{{inputs.parameters.public_key_new_cluster}}"
557 - "{{inputs.parameters.imported_cluster}}"
559 - name: fleet-repo-volume
560 mountPath: '{{inputs.parameters.fleet_mount_path}}'
561 - name: sw-catalogs-repo-volume
562 mountPath: '{{inputs.parameters.sw_catalogs_mount_path}}'
564 - name: fleet-repo-volume
565 persistentVolumeClaim:
566 claimName: '{{inputs.parameters.fleet_volume_name}}'
567 - name: sw-catalogs-repo-volume
568 persistentVolumeClaim:
569 claimName: '{{inputs.parameters.sw_catalogs_volume_name}}'
576 # Disconnect Flux in remote cluster running in **ANY cloud**
577 - name: disconnect-flux-remote-cluster
580 # Volumes with cloned repos
581 - name: fleet_volume_name
582 - name: fleet_mount_path
585 # Specific parameters
586 - name: cluster_kustomization_name
587 - name: mgmt_project_name
590 # Other parameters - Recommended to keep defaults
591 - name: fleet_repo_dir
592 value: "/fleet/fleet-osm/"
599 image: opensourcemano/osm-krm-functions:testing-daily
600 # imagePullPolicy: Always
603 value: "{{inputs.parameters.debug}}"
604 command: ["/app/scripts/entrypoint.sh"]
606 - disconnect_flux_remote_cluster
607 - "{{inputs.parameters.cluster_kustomization_name}}"
608 - "{{inputs.parameters.fleet_repo_dir}}"
609 - "{{inputs.parameters.mgmt_project_name}}"
611 - name: fleet-repo-volume
612 mountPath: '{{inputs.parameters.fleet_mount_path}}'
614 - name: fleet-repo-volume
615 persistentVolumeClaim:
616 claimName: '{{inputs.parameters.fleet_volume_name}}'
623 # Delete cluster from **ANY** cloud
624 - name: delete-cluster
627 # Volumes with cloned repos
628 - name: fleet_volume_name
629 - name: fleet_mount_path
632 # Specific parameters
633 - name: cluster_kustomization_name
637 # Other parameters - Recommended to keep defaults
638 - name: fleet_repo_dir
639 value: "/fleet/fleet-osm/"
640 - name: mgmt_resources_dir
641 value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
644 image: opensourcemano/osm-krm-functions:testing-daily
645 # imagePullPolicy: Always
646 command: ["/app/scripts/entrypoint.sh"]
648 - delete_remote_cluster
649 - "{{inputs.parameters.cluster_kustomization_name}}"
650 - "{{inputs.parameters.project_name}}"
651 - "{{inputs.parameters.fleet_repo_dir}}"
652 - "{{inputs.parameters.mgmt_resources_dir}}"
655 - name: fleet-repo-volume
656 mountPath: '{{inputs.parameters.fleet_mount_path}}'
658 - name: fleet-repo-volume
659 persistentVolumeClaim:
660 claimName: '{{inputs.parameters.fleet_volume_name}}'
667 # Purge and delete cluster from **ANY** cloud
668 - name: purge-delete-cluster
671 # Volumes with cloned repos
672 - name: fleet_volume_name
673 - name: fleet_mount_path
676 # Specific parameters
677 - name: cluster_kustomization_name
681 # Is a purge needed before deleting?
684 ## Secret where the kubeconfig is stored (may not exist)
685 - name: temp_kubeconfig_secret_name
687 expression: "kubeconfig-{{inputs.parameters.cluster_kustomization_name}}"
689 # Other parameters - Recommended to keep defaults
690 - name: temp_kubeconfig_secret_key
692 - name: fleet_repo_dir
693 value: "/fleet/fleet-osm/"
694 - name: mgmt_resources_dir
695 value: "{{inputs.parameters.fleet_repo_dir}}/{{inputs.parameters.project_name}}/managed-resources/_management"
698 image: opensourcemano/osm-krm-functions:testing-daily
699 # imagePullPolicy: Always
700 command: ["/app/scripts/entrypoint.sh"]
702 - delete_remote_cluster
703 - "{{inputs.parameters.cluster_kustomization_name}}"
704 - "{{inputs.parameters.project_name}}"
705 - "{{inputs.parameters.fleet_repo_dir}}"
706 - "{{inputs.parameters.mgmt_resources_dir}}"
712 - "{{inputs.parameters.purge}}"
715 - name: fleet-repo-volume
716 mountPath: '{{inputs.parameters.fleet_mount_path}}'
717 - name: kubeconfig-volume
718 mountPath: '/app/.kube'
720 - name: fleet-repo-volume
721 persistentVolumeClaim:
722 claimName: '{{inputs.parameters.fleet_volume_name}}'
723 - name: kubeconfig-volume
725 secretName: '{{inputs.parameters.temp_kubeconfig_secret_name}}'
728 - key: '{{inputs.parameters.temp_kubeconfig_secret_key}}'