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
ModelValidator,
validator,
)
+import requests
logger = logging.getLogger(__name__)
default_target: str
max_file_size: int
site_url: Optional[str]
+ cluster_issuer: Optional[str]
+ ingress_class: Optional[str]
ingress_whitelist_source_range: Optional[str]
tls_secret_name: Optional[str]
enable_web_admin_api: bool
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(
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)
str(config.max_file_size) + "m"
if config.max_file_size > 0
else config.max_file_size
- ),
+ )
}
+ if config.ingress_class:
+ annotations["kubernetes.io/ingress.class"] = config.ingress_class
ingress_resource_builder = IngressResourceV3Builder(
f"{self.app.name}-ingress", annotations
)
"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