blob: 3f7a5e7292f0ada2c5ea43ced03922b723031e7e [file] [log] [blame]
garciadeblas96b94f52024-07-08 16:18:21 +02001#######################################################################################
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
19import yaml
20import json
21
22
23async def create_cloud_credentials(self, op_id, op_params, content):
24 self.logger.info("Create cloud_credentials workflow Enter")
25 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
26
27 workflow_template = "launcher-create-providerconfig.j2"
28 workflow_name = f"create-providerconfig-{content['_id']}"
29 # vim_name = content["name"].lower()
30 vim_name = content.get("git_name", content["name"]).lower()
31 # workflow_name = f"{op_id}-create-credentials-{vim_name}"
32
33 # Test kubectl connection
34 self.logger.debug(self._kubectl._get_kubectl_version())
35
36 # Create secret with creds
37 secret_name = workflow_name
38 secret_namespace = "osm-workflows"
39 secret_key = "creds"
40 secret_value = json.dumps(content["config"]["credentials"], indent=2)
41 await self.create_secret(
42 secret_name,
43 secret_namespace,
44 secret_key,
45 secret_value,
46 )
47
48 # Additional params for the workflow
49 providerconfig_name = f"{vim_name}-config"
50 provider_type = content["vim_type"]
51 osm_project_name = "osm_admin" # TODO: get project name from content
52 if provider_type == "gcp":
53 vim_tenant = content["vim_tenant_name"]
54 else:
55 vim_tenant = ""
56
57 # Render workflow
58 manifest = self.render_jinja_template(
59 workflow_template,
60 output_file=None,
61 workflow_name=workflow_name,
62 git_fleet_url=f"{self._repo_base_url}/{self._repo_user}/fleet-osm.git",
63 git_sw_catalogs_url=f"{self._repo_base_url}/{self._repo_user}/sw-catalogs-osm.git",
64 providerconfig_name=providerconfig_name,
65 provider_type=provider_type,
66 cred_secret_name=vim_name,
67 temp_cred_secret_name=secret_name,
68 public_key_mgmt=self._pubkey,
69 osm_project_name=osm_project_name,
70 target_gcp_project=vim_tenant,
71 workflow_debug=self._workflow_debug,
72 workflow_dry_run=self._workflow_dry_run,
73 )
74 self.logger.debug(f"Workflow manifest: {manifest}")
75
76 # Submit workflow
77 self._kubectl.create_generic_object(
78 namespace="osm-workflows",
79 manifest_dict=yaml.safe_load(manifest),
80 api_group="argoproj.io",
81 api_plural="workflows",
82 api_version="v1alpha1",
83 )
84 return workflow_name
85
86
87async def delete_cloud_credentials(self, op_id, op_params, content):
88 self.logger.info("Delete cloud_credentials workflow Enter")
89 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
90
91 workflow_template = "launcher-delete-providerconfig.j2"
92 workflow_name = f"delete-providerconfig-{content['_id']}"
93 # vim_name = content["name"].lower()
94 vim_name = content.get("git_name", content["name"]).lower()
95 # workflow_name = f"{op_id}-delete-credentials-{vim_name}"
96
97 # Additional params for the workflow
98 providerconfig_name = f"{vim_name}-config"
99 provider_type = content["vim_type"]
100 osm_project_name = "osm_admin" # TODO: get project name from content
101
102 # Render workflow
103 manifest = self.render_jinja_template(
104 workflow_template,
105 output_file=None,
106 workflow_name=workflow_name,
107 git_fleet_url=f"{self._repo_base_url}/{self._repo_user}/fleet-osm.git",
108 git_sw_catalogs_url=f"{self._repo_base_url}/{self._repo_user}/sw-catalogs-osm.git",
109 providerconfig_name=providerconfig_name,
110 provider_type=provider_type,
111 osm_project_name=osm_project_name,
112 workflow_debug=self._workflow_debug,
113 workflow_dry_run=self._workflow_dry_run,
114 )
115 self.logger.debug(f"Workflow manifest: {manifest}")
116
117 # Submit workflow
118 self._kubectl.create_generic_object(
119 namespace="osm-workflows",
120 manifest_dict=yaml.safe_load(manifest),
121 api_group="argoproj.io",
122 api_plural="workflows",
123 api_version="v1alpha1",
124 )
125 return workflow_name
126
127
128async def update_cloud_credentials(self, op_id, op_params, content):
129 self.logger.info("Update cloud_credentials workflow Enter")
130 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
131
132 workflow_template = "launcher-update-providerconfig.j2"
133 workflow_name = f"update-providerconfig-{content['_id']}"
134 # vim_name = content["name"].lower()
135 vim_name = content.get("git_name", content["name"]).lower()
136 # workflow_name = f"{op_id}-update-credentials-{vim_name}"
137
138 # Create secret with creds
139 secret_name = workflow_name
140 secret_namespace = "osm-workflows"
141 secret_key = "creds"
142 secret_value = json.dumps(content["config"]["credentials"], indent=2)
143 await self.create_secret(
144 secret_name,
145 secret_namespace,
146 secret_key,
147 secret_value,
148 )
149 # Additional params for the workflow
150 providerconfig_name = f"{vim_name}-config"
151 provider_type = content["vim_type"]
152 osm_project_name = "osm_admin" # TODO: get project name from content
153 if provider_type == "gcp":
154 vim_tenant = content["vim_tenant_name"]
155 else:
156 vim_tenant = ""
157
158 # Render workflow
159 manifest = self.render_jinja_template(
160 workflow_template,
161 output_file=None,
162 workflow_name=workflow_name,
163 git_fleet_url=f"{self._repo_base_url}/{self._repo_user}/fleet-osm.git",
164 git_sw_catalogs_url=f"{self._repo_base_url}/{self._repo_user}/sw-catalogs-osm.git",
165 providerconfig_name=providerconfig_name,
166 provider_type=provider_type,
167 cred_secret_name=vim_name,
168 temp_cred_secret_name=secret_name,
169 public_key_mgmt=self._pubkey,
170 osm_project_name=osm_project_name,
171 target_gcp_project=vim_tenant,
172 workflow_debug=self._workflow_debug,
173 workflow_dry_run=self._workflow_dry_run,
174 )
175 self.logger.debug(f"Workflow manifest: {manifest}")
176
177 # Submit workflow
178 self._kubectl.create_generic_object(
179 namespace="osm-workflows",
180 manifest_dict=yaml.safe_load(manifest),
181 api_group="argoproj.io",
182 api_plural="workflows",
183 api_version="v1alpha1",
184 )
185 return workflow_name
186
187
188async def check_create_cloud_credentials(self, op_id, op_params, content):
189 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
190 return True, "OK"
191
192
193async def check_update_cloud_credentials(self, op_id, op_params, content):
194 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
195 return True, "OK"
196
197
198async def check_delete_cloud_credentials(self, op_id, op_params, content):
199 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
200 return True, "OK"