X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fpla%2Fsrc%2Fcharm.py;h=3238dde5408af53e282c46fbe320bdc829873e21;hb=refs%2Fchanges%2F53%2F11253%2F2;hp=2a08ea59ffaea6c9774d8c5220baa45db922f9b1;hpb=3ddbbd1f6c70306d13db0976e1e6b3bda0c69abd;p=osm%2Fdevops.git diff --git a/installers/charm/pla/src/charm.py b/installers/charm/pla/src/charm.py index 2a08ea59..3238dde5 100755 --- a/installers/charm/pla/src/charm.py +++ b/installers/charm/pla/src/charm.py @@ -32,6 +32,7 @@ from opslib.osm.interfaces.kafka import KafkaClient from opslib.osm.interfaces.mongo import MongoClient from opslib.osm.pod import ( ContainerV3Builder, + PodRestartPolicy, PodSpecV3Builder, ) from opslib.osm.validator import ModelValidator, validator @@ -46,7 +47,8 @@ class ConfigModel(ModelValidator): database_commonkey: str mongodb_uri: Optional[str] log_level: str - image_pull_policy: Optional[str] + image_pull_policy: str + security_context: bool @validator("log_level") def validate_log_level(cls, v): @@ -88,7 +90,10 @@ class PlaCharm(CharmedOsmBase): def _check_missing_dependencies(self, config: ConfigModel): missing_relations = [] - if self.kafka_client.is_missing_data_in_unit(): + if ( + self.kafka_client.is_missing_data_in_unit() + and self.kafka_client.is_missing_data_in_app() + ): missing_relations.append("kafka") if not config.mongodb_uri and self.mongodb_client.is_missing_data_in_unit(): missing_relations.append("mongodb") @@ -107,11 +112,26 @@ class PlaCharm(CharmedOsmBase): self._check_missing_dependencies(config) # Create Builder for the PodSpec - pod_spec_builder = PodSpecV3Builder() + pod_spec_builder = PodSpecV3Builder( + enable_security_context=config.security_context + ) + + # Add secrets to the pod + mongodb_secret_name = f"{self.app.name}-mongodb-secret" + pod_spec_builder.add_secret( + mongodb_secret_name, + { + "uri": config.mongodb_uri or self.mongodb_client.connection_string, + "commonkey": config.database_commonkey, + }, + ) # 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=PORT) container_builder.add_envs( @@ -125,14 +145,24 @@ class PlaCharm(CharmedOsmBase): "OSMPLA_MESSAGE_PORT": self.kafka_client.port, # Database configuration "OSMPLA_DATABASE_DRIVER": "mongo", - "OSMPLA_DATABASE_URI": config.mongodb_uri - or self.mongodb_client.connection_string, - "OSMPLA_DATABASE_COMMONKEY": config.database_commonkey, } ) + container_builder.add_secret_envs( + secret_name=mongodb_secret_name, + envs={ + "OSMPLA_DATABASE_URI": "uri", + "OSMPLA_DATABASE_COMMONKEY": "commonkey", + }, + ) + container = container_builder.build() + # Add Pod restart policy + restart_policy = PodRestartPolicy() + restart_policy.add_secrets(secret_names=(mongodb_secret_name)) + pod_spec_builder.set_restart_policy(restart_policy) + # Add container to pod spec pod_spec_builder.add_container(container)