import os import argparse from uncloud.common.settings import settings from uncloud.common.shared import shared arg_parser = argparse.ArgumentParser('configure', add_help=False) configure_subparsers = arg_parser.add_subparsers(dest='subcommand') otp_parser = configure_subparsers.add_parser('otp') otp_parser.add_argument('--verification-controller-url', required=True, metavar='URL') otp_parser.add_argument('--auth-name', required=True, metavar='OTP-NAME') otp_parser.add_argument('--auth-realm', required=True, metavar='OTP-REALM') otp_parser.add_argument('--auth-seed', required=True, metavar='OTP-SEED') network_parser = configure_subparsers.add_parser('network') network_parser.add_argument('--prefix-length', required=True, type=int) network_parser.add_argument('--prefix', required=True) network_parser.add_argument('--vxlan-phy-dev', required=True) netbox_parser = configure_subparsers.add_parser('netbox') netbox_parser.add_argument('--url', required=True) netbox_parser.add_argument('--token', required=True) ssh_parser = configure_subparsers.add_parser('ssh') ssh_parser.add_argument('--username', default='root') ssh_parser.add_argument('--private-key-path', default=os.path.expanduser('~/.ssh/id_rsa'),) storage_parser = configure_subparsers.add_parser('storage') storage_parser.add_argument('--file-dir', required=True) storage_parser_subparsers = storage_parser.add_subparsers(dest='storage_backend') filesystem_storage_parser = storage_parser_subparsers.add_parser('filesystem') filesystem_storage_parser.add_argument('--vm-dir', required=True) filesystem_storage_parser.add_argument('--image-dir', required=True) ceph_storage_parser = storage_parser_subparsers.add_parser('ceph') ceph_storage_parser.add_argument('--ceph-vm-pool', required=True) ceph_storage_parser.add_argument('--ceph-image-pool', required=True) def update_config(section, kwargs): uncloud_config = shared.etcd_client.get(settings.config_key, value_in_json=True) if not uncloud_config: uncloud_config = {} else: uncloud_config = uncloud_config.value uncloud_config[section] = kwargs shared.etcd_client.put(settings.config_key, uncloud_config, value_in_json=True) def main(**kwargs): subcommand = kwargs.pop('subcommand') if not subcommand: arg_parser.print_help() else: update_config(subcommand, kwargs)