| @@ -2,6 +2,7 @@ from argparse import ArgumentParser | |||||
| import argparse | import argparse | ||||
| import yaml | import yaml | ||||
| import os | import os | ||||
| from functools import reduce | |||||
| # from weir import zfs, process | # from weir import zfs, process | ||||
| from .image import command_image_build, \ | from .image import command_image_build, \ | ||||
| command_image_tag, \ | command_image_tag, \ | ||||
| @@ -28,42 +29,81 @@ from .jail import command_jail_create, \ | |||||
| command_jail_prune | command_jail_prune | ||||
| class ListForwarderFunctor(object): | |||||
| def __init__(self, lst): | |||||
| self.lst = lst | |||||
| def __call__(self, *args, **kwargs): | |||||
| res = [] | |||||
| for elem in self.lst: | |||||
| res.append(elem(*args, **kwargs)) | |||||
| return res | |||||
| class ListForwarder(object): | |||||
| def __init__(self, lst): | |||||
| self.lst = lst | |||||
| def __getattr__(self, name): | |||||
| return ListForwarderFunctor(list(map(lambda a: getattr(a, name), self.lst))) | |||||
| def __setattr__(self, name, value): | |||||
| if name == 'lst': | |||||
| super().__setattr__(name, value) | |||||
| return | |||||
| # print('setattr(), name:', name, 'value:', value) | |||||
| for elem in self.lst: | |||||
| setattr(elem, name, value) | |||||
| def create_parser(): | def create_parser(): | ||||
| parser_top = ArgumentParser() | parser_top = ArgumentParser() | ||||
| subparsers_top = parser_top.add_subparsers() | |||||
| subparsers_top = parser_top.add_subparsers(dest='L1_command') | |||||
| subparsers_top.required = True | |||||
| # image | # image | ||||
| subparsers = subparsers_top.add_parser('image').add_subparsers() | |||||
| parser = subparsers.add_parser('build') | |||||
| subparsers = ListForwarder([ subparsers_top.add_parser(cmd).add_subparsers(dest='L2_command') \ | |||||
| for cmd in ['image', 'i'] ]) | |||||
| subparsers.required = True | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['build', 'b']])) | |||||
| parser.set_defaults(func=command_image_build) | parser.set_defaults(func=command_image_build) | ||||
| parser.add_argument('focker_dir', type=str) | parser.add_argument('focker_dir', type=str) | ||||
| parser.add_argument('--tags', '-t', type=str, nargs='+', default=[]) | parser.add_argument('--tags', '-t', type=str, nargs='+', default=[]) | ||||
| parser = subparsers.add_parser('tag') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['tag', 't']])) | |||||
| parser.set_defaults(func=command_image_tag) | parser.set_defaults(func=command_image_tag) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser.add_argument('tags', type=str, nargs='+') | parser.add_argument('tags', type=str, nargs='+') | ||||
| parser = subparsers.add_parser('untag') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['untag', 'u']])) | |||||
| parser.set_defaults(func=command_image_untag) | parser.set_defaults(func=command_image_untag) | ||||
| parser.add_argument('tags', type=str, nargs='+', default=[]) | parser.add_argument('tags', type=str, nargs='+', default=[]) | ||||
| parser = subparsers.add_parser('list') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['list', 'ls', 'l']])) | |||||
| parser.set_defaults(func=command_image_list) | parser.set_defaults(func=command_image_list) | ||||
| parser.add_argument('--full-sha256', '-f', action='store_true') | parser.add_argument('--full-sha256', '-f', action='store_true') | ||||
| parser = subparsers.add_parser('prune') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['prune', 'p']])) | |||||
| parser.set_defaults(func=command_image_prune) | parser.set_defaults(func=command_image_prune) | ||||
| parser = subparsers.add_parser('remove') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['remove', 'r']])) | |||||
| parser.set_defaults(func=command_image_remove) | parser.set_defaults(func=command_image_remove) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| # parser.add_argument('--remove-children', '-r', action='store_true') | # parser.add_argument('--remove-children', '-r', action='store_true') | ||||
| parser.add_argument('--remove-dependents', '-R', action='store_true') | parser.add_argument('--remove-dependents', '-R', action='store_true') | ||||
| # jail | # jail | ||||
| subparsers = subparsers_top.add_parser('jail').add_subparsers() | |||||
| parser = subparsers.add_parser('create') | |||||
| subparsers = ListForwarder([ subparsers_top.add_parser(cmd).add_subparsers(dest='L2_command') \ | |||||
| for cmd in ['jail', 'j'] ]) | |||||
| subparsers.required = True | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['create', 'c']])) | |||||
| parser.set_defaults(func=command_jail_create) | parser.set_defaults(func=command_jail_create) | ||||
| parser.add_argument('image', type=str) | parser.add_argument('image', type=str) | ||||
| parser.add_argument('--command', '-c', type=str, default='/bin/sh') | parser.add_argument('--command', '-c', type=str, default='/bin/sh') | ||||
| @@ -72,66 +112,82 @@ def create_parser(): | |||||
| parser.add_argument('--mounts', '-m', type=str, nargs='+', default=[]) | parser.add_argument('--mounts', '-m', type=str, nargs='+', default=[]) | ||||
| parser.add_argument('--hostname', '-n', type=str) | parser.add_argument('--hostname', '-n', type=str) | ||||
| parser = subparsers.add_parser('start') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['start', 's']])) | |||||
| parser.set_defaults(func=command_jail_start) | parser.set_defaults(func=command_jail_start) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser = subparsers.add_parser('stop') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['stop', 'S']])) | |||||
| parser.set_defaults(func=command_jail_stop) | parser.set_defaults(func=command_jail_stop) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser = subparsers.add_parser('remove') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['remove', 'r']])) | |||||
| parser.set_defaults(func=command_jail_remove) | parser.set_defaults(func=command_jail_remove) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser = subparsers.add_parser('exec') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['exec', 'e']])) | |||||
| parser.set_defaults(func=command_jail_exec) | parser.set_defaults(func=command_jail_exec) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser.add_argument('command', type=str, nargs=argparse.REMAINDER, default=['/bin/sh']) | parser.add_argument('command', type=str, nargs=argparse.REMAINDER, default=['/bin/sh']) | ||||
| parser = subparsers.add_parser('oneshot') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['oneshot', 'o']])) | |||||
| parser.set_defaults(func=command_jail_oneshot) | parser.set_defaults(func=command_jail_oneshot) | ||||
| parser.add_argument('image', type=str) | parser.add_argument('image', type=str) | ||||
| parser.add_argument('--env', '-e', type=str, nargs='+', default=[]) | parser.add_argument('--env', '-e', type=str, nargs='+', default=[]) | ||||
| parser.add_argument('--mounts', '-m', type=str, nargs='+', default=[]) | parser.add_argument('--mounts', '-m', type=str, nargs='+', default=[]) | ||||
| parser.add_argument('command', type=str, nargs=argparse.REMAINDER, default=['/bin/sh']) | parser.add_argument('command', type=str, nargs=argparse.REMAINDER, default=['/bin/sh']) | ||||
| parser = subparsers.add_parser('list') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['list', 'ls', 'l']])) | |||||
| parser.set_defaults(func=command_jail_list) | parser.set_defaults(func=command_jail_list) | ||||
| parser.add_argument('--full-sha256', '-f', action='store_true') | parser.add_argument('--full-sha256', '-f', action='store_true') | ||||
| parser = subparsers.add_parser('tag') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['tag', 't']])) | |||||
| parser.set_defaults(func=command_jail_tag) | parser.set_defaults(func=command_jail_tag) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser.add_argument('tags', type=str, nargs='+') | parser.add_argument('tags', type=str, nargs='+') | ||||
| parser = subparsers.add_parser('untag') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['untag', 'u']])) | |||||
| parser.set_defaults(func=command_jail_untag) | parser.set_defaults(func=command_jail_untag) | ||||
| parser.add_argument('tags', type=str, nargs='+') | parser.add_argument('tags', type=str, nargs='+') | ||||
| parser = subparsers.add_parser('prune') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['prune', 'p']])) | |||||
| parser.set_defaults(func=command_jail_prune) | parser.set_defaults(func=command_jail_prune) | ||||
| parser.add_argument('--force', '-f', action='store_true') | parser.add_argument('--force', '-f', action='store_true') | ||||
| # volume | # volume | ||||
| subparsers = subparsers_top.add_parser('volume').add_subparsers() | |||||
| parser = subparsers.add_parser('create') | |||||
| subparsers = ListForwarder([ subparsers_top.add_parser(cmd).add_subparsers(dest='L2_command') \ | |||||
| for cmd in ['volume', 'v'] ]) | |||||
| subparsers.required = True | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['create', 'c']])) | |||||
| parser.set_defaults(func=command_volume_create) | parser.set_defaults(func=command_volume_create) | ||||
| parser.add_argument('--tags', '-t', type=str, nargs='+', default=[]) | parser.add_argument('--tags', '-t', type=str, nargs='+', default=[]) | ||||
| parser = subparsers.add_parser('prune') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['prune', 'p']])) | |||||
| parser.set_defaults(func=command_volume_prune) | parser.set_defaults(func=command_volume_prune) | ||||
| parser = subparsers.add_parser('list') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['list', 'ls', 'l']])) | |||||
| parser.set_defaults(func=command_volume_list) | parser.set_defaults(func=command_volume_list) | ||||
| parser.add_argument('--full-sha256', '-f', action='store_true') | parser.add_argument('--full-sha256', '-f', action='store_true') | ||||
| parser = subparsers.add_parser('tag') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['tag', 't']])) | |||||
| parser.set_defaults(func=command_volume_tag) | parser.set_defaults(func=command_volume_tag) | ||||
| parser.add_argument('reference', type=str) | parser.add_argument('reference', type=str) | ||||
| parser.add_argument('tags', type=str, nargs='+') | parser.add_argument('tags', type=str, nargs='+') | ||||
| parser = subparsers.add_parser('untag') | |||||
| parser = ListForwarder(reduce(lambda a, b: a + b, | |||||
| [subparsers.add_parser(cmd) for cmd in ['untag', 'u']])) | |||||
| parser.set_defaults(func=command_volume_untag) | parser.set_defaults(func=command_volume_untag) | ||||
| parser.add_argument('tags', type=str, nargs='+') | parser.add_argument('tags', type=str, nargs='+') | ||||
| @@ -143,7 +199,9 @@ def main(): | |||||
| parser = create_parser() | parser = create_parser() | ||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| if not hasattr(args, 'func'): | if not hasattr(args, 'func'): | ||||
| parser.print_usage() | |||||
| sys.exit('You must choose a mode') | sys.exit('You must choose a mode') | ||||
| args.func(args) | args.func(args) | ||||