1
0
Fork 0
mirror of https://github.com/yavook/kiwi-scp.git synced 2024-11-22 21:03:00 +00:00
kiwi-scp/src/kiwi/subcommands/list.py

101 lines
2.9 KiB
Python
Raw Normal View History

2020-08-18 14:36:39 +00:00
# system
import logging
import os
import yaml
2020-08-18 14:36:39 +00:00
# local
from ._subcommand import ServiceCommand
2020-08-19 15:15:00 +00:00
# parent
from ..project import Project, Projects
2020-08-18 14:36:39 +00:00
def _print_list(strings):
if isinstance(strings, str):
print(f" - {strings}")
elif isinstance(strings, Project):
_print_list(strings.get_name())
2020-08-18 14:36:39 +00:00
elif isinstance(strings, list):
for string in strings:
_print_list(string)
2020-08-18 14:36:39 +00:00
else:
_print_list(list(strings))
2020-08-18 14:36:39 +00:00
class ListCommand(ServiceCommand):
2020-08-18 14:36:39 +00:00
"""kiwi list"""
def __init__(self):
super().__init__(
'list', num_projects='?', num_services='*',
action="Listing",
2020-08-18 14:36:39 +00:00
description="List projects in this instance, services inside a project or service(s) inside a project"
)
def _run_instance(self, runner, args):
print(f"kiwi-config instance at '{os.getcwd()}'")
print("#########")
projects = Projects.from_dir()
enabled_projects = projects.filter_enabled()
if not enabled_projects.empty():
print(f"Enabled projects:")
_print_list(enabled_projects)
disabled_projects = projects.filter_disabled()
if not disabled_projects.empty():
print(f"Disabled projects:")
_print_list(disabled_projects)
2020-08-18 14:36:39 +00:00
return True
def _run_projects(self, runner, args, projects):
project = projects[0]
if not project.exists():
logging.warning(f"Project '{project.get_name()}' not found")
return False
print(f"Services in project '{project.get_name()}':")
print("#########")
2020-08-18 14:36:39 +00:00
with open(project.compose_file_name(), 'r') as stream:
try:
docker_compose_yml = yaml.safe_load(stream)
_print_list(docker_compose_yml['services'].keys())
2020-08-18 14:36:39 +00:00
except yaml.YAMLError as exc:
logging.error(exc)
2020-08-18 14:36:39 +00:00
return True
def _run_services(self, runner, args, project, services):
if not project.exists():
logging.error(f"Project '{project.get_name()}' not found")
return False
2020-08-18 14:36:39 +00:00
print(f"Configuration of services {services} in project '{project.get_name()}':")
print("#########")
2020-08-18 14:36:39 +00:00
with open(project.compose_file_name(), 'r') as stream:
2020-08-18 14:36:39 +00:00
try:
docker_compose_yml = yaml.safe_load(stream)
for service_name in services:
try:
print(yaml.dump(
{service_name: docker_compose_yml['services'][service_name]},
default_flow_style=False, sort_keys=False
).strip())
except KeyError:
logging.error(f"Service '{service_name}' not found")
2020-08-18 14:36:39 +00:00
return True
except yaml.YAMLError as exc:
logging.error(exc)
return False