diff --git a/kiwi_scp/commands/cmd_pull.py b/kiwi_scp/commands/cmd_pull.py new file mode 100644 index 0000000..b5f0517 --- /dev/null +++ b/kiwi_scp/commands/cmd_pull.py @@ -0,0 +1,33 @@ +from typing import List + +import click + +from .cmd import KiwiCommandType, KiwiCommand +from .decorators import kiwi_command +from ..executable import COMPOSE_EXE +from ..instance import Instance +from ..project import Project +from ..services import Services + + +@kiwi_command( + short_help="Pull docker images", +) +class PullCommand(KiwiCommand): + """Pull images for the whole instance, a project or service(s) inside a project""" + + type = KiwiCommandType.SERVICES + enabled_only = True + + @classmethod + def run_for_filtered_services(cls, instance: Instance, project: Project, services: Services, + new_service_names: List[str], **kwargs) -> None: + if not services: + if not click.confirm( + "Did not find any of those services. \n" + f"Pull images for the entire project {project.name} instead?", + default=True + ): + return + + COMPOSE_EXE.run(["pull", "--ignore-pull-failures", *services.names], **project.process_kwargs) diff --git a/kiwi_scp/commands/cmd_push.py b/kiwi_scp/commands/cmd_push.py new file mode 100644 index 0000000..999677b --- /dev/null +++ b/kiwi_scp/commands/cmd_push.py @@ -0,0 +1,33 @@ +from typing import List + +import click + +from .cmd import KiwiCommandType, KiwiCommand +from .decorators import kiwi_command +from ..executable import COMPOSE_EXE +from ..instance import Instance +from ..project import Project +from ..services import Services + + +@kiwi_command( + short_help="Push docker images", +) +class PushCommand(KiwiCommand): + """Push images for the whole instance, a project or service(s) inside a project""" + + type = KiwiCommandType.SERVICES + enabled_only = True + + @classmethod + def run_for_filtered_services(cls, instance: Instance, project: Project, services: Services, + new_service_names: List[str], **kwargs) -> None: + if not services: + if not click.confirm( + "Did not find any of those services. \n" + f"Push images for the entire project {project.name} instead?", + default=True + ): + return + + COMPOSE_EXE.run(["push", *services.names], **project.process_kwargs) diff --git a/kiwi_scp/commands/cmd_restart.py b/kiwi_scp/commands/cmd_restart.py new file mode 100644 index 0000000..fbd1cf3 --- /dev/null +++ b/kiwi_scp/commands/cmd_restart.py @@ -0,0 +1,48 @@ +from typing import List + +import click + +from .cmd import KiwiCommandType, KiwiCommand +from .decorators import kiwi_command +from ..executable import COMPOSE_EXE +from ..instance import Instance +from ..project import Project +from ..services import Services + + +@click.option( + "-f/-F", + "--force/--no-force", + help=f"skip confirmation", +) +@kiwi_command( + short_help="Restart kiwi services", +) +class RestartCommand(KiwiCommand): + """Restart the whole instance, a project or service(s) inside a project""" + + type = KiwiCommandType.SERVICES + enabled_only = True + + @classmethod + def run_for_instance(cls, instance: Instance, force: bool = None) -> None: + if not force: + if not KiwiCommand.danger_confirm( + "This will restart the entire instance.", + ): + return + + super().run_for_instance(instance) + + @classmethod + def run_for_filtered_services(cls, instance: Instance, project: Project, services: Services, + new_service_names: List[str], **kwargs) -> None: + if not services: + if not click.confirm( + "Did not find any of those services. \n" + f"Restart the entire project {project.name} instead?", + default=True + ): + return + + COMPOSE_EXE.run(["restart", *services.names], **project.process_kwargs)