X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fgrafana%2Fsrc%2Fcharm.py;h=36bf69610a92fcc0d2ff97ce715139ca8f57c00d;hb=540d93716ee0a4c4ffd070120779c1c40f6f353c;hp=e20a0524ddda3d170e94db7e54648dad37c91822;hpb=0dc25b3c932a7831f23e8d93d6d75be5c284877e;p=osm%2Fdevops.git diff --git a/installers/charm/grafana/src/charm.py b/installers/charm/grafana/src/charm.py index e20a0524..36bf6961 100755 --- a/installers/charm/grafana/src/charm.py +++ b/installers/charm/grafana/src/charm.py @@ -39,6 +39,7 @@ from opslib.osm.pod import ( ContainerV3Builder, FilesV3Builder, IngressResourceV3Builder, + PodRestartPolicy, PodSpecV3Builder, ) from opslib.osm.validator import ModelValidator, validator @@ -59,6 +60,7 @@ class ConfigModel(ModelValidator): ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] image_pull_policy: str + security_context: bool @validator("log_level") def validate_log_level(cls, v): @@ -182,11 +184,26 @@ class GrafanaCharm(CharmedOsmBase): self.grafana_cluster.set_initial_password(admin_initial_password) # Create Builder for the PodSpec - pod_spec_builder = PodSpecV3Builder() + pod_spec_builder = PodSpecV3Builder( + enable_security_context=config.security_context + ) + + # 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 + self.app.name, + image_info, + config.image_pull_policy, + run_as_non_root=config.security_context, ) container_builder.add_port(name=self.app.name, port=config.port) container_builder.add_http_readiness_probe( @@ -220,24 +237,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)