from argparse import Namespace, ArgumentParser
from abc import ABC, abstractmethod
import logging
from gitops_configserver.config import setup_logger, Config
from gitops_configserver.server import ConfigServer
from gitops_configserver.workflow import Workflow
logger = logging.getLogger(__name__)
[docs]
class AbstractArgumentsHandler(ABC):
"""Command pattern interface"""
@abstractmethod
def execute(self, args) -> None:
pass
@abstractmethod
def add_parser(self, subparsers):
pass
[docs]
class ConfigGeneratorHandler(AbstractArgumentsHandler):
def execute(self, args):
config = Config()
config.CONFIG_DIR = args.config_dir
Workflow(config).execute()
print("HELLO WORLD")
def add_parser(self, subparsers):
parser_config_generator = subparsers.add_parser("config_gen")
parser_config_generator.set_defaults(func=self.execute)
parser_config_generator.add_argument(
"--config_dir",
type=str,
help="Config directory",
dest="config_dir",
required=True,
)
parser_config_generator.add_argument(
"--environment",
type=str,
help="Environment",
dest="environment",
default="dev",
required=False,
)
[docs]
class ConfigServerHandler(AbstractArgumentsHandler):
def execute(self, args):
config = Config()
config.CONFIG_DIR = args.config_dir
config_server = ConfigServer(config)
config_server.start()
def add_parser(self, subparsers):
parser_config_generator = subparsers.add_parser("server")
parser_config_generator.set_defaults(func=self.execute)
parser_config_generator.add_argument(
"--config_dir",
type=str,
help="Config directory",
dest="config_dir",
required=True,
)
def parse_arguments() -> Namespace:
parser = ArgumentParser(
description="GitOps multitenancy templates generator"
)
subparsers = parser.add_subparsers(required=True)
handlers = [ConfigGeneratorHandler, ConfigServerHandler]
for handler in handlers:
handler().add_parser(subparsers)
return parser.parse_args()
def main() -> None:
setup_logger()
args = parse_arguments()
args.func(args)
if __name__ == "__main__":
main()