X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fprometheus%2Fsrc%2Fcharm.py;h=cf4f9566e4ec3d65b9c1089195f470595a28f6ad;hb=da31d6e2625a67c6180080ec9433d0f8ebe1de64;hp=47533ddf6e346409beb340c2dc225e29d393c42b;hpb=c753dc5f89180d11c1049f6398d74a4f99d7acd5;p=osm%2Fdevops.git diff --git a/installers/charm/prometheus/src/charm.py b/installers/charm/prometheus/src/charm.py index 47533ddf..cf4f9566 100755 --- a/installers/charm/prometheus/src/charm.py +++ b/installers/charm/prometheus/src/charm.py @@ -27,6 +27,7 @@ import logging from typing import NoReturn, Optional from urllib.parse import urlparse +from oci_image import OCIImageResource from ops.framework import EventBase from ops.main import main from opslib.osm.charm import CharmedOsmBase @@ -41,6 +42,7 @@ from opslib.osm.validator import ( ModelValidator, validator, ) +import requests logger = logging.getLogger(__name__) @@ -53,6 +55,7 @@ class ConfigModel(ModelValidator): default_target: str max_file_size: int site_url: Optional[str] + cluster_issuer: Optional[str] ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] enable_web_admin_api: bool @@ -99,9 +102,24 @@ class PrometheusCharm(CharmedOsmBase): self._publish_prometheus_info, ) + # Registering actions + self.framework.observe( + self.on.backup_action, # pylint: disable=E1101 + self._on_backup_action, + ) + def _publish_prometheus_info(self, event: EventBase) -> NoReturn: self.prometheus.publish_info(self.app.name, PORT) + def _on_backup_action(self, event: EventBase) -> NoReturn: + url = f"http://{self.model.app.name}:{PORT}/api/v1/admin/tsdb/snapshot" + result = requests.post(url) + + if result.status_code == 200: + event.set_results({"backup-name": result.json()["name"]}) + else: + event.fail(f"status-code: {result.status_code}") + def _build_files(self, config: ConfigModel): files_builder = FilesV3Builder() files_builder.add_file( @@ -128,6 +146,15 @@ class PrometheusCharm(CharmedOsmBase): config = ConfigModel(**dict(self.config)) # Create Builder for the PodSpec pod_spec_builder = PodSpecV3Builder() + + # Build Backup Container + backup_image = OCIImageResource(self, "backup-image") + backup_image_info = backup_image.fetch() + backup_container_builder = ContainerV3Builder("prom-backup", backup_image_info) + backup_container = backup_container_builder.build() + # Add backup container to pod spec + pod_spec_builder.add_container(backup_container) + # Build Container container_builder = ContainerV3Builder(self.app.name, image_info) container_builder.add_port(name=self.app.name, port=PORT) @@ -170,6 +197,7 @@ class PrometheusCharm(CharmedOsmBase): if config.max_file_size > 0 else config.max_file_size ), + "kubernetes.io/ingress.class": "public", } ingress_resource_builder = IngressResourceV3Builder( f"{self.app.name}-ingress", annotations @@ -180,6 +208,9 @@ class PrometheusCharm(CharmedOsmBase): "nginx.ingress.kubernetes.io/whitelist-source-range" ] = config.ingress_whitelist_source_range + if config.cluster_issuer: + annotations["cert-manager.io/cluster-issuer"] = config.cluster_issuer + if parsed.scheme == "https": ingress_resource_builder.add_tls( [parsed.hostname], config.tls_secret_name