X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fgrafana%2Fsrc%2Fcharm.py;h=caa0277969c9ccc3f5cdecbe06dc032a1a025cd2;hb=ee303f97b9afe276076f56220d73c6382aa65c48;hp=78ec0e3479dbe547339f7de18efc2a93d8c4b9e8;hpb=141d935cdb913100f3abdfaf52a67d90dd6b5016;p=osm%2Fdevops.git diff --git a/installers/charm/grafana/src/charm.py b/installers/charm/grafana/src/charm.py index 78ec0e34..caa02779 100755 --- a/installers/charm/grafana/src/charm.py +++ b/installers/charm/grafana/src/charm.py @@ -60,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): @@ -144,11 +145,25 @@ class GrafanaCharm(CharmedOsmBase): def _build_datasources_files(self): files_builder = FilesV3Builder() + prometheus_user = self.prometheus_client.user + prometheus_password = self.prometheus_client.password + enable_basic_auth = all([prometheus_user, prometheus_password]) + kwargs = { + "prometheus_host": self.prometheus_client.hostname, + "prometheus_port": self.prometheus_client.port, + "enable_basic_auth": enable_basic_auth, + "user": "", + "password": "", + } + if enable_basic_auth: + kwargs["user"] = f"basic_auth_user: {prometheus_user}" + kwargs[ + "password" + ] = f"secure_json_data:\n basicAuthPassword: {prometheus_password}" files_builder.add_file( "datasource_prometheus.yaml", Template(Path("templates/default_datasources.yaml").read_text()).substitute( - prometheus_host=self.prometheus_client.hostname, - prometheus_port=self.prometheus_client.port, + **kwargs ), ) return files_builder.build() @@ -183,7 +198,9 @@ 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" @@ -192,12 +209,17 @@ class GrafanaCharm(CharmedOsmBase): { "admin-password": admin_initial_password, "mysql-url": mysql_config.mysql_uri or self.mysql_client.get_uri(), + "prometheus-user": self.prometheus_client.user, + "prometheus-password": self.prometheus_client.password, }, ) # 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( @@ -225,7 +247,6 @@ class GrafanaCharm(CharmedOsmBase): "/etc/grafana/provisioning/datasources/", self._build_datasources_files(), ) - container_builder.add_envs( { "GF_SERVER_HTTP_PORT": config.port, @@ -238,6 +259,8 @@ class GrafanaCharm(CharmedOsmBase): envs={ "GF_SECURITY_ADMIN_PASSWORD": "admin-password", "GF_DATABASE_URL": "mysql-url", + "PROMETHEUS_USER": "prometheus-user", + "PROMETHEUS_PASSWORD": "prometheus-password", }, ) container = container_builder.build()