ingress_class: Optional[str]
ingress_whitelist_source_range: Optional[str]
tls_secret_name: Optional[str]
+ image_pull_policy: str
+ security_context: bool
@validator("site_url")
def validate_site_url(cls, v):
ip_network(v)
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 KafkaExporterCharm(CharmedOsmBase):
def __init__(self, *args) -> NoReturn:
if self.unit.is_leader():
self.dashboard_target.publish_info(
name="osm-kafka",
- dashboard=Path("files/kafka_exporter_dashboard.json").read_text(),
+ dashboard=Path("templates/kafka_exporter_dashboard.json").read_text(),
)
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 missing_relations:
self._check_missing_dependencies(config)
# Create Builder for the PodSpec
- pod_spec_builder = PodSpecV3Builder()
+ pod_spec_builder = PodSpecV3Builder(
+ enable_security_context=config.security_context
+ )
# Build container
- container_builder = ContainerV3Builder(self.app.name, image_info)
+ container_builder = ContainerV3Builder(
+ 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_http_readiness_probe(
path="/api/health",
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()