blob: 509733ebccead424f24bc1fe1cc74dee37a0f221 [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
20from osm_lcm.lcm_utils import LcmException
21
22
23async def create_oka(self, op_id, op_params, content):
24 self.logger.info("Create OKA workflow Enter")
25 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
26
27 workflow_template = "launcher-create-oka.j2"
28 workflow_name = f"create-oka-{content['_id']}"
29
30 # Additional params for the workflow
31 oka_name = content["git_name"].lower()
32 oka_type = "infra-controllers"
33 osm_project_name = "osm_admin" # TODO: get project name from content
34
35 # Get the OKA package
36 oka_fs_info = content["_admin"]["storage"]
37 oka_folder = f"{oka_fs_info['path']}{oka_fs_info['folder']}"
38 oka_filename = oka_fs_info["zipfile"]
39 self.fs.sync(oka_folder)
40 if not self.fs.file_exists(f"{oka_folder}/{oka_filename}"):
41 raise LcmException(message="Not able to find oka", bad_args=["oka_path"])
42
43 # Create temporary volume for the OKA package and copy the content
44 temp_volume_name = f"temp-pvc-oka-{op_id}"
45 await self._kubectl.create_pvc_with_content(
46 name=temp_volume_name,
47 namespace="osm-workflows",
48 src_folder=oka_folder,
49 filename=oka_filename,
50 )
51
52 # Render workflow
53 manifest = self.render_jinja_template(
54 workflow_template,
55 output_file=None,
56 workflow_name=workflow_name,
57 git_fleet_url=f"{self._repo_base_url}/{self._repo_user}/fleet-osm.git",
58 git_sw_catalogs_url=f"{self._repo_base_url}/{self._repo_user}/sw-catalogs-osm.git",
59 oka_name=oka_name,
60 oka_type=oka_type,
61 osm_project_name=osm_project_name,
62 temp_volume_name=temp_volume_name,
63 workflow_debug=self._workflow_debug,
64 workflow_dry_run=self._workflow_dry_run,
65 )
66 self.logger.info(manifest)
67
68 # Submit workflow
69 self._kubectl.create_generic_object(
70 namespace="osm-workflows",
71 manifest_dict=yaml.safe_load(manifest),
72 api_group="argoproj.io",
73 api_plural="workflows",
74 api_version="v1alpha1",
75 )
76 return workflow_name
77
78
79async def update_oka(self, op_id, op_params, content):
80 self.logger.info("Update OKA workflow Enter")
81 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
82
83 workflow_template = "launcher-update-oka.j2"
84 workflow_name = f"update-oka-{content['_id']}"
85
86 # Additional params for the workflow
87 oka_name = content["git_name"].lower()
88 oka_type = "infra-controllers"
89 osm_project_name = "osm_admin" # TODO: get project name from content
90
91 # Get the OKA package
92 oka_fs_info = content["_admin"]["storage"]
93 oka_folder = (
94 f"{oka_fs_info['path']}/{oka_fs_info['folder']}/{oka_fs_info['zipfile']}"
95 )
96 oka_filename = "package.tar.gz"
97 # Sync fs?
98
99 # Create temporary volume for the OKA package and copy the content
100 temp_volume_name = f"temp-pvc-oka-{op_id}"
101 await self._kubectl.create_pvc_with_content(
102 name=temp_volume_name,
103 namespace="osm-workflows",
104 src_folder=oka_folder,
105 filename=oka_filename,
106 )
107
108 # Render workflow
109 manifest = self.render_jinja_template(
110 workflow_template,
111 output_file=None,
112 workflow_name=workflow_name,
113 git_fleet_url=f"{self._repo_base_url}/{self._repo_user}/fleet-osm.git",
114 git_sw_catalogs_url=f"{self._repo_base_url}/{self._repo_user}/sw-catalogs-osm.git",
115 oka_name=oka_name,
116 oka_type=oka_type,
117 osm_project_name=osm_project_name,
118 temp_volume_name=temp_volume_name,
119 workflow_debug=self._workflow_debug,
120 workflow_dry_run=self._workflow_dry_run,
121 )
122 self.logger.info(manifest)
123
124 # Submit workflow
125 self._kubectl.create_generic_object(
126 namespace="osm-workflows",
127 manifest_dict=yaml.safe_load(manifest),
128 api_group="argoproj.io",
129 api_plural="workflows",
130 api_version="v1alpha1",
131 )
132 return workflow_name
133
134
135async def delete_oka(self, op_id, op_params, content):
136 self.logger.info("Delete OKA workflow Enter")
137 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
138
139 workflow_template = "launcher-delete-oka.j2"
140 workflow_name = f"delete-oka-{content['_id']}"
141
142 # Additional params for the workflow
143 oka_name = content["git_name"].lower()
144 oka_type = "infra-controllers"
145 osm_project_name = "osm_admin" # TODO: get project name from content
146
147 # Render workflow
148 manifest = self.render_jinja_template(
149 workflow_template,
150 output_file=None,
151 workflow_name=workflow_name,
152 git_fleet_url=f"{self._repo_base_url}/{self._repo_user}/fleet-osm.git",
153 git_sw_catalogs_url=f"{self._repo_base_url}/{self._repo_user}/sw-catalogs-osm.git",
154 oka_name=oka_name,
155 oka_type=oka_type,
156 osm_project_name=osm_project_name,
157 workflow_debug=self._workflow_debug,
158 workflow_dry_run=self._workflow_dry_run,
159 )
160 self.logger.info(manifest)
161
162 # Submit workflow
163 self._kubectl.create_generic_object(
164 namespace="osm-workflows",
165 manifest_dict=yaml.safe_load(manifest),
166 api_group="argoproj.io",
167 api_plural="workflows",
168 api_version="v1alpha1",
169 )
170 return workflow_name
171
172
173async def check_create_oka(self, op_id, op_params, content):
174 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
175 return True, "OK"
176
177
178async def check_update_oka(self, op_id, op_params, content):
179 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
180 return True, "OK"
181
182
183async def check_delete_oka(self, op_id, op_params, content):
184 self.logger.info(f"Operation {op_id}. Params: {op_params}. Content: {content}")
185 return True, "OK"