IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
瀏覽代碼

Shorthand versions for subparser commands.

tags/0.92
父節點
當前提交
24f33bdb0f
共有 1 個檔案被更改,包括 83 行新增25 行删除
  1. +83
    -25
      focker.py

+ 83
- 25
focker.py 查看文件

@@ -2,6 +2,7 @@ from argparse import ArgumentParser
import argparse
import yaml
import os
from functools import reduce
# from weir import zfs, process
from .image import command_image_build, \
command_image_tag, \
@@ -28,42 +29,81 @@ from .jail import command_jail_create, \
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():
parser_top = ArgumentParser()
subparsers_top = parser_top.add_subparsers()
subparsers_top = parser_top.add_subparsers(dest='L1_command')
subparsers_top.required = True
# 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.add_argument('focker_dir', type=str)
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.add_argument('reference', type=str)
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.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.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 = 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.add_argument('reference', type=str)
# parser.add_argument('--remove-children', '-r', action='store_true')
parser.add_argument('--remove-dependents', '-R', action='store_true')
# 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.add_argument('image', type=str)
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('--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.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.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.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.add_argument('reference', type=str)
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.add_argument('image', type=str)
parser.add_argument('--env', '-e', 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 = 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.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.add_argument('reference', type=str)
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.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.add_argument('--force', '-f', action='store_true')
# 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.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 = 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.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.add_argument('reference', type=str)
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.add_argument('tags', type=str, nargs='+')
@@ -143,7 +199,9 @@ def main():
parser = create_parser()
args = parser.parse_args()
if not hasattr(args, 'func'):
parser.print_usage()
sys.exit('You must choose a mode')
args.func(args)


Loading…
取消
儲存