7b74541f2fd52d4ad19b9afd3567f5b6828e472d
[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-ksu-generated-hr-wtf
22   namespace: osm-workflows
23 spec:
24   arguments:
25     parameters:
26     # Fleet repo
27     - name: git_fleet_url
28     - name: fleet_destination_folder
29     - name: git_fleet_cred_secret
30     # HelmRelease generation
31     - name: helmrelease_name
32     - name: chart_name
33     - name: chart_version
34     - name: target_ns
35     - name: create_ns
36     # Repo source generation
37     - name: is_preexisting_repo
38       value: "false"
39     - name: helmrepo_name
40     - name: helmrepo_url
41     - name: helmrepo_ns
42       valueFrom:
43         expression: "{{inputs.parameters.target_ns}}"
44     - name: helmrepo_secret_ref
45     # HelmRelease inline values (if any)
46     - name: inline_values
47       value: ""
48     # Secret reference and generation (if required)
49     - name: is_preexisting_secret
50       value: "false"
51     - name: values_secret_name
52     - name: secret_key
53       value: "values.yaml"
54     - name: age_public_key
55     ################################################################
56     ## A temporary secret should exist already in the `osm-workflows`
57     ## namespace containing the desired secret key-values
58     ## in a well-known key (in the example, `creds`).
59     ##
60     ## For instance:
61     ##
62     ## creds: |
63     ##     jenkinsUser: admin
64     ##     jenkinsPassword: myJ3nk1n2P2ssw0rd
65     ##
66     ## Secret values will be obtained from the
67     ## secret named after the input parameter `reference_secret_for_values`,
68     ## and from the key named after the input parameter `reference_key_for_values`
69     - name: reference_secret_for_values
70     - name: reference_key_for_values
71     # ConfigMap reference and generation (if required)
72     - name: is_preexisting_cm
73     - name: values_cm_name
74     - name: cm_key
75       value: "values.yaml"
76     - name: cm_values
77       value: ""
78     # KSU rendering
79     - name: ksu_name
80     - name: profile_name
81     - name: profile_type
82     - name: project_name
83       value: "osm_admin"
84     # By default, it will not syncronize, so that we can easily accumulate more than
85     # one Helm chart into the same KSU if desired
86     - name: sync
87       value: "false"
88     ## Root folder of the cloned Fleet repo - Do not touch
89     ### `FLEET_REPO_DIR` is the result of:
90     ### "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
91     - name: cloned_fleet_folder_name
92       value: "fleet-osm"
93     # Debug/dry run?
94     - name: debug
95       value: "false"
96     - name: dry_run
97       value: "false"
98
99   # Cleanup policy
100   ttlStrategy:
101     secondsAfterCompletion: 6000  # Time to live after workflow is completed, replaces ttlSecondsAfterFinished
102     secondsAfterSuccess: 6000     # Time to live after workflow is successful
103     secondsAfterFailure: 9000     # Time to live after workflow fails
104
105   entrypoint: create-ksu-hr
106
107   templates:
108   # Main template
109   - name: create-ksu-hr
110     inputs:
111       parameters:
112       # Fleet repo
113       - name: git_fleet_url
114       - name: fleet_destination_folder
115       - name: git_fleet_cred_secret
116       # HelmRelease generation
117       - name: helmrelease_name
118       - name: chart_name
119       - name: chart_version
120       - name: target_ns
121       - name: create_ns
122       # Repo source generation
123       - name: is_preexisting_repo
124       - name: helmrepo_name
125       - name: helmrepo_url
126       - name: helmrepo_ns
127       - name: helmrepo_secret_ref
128       # HelmRelease inline values (if any)
129       - name: inline_values
130       # Secret reference and generation (if required)
131       - name: is_preexisting_secret
132       - name: values_secret_name
133       - name: secret_key
134       - name: age_public_key
135       - name: reference_secret_for_values
136       - name: reference_key_for_values
137       # ConfigMap reference and generation (if required)
138       - name: is_preexisting_cm
139       - name: values_cm_name
140       - name: cm_key
141       - name: cm_values
142       # KSU rendering
143       - name: ksu_name
144       - name: profile_name
145       - name: profile_type
146       - name: project_name
147       - name: sync
148       - name: cloned_fleet_folder_name
149       # Debug/dry run?
150       - name: debug
151         value: "false"
152       - name: dry_run
153         value: "false"
154
155     steps:
156     # ------ Preparations for transaction
157     - - name: generate-fleet-volume-repo
158         templateRef:
159           name: k8s-resources-wft
160           template: generate-volume
161         arguments:
162           parameters:
163             - name: pvc-size
164               value: '100Mi'
165     - - name: clone-fleet
166         templateRef:
167           name: git-wft
168           template: git-clone
169         arguments:
170           parameters:
171           - name: mount_path
172             value: "/fleet"
173           - name: repo_url
174             value: "{{inputs.parameters.git_fleet_url}}"
175           - name: destination_folder
176             value: "{{inputs.parameters.fleet_destination_folder}}"
177           - name: git_cred_secret
178             value: "{{inputs.parameters.git_fleet_cred_secret}}"
179           - name: git_volume_name
180             value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
181     # ------ end of preparations for transaction
182
183     # ------ Transformations
184     - - name: create-ksu-generated-hr
185         templateRef:
186           name: ksu-management-wft
187           template: create-ksu-generated-hr
188         arguments:
189           parameters:
190           # References to required external resources
191           - name: fleet_volume_name
192             value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
193           - name: fleet_mount_path
194             value: "/fleet"
195           # HelmRelease generation
196           - name: helmrelease_name
197             value: "{{inputs.parameters.helmrelease_name}}"
198           - name: chart_name
199             value: "{{inputs.parameters.chart_name}}"
200           - name: chart_version
201             value: "{{inputs.parameters.chart_version}}"
202           - name: target_ns
203             value: "{{inputs.parameters.target_ns}}"
204           - name: create_ns
205             value: "{{inputs.parameters.create_ns}}"
206           # Repo source generation
207           - name: is_preexisting_repo
208             value: "{{inputs.parameters.is_preexisting_repo}}"
209           - name: helmrepo_name
210             value: "{{inputs.parameters.helmrepo_name}}"
211           - name: helmrepo_url
212             value: "{{inputs.parameters.helmrepo_url}}"
213           - name: helmrepo_ns
214             value: "{{inputs.parameters.helmrepo_ns}}"
215           - name: helmrepo_secret_ref
216             value: "{{inputs.parameters.helmrepo_secret_ref}}"
217           # HelmRelease inline values (if any)
218           - name: inline_values
219             value: "{{inputs.parameters.inline_values}}"
220           # Secret reference and generation (if required)
221           - name: is_preexisting_secret
222             value: "{{inputs.parameters.is_preexisting_secret}}"
223           - name: values_secret_name
224             value: "{{inputs.parameters.values_secret_name}}"
225           - name: secret_key
226             value: "{{inputs.parameters.secret_key}}"
227           - name: age_public_key
228             value: "{{inputs.parameters.age_public_key}}"
229           ## Secret values will be obtained from this key in this secret
230           - name: reference_secret_for_values
231             value: "{{inputs.parameters.reference_secret_for_values}}"
232           - name: reference_key_for_values
233             value: "{{inputs.parameters.reference_key_for_values}}"
234           # ConfigMap reference and generation (if required)
235           - name: is_preexisting_cm
236             value: "{{inputs.parameters.is_preexisting_cm}}"
237           - name: values_cm_name
238             value: "{{inputs.parameters.values_cm_name}}"
239           - name: cm_key
240             value: "{{inputs.parameters.cm_key}}"
241           - name: cm_values
242             value: "{{inputs.parameters.cm_values}}"
243           # KSU rendering
244           - name: ksu_name
245             value: "{{inputs.parameters.ksu_name}}"
246           - name: profile_name
247             value: "{{inputs.parameters.profile_name}}"
248           - name: profile_type
249             value: "{{inputs.parameters.profile_type}}"
250           - name: project_name
251             value: "{{inputs.parameters.project_name}}"
252           - name: sync
253             value: "{{inputs.parameters.sync}}"
254           ## Root folder of the cloned Fleet repo - Do not touch
255           - name: cloned_fleet_folder_name
256             value: "{{inputs.parameters.cloned_fleet_folder_name}}"
257           # Debug?
258           - name: debug
259             value: "{{inputs.parameters.debug}}"
260     # ------ end of transformations
261
262     # ------ Commit transaction
263     - - name: push-to-fleet
264         templateRef:
265           name: git-wft
266           template: git-commit-merge-push
267         arguments:
268           parameters:
269           - name: mount_path
270             value: "/fleet"
271           - name: repo_folder
272             value: "{{inputs.parameters.fleet_destination_folder}}"
273           - name: git_cred_secret
274             value: "{{inputs.parameters.git_fleet_cred_secret}}"
275           - name: git_volume_name
276             value: '{{steps.generate-fleet-volume-repo.outputs.parameters.pvc-name}}'
277           - name: commit_message
278             value: "Create KSU {{inputs.parameters.ksu_name}} into {{inputs.parameters.profile_name}} profile of {{inputs.parameters.profile_type}} type @ {{inputs.parameters.project_name}} project"
279           - name: main_branch
280             value: main
281           - name: contrib_branch
282             value: osm_contrib
283           - name: dry_run
284             value: "{{inputs.parameters.dry_run}}"
285 # ------ end of commit transaction