subcommand "down"

This commit is contained in:
Jörn-Michael Miehe 2020-08-17 14:51:11 +02:00
parent 4ad2b7c458
commit 79520c2a63
3 changed files with 71 additions and 0 deletions

View file

@ -1,5 +1,6 @@
# local # local
from .cmd import CmdCommand from .cmd import CmdCommand
from .down import DownCommand
from .init import InitCommand from .init import InitCommand
from .logs import LogsCommand from .logs import LogsCommand
from .net import NetUpCommand, NetDownCommand from .net import NetUpCommand, NetDownCommand
@ -9,6 +10,7 @@ from .up import UpCommand
__all__ = [ __all__ = [
'CmdCommand', 'CmdCommand',
'DownCommand',
'InitCommand', 'InitCommand',
'LogsCommand', 'LogsCommand',
'NetUpCommand', 'NetUpCommand',

View file

@ -0,0 +1,46 @@
# system
import logging
# local
from ._subcommand import ServiceCommand
from .utils.dockercommand import DockerCommand
from .utils.project import get_project_name, list_projects
from .utils.user_input import are_you_sure
class DownCommand(ServiceCommand):
"""kiwi down"""
def __init__(self):
super().__init__(
'down', num_projects='?', num_services='*',
description="Bring down the whole instance, a project or service(s) inside a project"
)
def run(self, runner, config, args):
if 'projects' not in args or args.projects is None:
# "down" for all projects
if are_you_sure("This will bring down the entire instance."):
for project_name in list_projects(config):
args.projects = project_name
runner.run('down')
return
if 'services' in args and args.services:
# "down" for service(s) inside project
logging.info(f"Bringing down services {args.services} in project '{get_project_name(args)}'")
DockerCommand('docker-compose').run(
config, args, ['stop', *args.services]
)
DockerCommand('docker-compose').run(
config, args, ['rm', '-f', *args.services]
)
else:
# "down" for project
logging.info(f"Bringing down project '{get_project_name(args)}'")
DockerCommand('docker-compose').run(
config, args, ['down']
)

View file

@ -0,0 +1,23 @@
def are_you_sure(prompt, default="no"):
if default.lower() == 'yes':
suffix = "[YES|no]"
else:
suffix = "[yes|NO]"
answer = input(
"!!!!!!!!!!!!!!!!!!\n"
"!!! BE CAREFUL !!!\n"
"!!!!!!!!!!!!!!!!!!\n"
"\n"
f"{prompt}\n"
"\n"
f"Are you sure you want to proceed? {suffix} "
).strip().lower()
if answer == '':
answer = default
while answer not in ['yes', 'no']:
answer = input("Please type 'yes' or 'no' explicitly: ").strip().lower()
return answer == 'yes'