0f1567e44dee07cb18c652b06997ffbba76bf787
[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: full-create-openshift-cluster-and-bootstrap-wft
22   namespace: osm-workflows
23
24 spec:
25   arguments:
26     parameters:
27
28     # Fleet repo
29     - name: git_fleet_url
30     - name: fleet_destination_folder
31     - name: git_fleet_cred_secret
32
33     # SW-Catalogs repo
34     - name: git_sw_catalogs_url
35     - name: sw_catalogs_destination_folder
36     - name: git_sw_catalogs_cred_secret
37
38     # Specific parameters - Generic cluster creation
39     - name: cluster_kustomization_name
40     - name: cluster_name
41     - name: providerconfig_name
42     - name: vm_size
43     - name: node_count
44     - name: k8s_version
45
46     ## Specific parameters - Openshift
47     - name: control_plane_vm_size
48     - name: control_plane_node_count
49     - name: openstack_dns_nameservers
50     - name: openstack_external_network_id
51     - name: openstack_failure_domain
52     - name: openstack_ssh_key_name
53     - name: cluster_cni
54     - name: openstack_worker_image_name
55     - name: openstack_control_plane_image_name
56     - name: capo_resources_namespace
57
58     # Specific parameters - Bootstrap and credentials
59     - name: public_key_mgmt
60     - name: public_key_new_cluster
61     - name: secret_name_private_age_key_for_new_cluster
62     - name: key_name_in_secret
63       value: "agekey"
64     # Using `git_fleet_url` instead:
65     # - name: fleet_repo_url
66     # Using `git_sw_catalogs_url` instead:
67     # - name: sw_catalogs_repo_url
68     - name: mgmt_project_name
69       value: "osm_admin"
70
71     # Advanced parameters - Recommended to keep defaults
72     - name: skip_bootstrap
73       value: "false"
74     - name: mgmt_cluster_name
75       value: "_management"
76     - name: base_templates_path
77       value: "cloud-resources/capi"
78     - name: cloned_fleet_folder_name
79       value: "fleet-osm"
80     - name: cloned_sw_catalogs_folder_name
81       value: "sw-catalogs-osm"
82
83     # Debug/dry run?
84     - name: debug
85       value: "false"
86     - name: dry_run
87       value: "false"
88
89
90   # # Cleanup policy
91   # ttlStrategy:
92   #   secondsAfterCompletion: 100 # Time to live after workflow is completed, replaces ttlSecondsAfterFinished
93   #   secondsAfterSuccess: 50     # Time to live after workflow is successful
94   #   secondsAfterFailure: 50     # Time to live after workflow fails
95
96   entrypoint: create-cluster-and-bootstrap
97
98   templates:
99   # Main template
100   - name: create-cluster-and-bootstrap
101     inputs:
102       parameters:
103       # Fleet repo
104       - name: git_fleet_url
105       - name: fleet_destination_folder
106       - name: git_fleet_cred_secret
107       # SW-Catalogs repo
108       - name: git_sw_catalogs_url
109       - name: sw_catalogs_destination_folder
110       - name: git_sw_catalogs_cred_secret
111       # Specific parameters
112       - name: cluster_kustomization_name
113       - name: cluster_name
114       - name: providerconfig_name
115       - name: vm_size
116       - name: node_count
117       - name: k8s_version
118       - name: public_key_mgmt
119       - name: public_key_new_cluster
120       - name: secret_name_private_age_key_for_new_cluster
121       - name: key_name_in_secret
122       ## Openshift specific parameters
123       - name: control_plane_vm_size
124       - name: control_plane_node_count
125       - name: openstack_dns_nameservers
126       - name: openstack_external_network_id
127       - name: openstack_failure_domain
128       - name: openstack_ssh_key_name
129       - name: cluster_cni
130       - name: openstack_worker_image_name
131       - name: openstack_control_plane_image_name
132       - name: capo_resources_namespace
133       # Other parameters - Recommended to keep defaults
134       # - name: fleet_repo_url
135       # - name: sw_catalogs_repo_url
136       - name: mgmt_project_name
137       - name: skip_bootstrap
138       - name: mgmt_cluster_name
139       - name: base_templates_path
140       - name: cloned_fleet_folder_name
141       - name: cloned_sw_catalogs_folder_name
142       ## EKS only (otherwise, ignored)
143       - name: cluster_iam_role
144       - name: cluster_private_subnets_id
145       - name: cluster_public_subnets_id
146       - name: cluster_subnets_configmap_name
147       # Debug/dry run?
148       - name: debug
149       - name: dry_run
150
151     steps:
152     # ------ Preparations for transaction
153     - - name: generate-fleet-volume-repo
154         templateRef:
155           name: k8s-resources-wft
156           template: generate-volume
157         arguments:
158           parameters:
159             - name: pvc-size
160               value: '100Mi'
161       - name: generate-sw-catalogs-volume-repo
162         templateRef:
163           name: k8s-resources-wft
164           template: generate-volume
165         arguments:
166           parameters:
167             - name: pvc-size
168               value: '100Mi'
169     - - name: clone-fleet
170         templateRef:
171           name: git-wft
172           template: git-clone
173         arguments:
174           parameters:
175           - name: mount_path
176             value: "/fleet"
177           - name: repo_url
178             value: "{{inputs.parameters.git_fleet_url}}"
179           - name: destination_folder
180             value: "{{inputs.parameters.fleet_destination_folder}}"
181           - name: git_cred_secret
182             value: "{{inputs.parameters.git_fleet_cred_secret}}"
183           - name: git_volume_name
184             value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
185       - name: clone-sw-catalogs
186         templateRef:
187           name: git-wft
188           template: git-clone
189         arguments:
190           parameters:
191           - name: mount_path
192             value: "/sw-catalogs"
193           - name: repo_url
194             value: "{{inputs.parameters.git_sw_catalogs_url}}"
195           - name: destination_folder
196             value: "{{inputs.parameters.sw_catalogs_destination_folder}}"
197           - name: git_cred_secret
198             value: "{{inputs.parameters.git_sw_catalogs_cred_secret}}"
199           - name: git_volume_name
200             value: '{{steps.generate-sw-catalogs-volume-repo.outputs.parameters.pvc-name}}'
201     # ------ end of preparations for transaction
202
203     # ------ Transformations
204     # Create CAPI cluster in cloud (Openstack)
205     - - name: create-cluster
206         templateRef:
207           name: cluster-management-wft
208           template: create-capi-openstack-cluster
209         arguments:
210           parameters:
211           # Volumes with cloned repos
212           - name: fleet_volume_name
213             value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
214           - name: fleet_mount_path
215             value: "/fleet"
216           - name: sw_catalogs_volume_name
217             value: '{{steps.generate-sw-catalogs-volume-repo.outputs.parameters.pvc-name}}'
218           - name: sw_catalogs_mount_path
219             value: "/sw-catalogs"
220           # Specific parameters
221           - name: cluster_kustomization_name
222             value: "{{inputs.parameters.cluster_kustomization_name}}"
223           - name: cluster_name
224             value: "{{inputs.parameters.cluster_name}}"
225           - name: vm_size
226             value: "{{inputs.parameters.vm_size}}"
227           - name: node_count
228             value: "{{inputs.parameters.node_count}}"
229           - name: k8s_version
230             value: "{{inputs.parameters.k8s_version}}"
231           - name: providerconfig_name
232             value: "{{inputs.parameters.providerconfig_name}}"
233           - name: public_key_mgmt
234             value: "{{inputs.parameters.public_key_mgmt}}"
235           - name: public_key_new_cluster
236             value: "{{inputs.parameters.public_key_new_cluster}}"
237           - name: secret_name_private_age_key_for_new_cluster
238             value: "{{inputs.parameters.secret_name_private_age_key_for_new_cluster}}"
239           - name: key_name_in_secret
240             value: "{{inputs.parameters.key_name_in_secret}}"
241           ## CAPI and CAPI Openstack specific parameters
242           - name: control_plane_vm_size
243             value: "{{inputs.parameters.control_plane_vm_size}}"
244           - name: control_plane_node_count
245             value: "{{inputs.parameters.control_plane_node_count}}"
246           - name: openstack_dns_nameservers
247             value: "{{inputs.parameters.openstack_dns_nameservers}}"
248           - name: openstack_external_network_id
249             value: "{{inputs.parameters.openstack_external_network_id}}"
250           - name: openstack_failure_domain
251             value: "{{inputs.parameters.openstack_failure_domain}}"
252           - name: openstack_ssh_key_name
253             value: "{{inputs.parameters.openstack_ssh_key_name}}"
254           - name: cluster_cni
255             value: "{{inputs.parameters.cluster_cni}}"
256           - name: openstack_worker_image_name
257             value: "{{inputs.parameters.openstack_worker_image_name}}"
258           - name: openstack_control_plane_image_name
259             value: "{{inputs.parameters.openstack_control_plane_image_name}}"
260           - name: capo_resources_namespace
261             value: "{{inputs.parameters.capo_resources_namespace}}"
262           ## Fed with `git_fleet_url` to avoid duplicates
263           - name: fleet_repo_url
264             value: "{{inputs.parameters.git_fleet_url}}"
265           ## Fed with `git_sw_catalogs_url` to avoid duplicates
266           - name: sw_catalogs_repo_url
267             value: "{{inputs.parameters.git_sw_catalogs_url}}"
268           - name: mgmt_project_name
269             value: "{{inputs.parameters.mgmt_project_name}}"
270           - name: skip_bootstrap
271             value: "{{inputs.parameters.skip_bootstrap}}"
272           # Other parameters - Recommended to keep defaults
273           - name: mgmt_cluster_name
274             value: "{{inputs.parameters.mgmt_cluster_name}}"
275           - name: base_templates_path
276             value: "{{inputs.parameters.base_templates_path}}"
277           - name: cloned_fleet_folder_name
278             value: "{{inputs.parameters.cloned_fleet_folder_name}}"
279           - name: cloned_sw_catalogs_folder_name
280             value: "{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
281           # Debug?
282           - name: debug
283             value: "{{inputs.parameters.debug}}"
284     # ------ end of transformations
285
286     # ------ Commit transaction
287     - - name: push-to-fleet
288         templateRef:
289           name: git-wft
290           template: git-commit-merge-push
291         arguments:
292           parameters:
293           - name: mount_path
294             value: "/fleet"
295           - name: repo_folder
296             value: "{{inputs.parameters.fleet_destination_folder}}"
297           - name: git_cred_secret
298             value: "{{inputs.parameters.git_fleet_cred_secret}}"
299           - name: git_volume_name
300             value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
301           - name: commit_message
302             value: "Create CAPI Openstack cluster {{inputs.parameters.cluster_kustomization_name}} at {{inputs.parameters.providerconfig_name}}"
303           - name: main_branch
304             value: main
305           - name: contrib_branch
306             value: osm_contrib
307           - name: dry_run
308             value: "{{inputs.parameters.dry_run}}"
309 # ------ end of commit transaction
310