Spaces:
Runtime error
Runtime error
from typing import Optional, Dict, Any | |
from phi.app.db_app import DbApp | |
from phi.k8s.app.base import ( | |
K8sApp, | |
AppVolumeType, | |
ContainerContext, | |
ServiceType, # noqa: F401 | |
RestartPolicy, # noqa: F401 | |
ImagePullPolicy, # noqa: F401 | |
) | |
class Redis(K8sApp, DbApp): | |
# -*- App Name | |
name: str = "redis" | |
# -*- Image Configuration | |
image_name: str = "redis" | |
image_tag: str = "7.2.0" | |
# -*- App Ports | |
# Open a container port if open_port=True | |
open_port: bool = True | |
port_number: int = 6379 | |
# Port name for the opened port | |
container_port_name: str = "redis" | |
# -*- Service Configuration | |
create_service: bool = True | |
# -*- Redis Volume | |
# Create a volume for redis storage | |
create_volume: bool = True | |
volume_type: AppVolumeType = AppVolumeType.EmptyDir | |
# Path to mount the volume inside the container | |
# should be the parent directory of pgdata defined above | |
volume_container_path: str = "/data" | |
# -*- If volume_type is AwsEbs | |
ebs_volume: Optional[Any] = None | |
# Add NodeSelectors to Pods, so they are scheduled in the same region and zone as the ebs_volume | |
schedule_pods_in_ebs_topology: bool = True | |
# -*- Redis Configuration | |
# Provide REDIS_PASSWORD as redis_password or REDIS_PASSWORD in secrets_file | |
redis_password: Optional[str] = None | |
# Provide REDIS_SCHEMA as redis_schema or REDIS_SCHEMA in secrets_file | |
redis_schema: Optional[str] = None | |
redis_driver: str = "redis" | |
logging_level: str = "debug" | |
def get_db_password(self) -> Optional[str]: | |
return self.redis_password or self.get_secret_from_file("REDIS_PASSWORD") | |
def get_db_database(self) -> Optional[str]: | |
return self.redis_schema or self.get_secret_from_file("REDIS_SCHEMA") | |
def get_db_driver(self) -> Optional[str]: | |
return self.redis_driver | |
def get_db_host(self) -> Optional[str]: | |
return self.get_service_name() | |
def get_db_port(self) -> Optional[int]: | |
return self.get_service_port() | |
def get_db_connection(self) -> Optional[str]: | |
password = self.get_db_password() | |
password_str = f"{password}@" if password else "" | |
schema = self.get_db_database() | |
driver = self.get_db_driver() | |
host = self.get_db_host() | |
port = self.get_db_port() | |
return f"{driver}://{password_str}{host}:{port}/{schema}" | |
def get_db_connection_local(self) -> Optional[str]: | |
password = self.get_db_password() | |
password_str = f"{password}@" if password else "" | |
schema = self.get_db_database() | |
driver = self.get_db_driver() | |
host = self.get_db_host_local() | |
port = self.get_db_port_local() | |
return f"{driver}://{password_str}{host}:{port}/{schema}" | |
def get_container_env(self, container_context: ContainerContext) -> Dict[str, str]: | |
# Container Environment | |
container_env: Dict[str, str] = self.container_env or {} | |
# Update the container env using env_file | |
env_data_from_file = self.get_env_file_data() | |
if env_data_from_file is not None: | |
container_env.update({k: str(v) for k, v in env_data_from_file.items() if v is not None}) | |
# Update the container env with user provided env_vars | |
# this overwrites any existing variables with the same key | |
if self.env_vars is not None and isinstance(self.env_vars, dict): | |
container_env.update({k: str(v) for k, v in self.env_vars.items() if v is not None}) | |
return container_env | |