Update the repo for a helm KDU before install and upgrade 18/12018/2
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Fri, 8 Apr 2022 20:53:25 +0000 (22:53 +0200)
committergarciadav <david.garcia@canonical.com>
Mon, 23 May 2022 07:42:54 +0000 (09:42 +0200)
Change-Id: Ibe4efcaa00b0340502a9476b07d28860d33f7083
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
n2vc/k8s_helm_base_conn.py

index 37df6c1..269f316 100644 (file)
@@ -189,6 +189,31 @@ class K8sHelmBaseConnector(K8sConnector):
         # sync fs
         self.fs.reverse_sync(from_path=cluster_uuid)
 
+    async def repo_update(self, cluster_uuid: str, name: str, repo_type: str = "chart"):
+        self.log.debug(
+            "Cluster {}, updating {} repository {}".format(
+                cluster_uuid, repo_type, name
+            )
+        )
+
+        # init_env
+        paths, env = self._init_paths_env(
+            cluster_name=cluster_uuid, create_if_not_exist=True
+        )
+
+        # sync local dir
+        self.fs.sync(from_path=cluster_uuid)
+
+        # helm repo update
+        command = "{} repo update {}".format(self._helm_command, name)
+        self.log.debug("updating repo: {}".format(command))
+        await self._local_async_exec(
+            command=command, raise_exception_on_error=False, env=env
+        )
+
+        # sync fs
+        self.fs.reverse_sync(from_path=cluster_uuid)
+
     async def repo_list(self, cluster_uuid: str) -> list:
         """
         Get the list of registered repositories
@@ -355,6 +380,10 @@ class K8sHelmBaseConnector(K8sConnector):
                 version = str(parts[1])
                 kdu_model = parts[0]
 
+        repo = self._split_repo(kdu_model)
+        if repo:
+            self.repo_update(cluster_id, repo)
+
         command = self._get_install_command(
             kdu_model,
             kdu_instance,
@@ -463,6 +492,10 @@ class K8sHelmBaseConnector(K8sConnector):
                 version = str(parts[1])
                 kdu_model = parts[0]
 
+        repo = self._split_repo(kdu_model)
+        if repo:
+            self.repo_update(cluster_uuid, repo)
+
         command = self._get_upgrade_command(
             kdu_model,
             kdu_instance,
@@ -1539,3 +1572,30 @@ class K8sHelmBaseConnector(K8sConnector):
 
         name = name + get_random_number()
         return name.lower()
+
+    def _split_version(self, kdu_model: str) -> (str, str):
+        version = None
+        if ":" in kdu_model:
+            parts = kdu_model.split(sep=":")
+            if len(parts) == 2:
+                version = str(parts[1])
+                kdu_model = parts[0]
+        return kdu_model, version
+
+    async def _split_repo(self, kdu_model: str) -> str:
+        repo_name = None
+        idx = kdu_model.find("/")
+        if idx >= 0:
+            repo_name = kdu_model[:idx]
+        return repo_name
+
+    async def _find_repo(self, kdu_model: str, cluster_uuid: str) -> str:
+        repo_url = None
+        idx = kdu_model.find("/")
+        if idx >= 0:
+            repo_name = kdu_model[:idx]
+            # Find repository link
+            local_repo_list = await self.repo_list(cluster_uuid)
+            for repo in local_repo_list:
+                repo_url = repo["url"] if repo["name"] == repo_name else None
+        return repo_url