import typer
from glom import glom
from controller import print_and_exit
from controller.app import Application, Configuration
from controller.deploy.builds import verify_available_images
from controller.deploy.docker import Docker
[docs]
@Application.app.command(help="Scale the number of containers for a service")
def scale(
scaling: str = typer.Argument(..., help="scale SERVICE to NUM_REPLICA")
) -> None:
Application.print_command(Application.serialize_parameter("", scaling))
Application.get_controller().controller_init()
options = scaling.split("=")
if len(options) != 2:
scale_var = f"DEFAULT_SCALE_{scaling.upper()}"
nreplicas = glom(Configuration.specs, f"variables.env.{scale_var}", default="1")
service = scaling
else:
service, nreplicas = options
if isinstance(nreplicas, str) and not nreplicas.isnumeric():
print_and_exit("Invalid number of replicas: {}", nreplicas)
verify_available_images(
[service],
Application.data.compose_config,
Application.data.base_services,
)
docker = Docker()
docker.compose.start_containers([service], scales={service: int(nreplicas)})