kiwi-scp/src/kiwi/subcommands/inspect.py

99 lines
2.8 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
2020-08-19 15:21:38 +00:00
from ..subcommand import ServiceCommand
2020-08-19 15:22:40 +00:00
from ..project import Project
from ..projects import 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
2020-08-20 12:15:38 +00:00
class InspectCommand(ServiceCommand):
"""kiwi inspect"""
2020-08-18 14:36:39 +00:00
def __init__(self):
super().__init__(
2020-08-20 12:15:38 +00:00
'inspect', num_projects='?', num_services='*',
action="Inspecting",
description="Inspect projects in this instance, services inside a project or service(s) inside a project"
2020-08-18 14:36:39 +00:00
)
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 enabled_projects:
print(f"Enabled projects:")
_print_list(enabled_projects)
disabled_projects = projects.filter_disabled()
if disabled_projects:
print(f"Disabled projects:")
_print_list(disabled_projects)
2020-08-18 14:36:39 +00:00
return True
def _run_project(self, runner, args, project):
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