from config_obj import * import argparse class ConfigShell(): def __init__(self): self.parser_init() def env(self, *args, **kwargs): for arg in args: value = os.environ.get(arg, None) if value: return value return kwargs.get('default', '') def do_help(self, args): if args.obj_parser: args.obj_parser.print_help() else: self.parser.print_help() def parser_init(self): parser = argparse.ArgumentParser() parser.add_argument('--username', help = 'User name') parser.add_argument('--password', help = 'Password') parser.add_argument('--tenant', help = 'Tenant name') parser.add_argument('--region', help = 'Region name') parser.add_argument('--api-server', help = 'API server address') parser.add_argument('cmd', choices = ['add', 'show', 'delete', 'help'], metavar = '', help = '[ add | show | delete | help ]') subparsers = parser.add_subparsers(metavar = '') self.sub_cmd_dict = {} sub_parser = subparsers.add_parser('vdns', help = 'Virtual DNS') sub_parser.set_defaults(obj_class = ConfigVirtualDns, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of virtual DNS') sub_parser.add_argument('--domain-name', metavar = '', help = 'The name of DNS domain') sub_parser.add_argument('--record-order', choices = ['fixed', 'random', 'round-robin'], default = 'random', metavar = '', help = 'The order of DNS records ' \ '[ random | fixed | round-robin ]') sub_parser.add_argument('--next-dns', metavar = '', help = 'The name of next virtual DNS service or ' \ 'the IP address of DNS server reachable by fabric.') sub_parser = subparsers.add_parser('ipam', help = 'Network IPAM') sub_parser.set_defaults(obj_class = ConfigIpam, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of IPAM') sub_parser.add_argument('--dns-type', choices = ['none', 'default', 'tenant', 'virtual'], metavar = '', help = 'The type of DNS service ' \ '[ none | default | virtual | tenant ]') sub_parser.add_argument('--virtual-dns', metavar = '', help = 'The name of virtual DNS service') sub_parser.add_argument('--tenant-dns', metavar = '
', action = 'append', help = 'The address of tenant DNS') sub_parser.add_argument('--domain-name', metavar = '', help = 'The name of DNS domain') sub_parser.add_argument('--ntp-server', metavar = '
', help = 'The address of NTP server') sub_parser = subparsers.add_parser('policy', help = 'Network Policy') sub_parser.set_defaults(obj_class = ConfigPolicy, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of policy') sub_parser.add_argument('--rule', action = 'append', metavar = '', help = 'Policy rule ' \ 'direction=[ "<>" | ">" ],' \ 'protocol=[ any | tcp | udp | icmp ],' \ 'src-net=[ | any ],' \ 'dst-net=[ | any ],' \ 'src-port=[ : | any ],' \ 'dst-port=[ : | any ],' \ 'action=[ pass | deny | drop | reject | alert | ' \ 'log | service ],' \ 'service=,' \ 'index=') sub_parser = subparsers.add_parser('security-group', help = 'Security Group') sub_parser.set_defaults(obj_class = ConfigSecurityGroup, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of security group') sub_parser.add_argument('--rule', metavar = '', help = 'Rule index') sub_parser.add_argument('--direction', choices = ['ingress', 'egress'], metavar = '', help = 'Direction [ ingress | egress ]') sub_parser.add_argument('--protocol', choices = ['any', 'tcp', 'udp', 'icmp'], metavar = '', help = 'Protocol [ any | tcp | udp | icmp ]') sub_parser.add_argument('--address', action = 'append', metavar = '/', help = 'Remote IP address') sub_parser.add_argument('--port', action = 'append', type = str, metavar = ':', help = 'The range of remote port') sub_parser = subparsers.add_parser('network', help = 'Virtual Network') sub_parser.set_defaults(obj_class = ConfigNetwork, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of virtual network') sub_parser.add_argument('--ipam', metavar = '', help = 'The name of IPAM') sub_parser.add_argument('--subnet', metavar = '/', help = 'Subnet prefix and length') sub_parser.add_argument('--gateway', metavar = '
', help = 'The gateway address of subnet') sub_parser.add_argument('--policy', metavar = '', help = 'The name of network policy') sub_parser.add_argument('--route-target', metavar = ':', help = 'Route target') sub_parser.add_argument('--route-table', metavar = '', help = 'The name of route table') sub_parser.add_argument('--l2', action = 'store_true', help = 'Layer 2 network, layer 2&3 by default') sub_parser.add_argument('--shared', action = 'store_true', help = 'Enable sharing with other tenants') sub_parser.add_argument('--external', action = 'store_true', help = 'Enable external access') sub_parser = subparsers.add_parser('floating-ip-pool', help = 'Floating IP Pool') sub_parser.set_defaults(obj_class = ConfigFloatingIpPool, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of floating IP pool') sub_parser.add_argument('--network', metavar = '', help = 'The name of virtual network holding floating IP pool') #sub_parser.add_argument('--floating-ip', action = 'store_true', # help = 'Floating IP') sub_parser = subparsers.add_parser('vm', help = 'Virtual Machine') sub_parser.set_defaults(obj_class = ConfigVirtualMachine, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of virtual machine') sub_parser.add_argument('--image', metavar = '', help = 'The name of image') sub_parser.add_argument('--flavor', metavar = '', help = 'The name of flavor') sub_parser.add_argument('--network', action = 'append', metavar = '', help = 'The name of network') sub_parser.add_argument('--user-data', metavar = '', help = 'Full file name containing user data') sub_parser.add_argument('--node', metavar = '', help = 'The name of compute node') sub_parser.add_argument('--wait', action = 'store_true', help = 'Wait till VM is active') sub_parser = subparsers.add_parser('interface-route-table', help = 'Interface Route Table') sub_parser.set_defaults(obj_class = ConfigInterfaceRouteTable, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of interface route table') sub_parser.add_argument('--route', action = 'append', metavar = '/', help = 'Route') sub_parser = subparsers.add_parser('route-table', help = 'Network Route Table') sub_parser.set_defaults(obj_class = ConfigRouteTable, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of route table') sub_parser.add_argument('--route', action = 'append', metavar = '/:', help = 'The route and next-hop') sub_parser = subparsers.add_parser('vm-interface', help = 'Virtual Machine Interface') sub_parser.set_defaults(obj_class = ConfigVmInterface, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = ':', help = 'The name of virtual machine interface') sub_parser.add_argument('--interface-route-table', metavar = '', help = 'The name of interface route table') sub_parser.add_argument('--security-group', metavar = '', help = 'The name of security group') sub_parser.add_argument('--address', metavar = '
', help = 'IP address') sub_parser.add_argument('--floating-ip', metavar = '
', help = 'Floating IP address [ any |
]') sub_parser.add_argument('--floating-ip-pool', metavar = '', help = 'The floating IP pool to allocate a floating IP from ' \ '::') sub_parser = subparsers.add_parser('image', help = 'Virtual Machine Image') self.sub_cmd_dict['image'] = sub_parser sub_parser.set_defaults(obj_class = ConfigImage) sub_parser.add_argument('name', nargs = '?', default = None) sub_parser = subparsers.add_parser('flavor', help = 'Virtual Machine Flavor') self.sub_cmd_dict['flavor'] = sub_parser sub_parser.set_defaults(obj_class = ConfigFlavor) sub_parser.add_argument('name', nargs = '?', default = None) sub_parser = subparsers.add_parser('service-template', help = 'Service Template') sub_parser.set_defaults(obj_class = ConfigServiceTemplate, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of service template') sub_parser.add_argument('--mode', choices = ['transparent', 'in-network', 'in-network-nat'], metavar = '', help = 'Service mode ' \ '[ transparent | in-network | in-network-nat ]') sub_parser.add_argument('--type', choices = ['firewall', 'analyzer'], metavar = '', help = 'Service type [ firewall | analyzer ]') sub_parser.add_argument('--image', metavar = '', help = 'The name of image') sub_parser.add_argument('--flavor', metavar = '', help = 'The name of flavor') sub_parser.add_argument('--scale', action = 'store_true', help = 'Enable service scaling') sub_parser.add_argument('--interface', choices = ['management', 'left', 'right', 'other'], metavar = '', action = 'append', help = 'Service interface ' \ '[ management | left | right | other ]') sub_parser = subparsers.add_parser('service-instance', help = 'Service Instance') sub_parser.set_defaults(obj_class = ConfigServiceInstance, obj_parser = sub_parser) sub_parser.add_argument('name', nargs = '?', default = None, metavar = '', help = 'The name of service instance') sub_parser.add_argument('--template', metavar = '