-
- def _on_nbi_relation_changed(self, event: EventBase) -> NoReturn:
- """Reads information about the nbi relation.
-
- Args:
- event (EventBase): NBI relation event.
- """
- if not event.unit in event.relation.data:
- return
- relation_data = event.relation.data[event.unit]
- nbi_host = relation_data.get("host")
- nbi_port = relation_data.get("port")
-
- if (
- nbi_host
- and nbi_port
- and (self.state.nbi_host != nbi_host or self.state.nbi_port != nbi_port)
- ):
- self.state.nbi_host = nbi_host
- self.state.nbi_port = nbi_port
- self.on.configure_pod.emit()
-
- def _on_nbi_relation_departed(self, event: EventBase) -> NoReturn:
- """Clears data from nbi relation.
-
- Args:
- event (EventBase): NBI relation event.
- """
- self.state.nbi_host = None
- self.state.nbi_port = None
- self.on.configure_pod.emit()
-
- def _missing_relations(self) -> str:
- """Checks if there missing relations.
-
- Returns:
- str: string with missing relations
- """
- data_status = {
- "nbi": self.state.nbi_host,
- }
-
- missing_relations = [k for k, v in data_status.items() if not v]
-
- return ", ".join(missing_relations)
-
- @property
- def relation_state(self) -> Dict[str, Any]:
- """Collects relation state configuration for pod spec assembly.
-
- Returns:
- Dict[str, Any]: relation state information.
- """
- relation_state = {
- "nbi_host": self.state.nbi_host,
- "nbi_port": self.state.nbi_port,
- }
- return relation_state
-
- def configure_pod(self, event: EventBase) -> NoReturn:
- """Assemble the pod spec and apply it, if possible.
-
- Args:
- event (EventBase): Hook or Relation event that started the
- function.
- """
- if missing := self._missing_relations():
- self.unit.status = BlockedStatus(
- f"Waiting for {missing} relation{'s' if ',' in missing else ''}"
- )
- return
-
- if not self.unit.is_leader():
- self.unit.status = ActiveStatus("ready")
- return
-
- self.unit.status = MaintenanceStatus("Assembling pod spec")
-
- # Fetch image information
- try:
- self.unit.status = MaintenanceStatus("Fetching image information")
- image_info = self.image.fetch()
- except OCIImageResourceError:
- self.unit.status = BlockedStatus("Error fetching image information")
- return
-
- try:
- pod_spec = make_pod_spec(
- image_info,
- self.config,
- self.relation_state,
- self.model.app.name,
+ container_builder.add_tcpsocket_liveness_probe(
+ config.port,
+ initial_delay_seconds=45,
+ timeout_seconds=15,
+ )
+ container_builder.add_volume_config(
+ "configuration",
+ "/etc/nginx/sites-available/",
+ self._build_files(config),
+ )
+ # 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)
+ annotations = {
+ "nginx.ingress.kubernetes.io/proxy-body-size": "{}".format(
+ str(config.max_file_size) + "m"
+ if config.max_file_size > 0
+ else config.max_file_size
+ ),
+ }
+ ingress_resource_builder = IngressResourceV3Builder(
+ f"{self.app.name}-ingress", annotations