X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fpla%2Fsrc%2Fcharm.py;h=2a08ea59ffaea6c9774d8c5220baa45db922f9b1;hb=3ddbbd1f6c70306d13db0976e1e6b3bda0c69abd;hp=15ae0958fa70b863049dfd5c0ccf66d8023ce3a3;hpb=c753dc5f89180d11c1049f6398d74a4f99d7acd5;p=osm%2Fdevops.git diff --git a/installers/charm/pla/src/charm.py b/installers/charm/pla/src/charm.py index 15ae0958..2a08ea59 100755 --- a/installers/charm/pla/src/charm.py +++ b/installers/charm/pla/src/charm.py @@ -24,7 +24,7 @@ import logging -from typing import NoReturn +from typing import NoReturn, Optional from ops.main import main from opslib.osm.charm import CharmedOsmBase, RelationsMissing @@ -44,7 +44,9 @@ PORT = 9999 class ConfigModel(ModelValidator): database_commonkey: str + mongodb_uri: Optional[str] log_level: str + image_pull_policy: Optional[str] @validator("log_level") def validate_log_level(cls, v): @@ -52,6 +54,24 @@ class ConfigModel(ModelValidator): raise ValueError("value must be INFO or DEBUG") 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 + + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class PlaCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -70,7 +90,7 @@ class PlaCharm(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 missing_relations: @@ -79,12 +99,20 @@ class PlaCharm(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 Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_envs( { @@ -97,14 +125,17 @@ class PlaCharm(CharmedOsmBase): "OSMPLA_MESSAGE_PORT": self.kafka_client.port, # Database configuration "OSMPLA_DATABASE_DRIVER": "mongo", - "OSMPLA_DATABASE_URI": self.mongodb_client.connection_string, + "OSMPLA_DATABASE_URI": config.mongodb_uri + or self.mongodb_client.connection_string, "OSMPLA_DATABASE_COMMONKEY": config.database_commonkey, } ) container = container_builder.build() + # Add container to pod spec pod_spec_builder.add_container(container) + return pod_spec_builder.build()