Spaces:
Runtime error
Runtime error
File size: 3,558 Bytes
105b369 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
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
|