X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fnbi%2Fsrc%2Fcharm.py;h=0af41045ebf9c6da8ef3b1e02ba110a78c5d70a6;hb=da31d6e2625a67c6180080ec9433d0f8ebe1de64;hp=1f5812afc895096996a6d692e1dc240b03960c47;hpb=3cc0316794cc75ecffdf2b969b4ad98d0dd7e826;p=osm%2Fdevops.git diff --git a/installers/charm/nbi/src/charm.py b/installers/charm/nbi/src/charm.py index 1f5812af..0af41045 100755 --- a/installers/charm/nbi/src/charm.py +++ b/installers/charm/nbi/src/charm.py @@ -59,6 +59,7 @@ class ConfigModel(ModelValidator): cluster_issuer: Optional[str] ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] + mongodb_uri: Optional[str] @validator("auth_backend") def validate_auth_backend(cls, v): @@ -92,6 +93,12 @@ class ConfigModel(ModelValidator): ip_network(v) return v + @validator("mongodb_uri") + def validate_mongodb_uri(cls, v): + if v and not v.startswith("mongodb://"): + raise ValueError("mongodb_uri is not properly formed") + return v + class NbiCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -134,7 +141,7 @@ class NbiCharm(CharmedOsmBase): if self.kafka_client.is_missing_data_in_unit(): missing_relations.append("kafka") - if self.mongodb_client.is_missing_data_in_unit(): + if not config.mongodb_uri and self.mongodb_client.is_missing_data_in_unit(): missing_relations.append("mongodb") if self.prometheus_client.is_missing_data_in_app(): missing_relations.append("prometheus") @@ -148,10 +155,16 @@ class NbiCharm(CharmedOsmBase): def build_pod_spec(self, image_info): # Validate config config = ConfigModel(**dict(self.config)) + + if config.mongodb_uri and not self.mongodb_client.is_missing_data_in_unit(): + raise Exception("Mongodb data cannot be provided via config and relation") + # Check relations self._check_missing_dependencies(config) + # Create Builder for the PodSpec pod_spec_builder = PodSpecV3Builder() + # Build Init Container pod_spec_builder.add_init_container( { @@ -164,6 +177,7 @@ class NbiCharm(CharmedOsmBase): ], } ) + # Build Container container_builder = ContainerV3Builder(self.app.name, image_info) container_builder.add_port(name=self.app.name, port=PORT) @@ -189,13 +203,15 @@ class NbiCharm(CharmedOsmBase): "OSMNBI_MESSAGE_PORT": self.kafka_client.port, # Database configuration "OSMNBI_DATABASE_DRIVER": "mongo", - "OSMNBI_DATABASE_URI": self.mongodb_client.connection_string, + "OSMNBI_DATABASE_URI": config.mongodb_uri + or self.mongodb_client.connection_string, "OSMNBI_DATABASE_COMMONKEY": config.database_commonkey, # Storage configuration "OSMNBI_STORAGE_DRIVER": "mongo", "OSMNBI_STORAGE_PATH": "/app/storage", "OSMNBI_STORAGE_COLLECTION": "files", - "OSMNBI_STORAGE_URI": self.mongodb_client.connection_string, + "OSMNBI_STORAGE_URI": config.mongodb_uri + or self.mongodb_client.connection_string, # Prometheus configuration "OSMNBI_PROMETHEUS_HOST": self.prometheus_client.hostname, "OSMNBI_PROMETHEUS_PORT": self.prometheus_client.port, @@ -219,8 +235,10 @@ class NbiCharm(CharmedOsmBase): } ) container = container_builder.build() + # Add container to pod spec pod_spec_builder.add_container(container) + # Add ingress resources to pod spec if site url exists if config.site_url: parsed = urlparse(config.site_url) @@ -231,6 +249,7 @@ class NbiCharm(CharmedOsmBase): else config.max_file_size ), "nginx.ingress.kubernetes.io/backend-protocol": "HTTPS", + "kubernetes.io/ingress.class": "public", } ingress_resource_builder = IngressResourceV3Builder( f"{self.app.name}-ingress", annotations @@ -254,7 +273,9 @@ class NbiCharm(CharmedOsmBase): ingress_resource_builder.add_rule(parsed.hostname, self.app.name, PORT) ingress_resource = ingress_resource_builder.build() pod_spec_builder.add_ingress_resource(ingress_resource) + logger.debug(pod_spec_builder.build()) + return pod_spec_builder.build()