Feature 10991: Gather information relating to the KNF being deployed and inject it as labels in the Kubernetes objects

Change-Id: I5d78de8f369bd893a4a05287763909d2fe360b06
Signed-off-by: Pedro Pereira <pedrocjdpereira@av.it.pt>
diff --git a/n2vc/k8s_helm3_conn.py b/n2vc/k8s_helm3_conn.py
index b267c75..ed0bdaa 100644
--- a/n2vc/k8s_helm3_conn.py
+++ b/n2vc/k8s_helm3_conn.py
@@ -107,6 +107,10 @@
 
         self.log.debug("installing {} in cluster {}".format(kdu_model, cluster_uuid))
 
+        labels_dict = None
+        if db_dict:
+            labels_dict = await self._labels_dict(db_dict, kdu_instance)
+
         # sync local dir
         self.fs.sync(from_path=cluster_uuid)
 
@@ -140,6 +144,7 @@
             timeout=timeout,
             params=params,
             db_dict=db_dict,
+            labels=labels_dict,
             kdu_name=kdu_name,
             namespace=namespace,
         )
@@ -448,6 +453,7 @@
         kdu_model: str,
         kdu_instance: str,
         namespace: str,
+        labels: dict,
         params_str: str,
         version: str,
         atomic: bool,
@@ -472,9 +478,30 @@
         if version:
             version_str = "--version {}".format(version)
 
+        # labels
+        post_renderer_args = []
+        post_renderer_str = post_renderer_args_str = ""
+        if labels and self.podLabels_post_renderer_path:
+            post_renderer_args.append(
+                "{}={}".format(
+                    self.podLabels_post_renderer_path,
+                    " ".join(
+                        ["{}:{}".format(key, value) for key, value in labels.items()]
+                    ),
+                )
+            )
+
+        if len(post_renderer_args) > 0 and self.main_post_renderer_path:
+            post_renderer_str = "--post-renderer {}".format(
+                self.main_post_renderer_path,
+            )
+            post_renderer_args_str += (
+                "--post-renderer-args '" + ",".join(post_renderer_args) + "'"
+            )
+
         command = (
             "env KUBECONFIG={kubeconfig} {helm} install {name} {atomic} --output yaml  "
-            "{params} {timeout} {ns} {model} {ver}".format(
+            "{params} {timeout} {ns} {post_renderer} {post_renderer_args} {model} {ver}".format(
                 kubeconfig=kubeconfig,
                 helm=self._helm_command,
                 name=quote(kdu_instance),
@@ -482,6 +509,8 @@
                 params=params_str,
                 timeout=timeout_str,
                 ns=namespace_str,
+                post_renderer=post_renderer_str,
+                post_renderer_args=post_renderer_args_str,
                 model=quote(kdu_model),
                 ver=version_str,
             )
@@ -494,6 +523,7 @@
         kdu_instance: str,
         namespace: str,
         scale: int,
+        labels: dict,
         version: str,
         atomic: bool,
         replica_str: str,
@@ -533,6 +563,7 @@
             kdu_instance=kdu_instance,
             namespace=namespace,
             params_str=scale_str,
+            labels=labels,
             version=version,
             atomic=atomic,
             timeout=timeout,
@@ -545,6 +576,7 @@
         kdu_instance: str,
         namespace: str,
         params_str: str,
+        labels: dict,
         version: str,
         atomic: bool,
         timeout: float,
@@ -606,9 +638,31 @@
             on_values_str = "--reuse-values"
         elif reset_then_reuse_values:
             on_values_str = "--reset-then-reuse-values"
+
+        # labels
+        post_renderer_args = []
+        post_renderer_str = post_renderer_args_str = ""
+        if labels and self.podLabels_post_renderer_path:
+            post_renderer_args.append(
+                "{}={}".format(
+                    self.podLabels_post_renderer_path,
+                    " ".join(
+                        ["{}:{}".format(key, value) for key, value in labels.items()]
+                    ),
+                )
+            )
+
+        if len(post_renderer_args) > 0 and self.main_post_renderer_path:
+            post_renderer_str = "--post-renderer {}".format(
+                self.main_post_renderer_path,
+            )
+            post_renderer_args_str += (
+                "--post-renderer-args '" + ",".join(post_renderer_args) + "'"
+            )
+
         command = (
             "env KUBECONFIG={kubeconfig} {helm} upgrade {name} {model} {namespace} {atomic} {force}"
-            "--output yaml {params} {timeout} {on_values} {ver}"
+            "--output yaml {params} {timeout} {post_renderer} {post_renderer_args} {on_values} {ver}"
         ).format(
             kubeconfig=kubeconfig,
             helm=self._helm_command,
@@ -618,6 +672,8 @@
             force=force_str,
             params=params_str,
             timeout=timeout_str,
+            post_renderer=post_renderer_str,
+            post_renderer_args=post_renderer_args_str,
             model=quote(kdu_model),
             on_values=on_values_str,
             ver=version_str,