Add secret-management in Charmed OSM
[osm/devops.git] / installers / charm / grafana / src / charm.py
index e20a052..78ec0e3 100755 (executable)
@@ -39,6 +39,7 @@ from opslib.osm.pod import (
     ContainerV3Builder,
     FilesV3Builder,
     IngressResourceV3Builder,
+    PodRestartPolicy,
     PodSpecV3Builder,
 )
 from opslib.osm.validator import ModelValidator, validator
@@ -184,6 +185,16 @@ class GrafanaCharm(CharmedOsmBase):
         # Create Builder for the PodSpec
         pod_spec_builder = PodSpecV3Builder()
 
+        # Add secrets to the pod
+        grafana_secret_name = f"{self.app.name}-admin-secret"
+        pod_spec_builder.add_secret(
+            grafana_secret_name,
+            {
+                "admin-password": admin_initial_password,
+                "mysql-url": mysql_config.mysql_uri or self.mysql_client.get_uri(),
+            },
+        )
+
         # Build Container
         container_builder = ContainerV3Builder(
             self.app.name, image_info, config.image_pull_policy
@@ -220,24 +231,23 @@ class GrafanaCharm(CharmedOsmBase):
                 "GF_SERVER_HTTP_PORT": config.port,
                 "GF_LOG_LEVEL": config.log_level,
                 "GF_SECURITY_ADMIN_USER": config.admin_user,
-                "GF_SECURITY_ADMIN_PASSWORD": {
-                    "secret": {"name": "grafana-admin-secret", "key": "admin-password"}
-                },
-                "GF_DATABASE_URL": {
-                    "secret": {"name": "grafana-admin-secret", "key": "mysql-url"}
-                },
+            }
+        )
+        container_builder.add_secret_envs(
+            secret_name=grafana_secret_name,
+            envs={
+                "GF_SECURITY_ADMIN_PASSWORD": "admin-password",
+                "GF_DATABASE_URL": "mysql-url",
             },
         )
         container = container_builder.build()
-        # Add container to pod spec
         pod_spec_builder.add_container(container)
-        pod_spec_builder.add_secret(
-            "grafana-admin-secret",
-            {
-                "admin-password": admin_initial_password,
-                "mysql-url": mysql_config.mysql_uri or self.mysql_client.get_uri(),
-            },
-        )
+
+        # Add Pod restart policy
+        restart_policy = PodRestartPolicy()
+        restart_policy.add_secrets(secret_names=(grafana_secret_name,))
+        pod_spec_builder.set_restart_policy(restart_policy)
+
         # Add ingress resources to pod spec if site url exists
         if config.site_url:
             parsed = urlparse(config.site_url)