Source code for controller.commands.start

"""
Start services for the current configuration
"""

import time
from typing import List

import typer
from python_on_whales.exceptions import DockerException

from controller import log
from controller.app import Application, Configuration
from controller.deploy.builds import verify_available_images
from controller.deploy.docker import Docker


[docs] def wait_stack_deploy(docker: Docker) -> None: MAX = 60 for i in range(0, MAX): try: if docker.get_running_services(): break log.info("Stack is still starting, waiting... [{}/{}]", i + 1, MAX) time.sleep(1) # Can happens when the stack is near to be deployed except DockerException: # pragma: no cover pass
[docs] @Application.app.command(help="Start services for the current configuration") # Maybe to be renamed in deploy? def start( services: List[str] = typer.Argument( None, help="Services to be started", shell_complete=Application.autocomplete_service, ), force: bool = typer.Option( False, "--force", "-f", help="Force containers restart", show_default=False, ), ) -> None: Application.print_command(Application.serialize_parameter("", services)) Application.get_controller().controller_init(services) docker = Docker() if Configuration.swarm_mode: docker.registry.ping() verify_available_images( Application.data.services, Application.data.compose_config, Application.data.base_services, ) if Configuration.swarm_mode: docker.compose.dump_config(Application.data.services) docker.swarm.deploy() if force: for service in Application.data.services: docker.client.service.update( f"{Configuration.project}_{service}", detach=True, force=True ) wait_stack_deploy(docker) else: docker.compose.start_containers(Application.data.services, force=force) log.info("Stack started")