class GlobalVrouterConfigProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) try: current_config = self._vnc_lib.global_vrouter_config_read(fq_name=[ 'default-global-system-config', 'default-global-vrouter-config' ]) except Exception as e: try: if self._args.oper == "add": conf_obj = GlobalVrouterConfig( flow_export_rate=self._args.flow_export_rate) result = self._vnc_lib.global_vrouter_config_create( conf_obj) print 'Created.UUID is %s' % (result) return except RefsExistError: print "Already created!" if self._args.oper != "add": conf_obj = GlobalVrouterConfig() else: conf_obj = GlobalVrouterConfig( flow_export_rate=self._args.flow_export_rate) result = self._vnc_lib.global_vrouter_config_update(conf_obj) print 'Updated.%s' % (result) # end __init__ def _parse_args(self, args_str): ''' Eg. python provision_global_vrouter_config.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --flow_export_rate 10 --oper <add | delete> ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'oper': 'add', } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument("--flow_export_rate", type=int, required=True, help="Flow export rate to the collector") parser.add_argument( "--oper", default='add', choices=['add', 'delete'], help="Provision operation to be done(add or delete)") parser.add_argument("--admin_user", help="Name of keystone admin user") parser.add_argument("--admin_password", help="Password of keystone admin user") parser.add_argument("--admin_tenant_name", help="Tenant name for keystone admin user") group = parser.add_mutually_exclusive_group() group.add_argument("--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help="Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv)
class EncapsulationProvision(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) encap_obj = EncapsulationPrioritiesType( encapsulation=self._args.encap_priority.split(",")) try: current_config = self._vnc_lib.global_vrouter_config_read(fq_name=[ 'default-global-system-config', 'default-global-vrouter-config' ]) except Exception as e: try: if self._args.oper == "add": conf_obj = GlobalVrouterConfig( encapsulation_priorities=encap_obj, vxlan_network_identifier_mode=self._args. vxlan_vn_id_mode) result = self._vnc_lib.global_vrouter_config_create( conf_obj) print 'Created.UUID is %s' % (result) return except RefsExistError: print "Already created!" current_linklocal = current_config.get_linklocal_services() encapsulation_priorities = encap_obj vxlan_network_identifier_mode = current_config.get_vxlan_network_identifier_mode( ) if self._args.oper != "add": encap_obj = EncapsulationPrioritiesType(encapsulation=[]) conf_obj = GlobalVrouterConfig( linklocal_services=current_linklocal, encapsulation_priorities=encap_obj) else: conf_obj = GlobalVrouterConfig( linklocal_services=current_linklocal, encapsulation_priorities=encapsulation_priorities, vxlan_network_identifier_mode=self._args.vxlan_vn_id_mode) result = self._vnc_lib.global_vrouter_config_update(conf_obj) print 'Updated.%s' % (result) # end __init__ def _parse_args(self, args_str): ''' Eg. python provision_encap.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --encap_priority "MPLSoUDP,MPLSoGRE,VXLAN" --vxlan_vn_id_mode "automatic" --oper <add | delete> ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'oper': 'add', 'encap_priority': 'MPLSoUDP,MPLSoGRE,VXLAN', 'vxlan_vn_id_mode': 'automatic' } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument("--encap_priority", help="List of Encapsulation priority", required=True) parser.add_argument("--vxlan_vn_id_mode", help="Virtual Network id type to be used") parser.add_argument( "--oper", default='add', help="Provision operation to be done(add or delete)") parser.add_argument("--admin_user", help="Name of keystone admin user") parser.add_argument("--admin_password", help="Password of keystone admin user") parser.add_argument("--admin_tenant_name", help="Tenant name for keystone admin user") group = parser.add_mutually_exclusive_group() group.add_argument("--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help="Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv) if not self._args.encap_priority: parser.error('encap_priority is required')
class MetadataProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) linklocal_obj=LinklocalServiceEntryType( linklocal_service_name=self._args.linklocal_service_name, linklocal_service_ip=self._args.linklocal_service_ip, linklocal_service_port=self._args.linklocal_service_port, ip_fabric_DNS_service_name=self._args.ipfabric_dns_service_name, ip_fabric_service_port=self._args.ipfabric_service_port) if self._args.ipfabric_service_ip: linklocal_obj.ip_fabric_service_ip=[self._args.ipfabric_service_ip] try: current_config=self._vnc_lib.global_vrouter_config_read( fq_name=['default-global-system-config', 'default-global-vrouter-config']) except Exception as e: try: if self._args.oper == "add": linklocal_services_obj=LinklocalServicesTypes([linklocal_obj]) conf_obj=GlobalVrouterConfig(linklocal_services=linklocal_services_obj) result=self._vnc_lib.global_vrouter_config_create(conf_obj) print 'Created.UUID is %s'%(result) return except RefsExistError: print "Already created!" current_linklocal=current_config.get_linklocal_services() if current_linklocal is None: obj = {'linklocal_service_entry': []} else: obj = current_linklocal.__dict__ new_linklocal=[] for key, value in obj.iteritems(): found=False for vl in value: entry = vl.__dict__ if ('linklocal_service_name' in entry and entry['linklocal_service_name'] == self._args.linklocal_service_name): if self._args.oper == "add": new_linklocal.append(linklocal_obj) found=True else: new_linklocal.append(vl) if not found and self._args.oper == "add": new_linklocal.append(linklocal_obj) obj[key] = new_linklocal conf_obj=GlobalVrouterConfig(linklocal_services=obj) result=self._vnc_lib.global_vrouter_config_update(conf_obj) print 'Updated.%s'%(result) # end __init__ def _parse_args(self, args_str): ''' Eg. python provision_metadata.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --linklocal_service_name name --linklocal_service_ip 1.2.3.4 --linklocal_service_port 1234 --ipfabric_dns_service_name fabric_server_name --ipfabric_service_ip 10.1.1.1 --ipfabric_service_port 5775 --oper <add | delete> ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'linklocal_service_name': '', 'linklocal_service_ip': '', 'linklocal_service_port': 0, 'ipfabric_dns_service_name': '', 'ipfabric_service_ip': [], 'ipfabric_service_port': 0, 'oper': 'add', } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument( "--linklocal_service_name", help="Service Name") parser.add_argument( "--linklocal_service_ip", help="Link Local Service IP") parser.add_argument( "--linklocal_service_port", type=int, help="Link Local Service Port") parser.add_argument( "--ipfabric_dns_service_name", help="IP Fabric DNS Service Name") parser.add_argument( "--ipfabric_service_ip", help="IP Fabric Service IP") parser.add_argument( "--ipfabric_service_port", type=int, help="IP Fabric Service Port") parser.add_argument( "--oper", default='add', help="Provision operation to be done(add or delete)") parser.add_argument( "--admin_tenant_name", help="Tenant to create the Link Local Service") parser.add_argument( "--admin_user", help="Name of keystone admin user") parser.add_argument( "--admin_password", help="Password of keystone admin user") group = parser.add_mutually_exclusive_group() group.add_argument( "--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help = "Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv) if not self._args.linklocal_service_name: parser.error('linklocal_service_name is required')
class GlobalVrouterConfigProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) port_trans_pool_list = [] if self._args.snat_list: port = None protocol = None for proto_port in self._args.snat_list: port_count = '' port_range_obj = None protocol = proto_port.split(':')[0] port = proto_port.split(':')[1] if '-' in port: port_range_obj = PortType(start_port=int( port.split('-')[0]), end_port=int(port.split('-')[1])) else: port_count = port port_trans_pool_obj = PortTranslationPool( protocol=protocol, port_range=port_range_obj, port_count=port_count) port_trans_pool_list.append(port_trans_pool_obj) port_trans_pools_obj = PortTranslationPools(port_trans_pool_list) try: current_config = self._vnc_lib.global_vrouter_config_read(fq_name=[ 'default-global-system-config', 'default-global-vrouter-config' ]) except Exception as e: try: if self._args.oper == "add": conf_obj = GlobalVrouterConfig( flow_export_rate=self._args.flow_export_rate) conf_obj.set_port_translation_pools(port_trans_pools_obj) result = self._vnc_lib.global_vrouter_config_create( conf_obj) print('Created.UUID is %s' % (result)) return except RefsExistError: print("Already created!") existing_snat_pools = current_config.get_port_translation_pools() if not existing_snat_pools: existing_snat_pools = PortTranslationPools([]) if port_trans_pool_list: for snat_pool in port_trans_pool_list: if not self.check_dup_snat_pool(snat_pool, existing_snat_pools): existing_snat_pools.add_port_translation_pool(snat_pool) if self._args.oper != "add": conf_obj = GlobalVrouterConfig() else: conf_obj = GlobalVrouterConfig( flow_export_rate=self._args.flow_export_rate) conf_obj.set_port_translation_pools(existing_snat_pools) result = self._vnc_lib.global_vrouter_config_update(conf_obj) print('Updated.%s' % (result)) # end __init__ def check_dup_snat_pool(self, snat_pool, existing_snat_pools): for pool_obj in existing_snat_pools.get_port_translation_pool(): if snat_pool.get_port_count() and pool_obj.get_port_count(): if snat_pool.get_port_count() == pool_obj.get_port_count() and \ snat_pool.get_protocol() == pool_obj.get_protocol(): return True elif snat_pool.get_port_range() and pool_obj.get_port_range(): if snat_pool.get_protocol() == pool_obj.get_protocol() and \ snat_pool.get_port_range().start_port == pool_obj.get_port_range().start_port and \ snat_pool.get_port_range().end_port == pool_obj.get_port_range().end_port: return True return False def _parse_args(self, args_str): ''' Eg. python provision_global_vrouter_config.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --flow_export_rate 10 --oper <add | delete> --snat_list tcp:6000-7000 udp:500 ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'oper': 'add', 'snat_list': None } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = configparser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument("--flow_export_rate", type=int, required=True, help="Flow export rate to the collector") parser.add_argument( "--oper", default='add', choices=['add', 'delete'], help="Provision operation to be done(add or delete)") parser.add_argument("--admin_user", help="Name of keystone admin user") parser.add_argument("--admin_password", help="Password of keystone admin user") parser.add_argument("--admin_tenant_name", help="Tenant name for keystone admin user") parser.add_argument( "--snat_list", help="Protocol port range or port count list for distributed snat", nargs='+', type=str) group = parser.add_mutually_exclusive_group() group.add_argument("--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help="Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv)
class GlobalVrouterConfigProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) try: current_config=self._vnc_lib.global_vrouter_config_read( fq_name=['default-global-system-config', 'default-global-vrouter-config']) except Exception as e: try: if self._args.oper == "add": conf_obj=GlobalVrouterConfig(flow_export_rate=self._args.flow_export_rate) result=self._vnc_lib.global_vrouter_config_create(conf_obj) print 'Created.UUID is %s'%(result) return except RefsExistError: print "Already created!" if self._args.oper != "add": conf_obj=GlobalVrouterConfig() else : conf_obj=GlobalVrouterConfig(flow_export_rate=self._args.flow_export_rate) result=self._vnc_lib.global_vrouter_config_update(conf_obj) print 'Updated.%s'%(result) # end __init__ def _parse_args(self, args_str): ''' Eg. python provision_global_vrouter_config.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --flow_export_rate 10 --oper <add | delete> ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'oper': 'add', } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument( "--flow_export_rate", type=int, required=True, help="Flow export rate to the collector") parser.add_argument( "--oper", default='add', choices=['add', 'delete'], help="Provision operation to be done(add or delete)") parser.add_argument( "--admin_user", help="Name of keystone admin user") parser.add_argument( "--admin_password", help="Password of keystone admin user") parser.add_argument( "--admin_tenant_name", help="Tenant name for keystone admin user") group = parser.add_mutually_exclusive_group() group.add_argument( "--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help = "Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv)
class GlobalVrouterConfigProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) port_trans_pool_list = [] if self._args.snat_list: port=None protocol=None for proto_port in self._args.snat_list: port_count='' port_range_obj=None protocol = proto_port.split(':')[0] port = proto_port.split(':')[1] if '-' in port: port_range_obj = PortType(start_port=int(port.split('-')[0]), end_port=int(port.split('-')[1])) else: port_count = port port_trans_pool_obj = PortTranslationPool(protocol = protocol, port_range = port_range_obj, port_count = port_count) port_trans_pool_list.append(port_trans_pool_obj) port_trans_pools_obj = PortTranslationPools(port_trans_pool_list) try: current_config=self._vnc_lib.global_vrouter_config_read( fq_name=['default-global-system-config', 'default-global-vrouter-config']) except Exception as e: try: if self._args.oper == "add": conf_obj=GlobalVrouterConfig(flow_export_rate=self._args.flow_export_rate) conf_obj.set_port_translation_pools(port_trans_pools_obj) result=self._vnc_lib.global_vrouter_config_create(conf_obj) print 'Created.UUID is %s'%(result) return except RefsExistError: print "Already created!" existing_snat_pools = current_config.get_port_translation_pools() if not existing_snat_pools: existing_snat_pools = PortTranslationPools([]) if port_trans_pool_list: for snat_pool in port_trans_pool_list: if not self.check_dup_snat_pool(snat_pool, existing_snat_pools): existing_snat_pools.add_port_translation_pool(snat_pool) if self._args.oper != "add": conf_obj=GlobalVrouterConfig() else: conf_obj=GlobalVrouterConfig(flow_export_rate=self._args.flow_export_rate) conf_obj.set_port_translation_pools(existing_snat_pools) result=self._vnc_lib.global_vrouter_config_update(conf_obj) print 'Updated.%s'%(result) # end __init__ def check_dup_snat_pool(self, snat_pool, existing_snat_pools): for pool_obj in existing_snat_pools.get_port_translation_pool(): if snat_pool.get_port_count() and pool_obj.get_port_count(): if snat_pool.get_port_count() == pool_obj.get_port_count() and \ snat_pool.get_protocol() == pool_obj.get_protocol(): return True elif snat_pool.get_port_range() and pool_obj.get_port_range(): if snat_pool.get_protocol() == pool_obj.get_protocol() and \ snat_pool.get_port_range().start_port == pool_obj.get_port_range().start_port and \ snat_pool.get_port_range().end_port == pool_obj.get_port_range().end_port: return True return False def _parse_args(self, args_str): ''' Eg. python provision_global_vrouter_config.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --flow_export_rate 10 --oper <add | delete> --snat_list tcp:6000-7000 udp:500 ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'oper': 'add', 'snat_list': None } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument( "--flow_export_rate", type=int, required=True, help="Flow export rate to the collector") parser.add_argument( "--oper", default='add', choices=['add', 'delete'], help="Provision operation to be done(add or delete)") parser.add_argument( "--admin_user", help="Name of keystone admin user") parser.add_argument( "--admin_password", help="Password of keystone admin user") parser.add_argument( "--admin_tenant_name", help="Tenant name for keystone admin user") parser.add_argument( "--snat_list", help="Protocol port range or port count list for distributed snat", nargs='+', type=str) group = parser.add_mutually_exclusive_group() group.add_argument( "--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help = "Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv)
class MetadataProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin( self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/', api_server_use_ssl=self._args.api_server_use_ssl) linklocal_obj=LinklocalServiceEntryType( linklocal_service_name=self._args.linklocal_service_name, linklocal_service_ip=self._args.linklocal_service_ip, linklocal_service_port=self._args.linklocal_service_port, ip_fabric_DNS_service_name=self._args.ipfabric_dns_service_name, ip_fabric_service_port=self._args.ipfabric_service_port) if self._args.ipfabric_service_ip: linklocal_obj.ip_fabric_service_ip=[self._args.ipfabric_service_ip] try: if self._args.oper == "add": linklocal_services_obj = LinklocalServicesTypes([linklocal_obj]) conf_obj = GlobalVrouterConfig(linklocal_services=linklocal_services_obj) result = self._vnc_lib.global_vrouter_config_create(conf_obj) print 'Created.UUID is %s'%(result) return except RefsExistError: print "Already created! Updating the object." sleep(5) current_config = self._vnc_lib.global_vrouter_config_read( fq_name=['default-global-system-config', 'default-global-vrouter-config']) current_linklocal=current_config.get_linklocal_services() if current_linklocal is None: obj = {'linklocal_service_entry': []} else: obj = current_linklocal.__dict__ new_linklocal=[] for key, value in obj.iteritems(): found=False for vl in value: entry = vl.__dict__ if ('linklocal_service_name' in entry and entry['linklocal_service_name'] == self._args.linklocal_service_name): if self._args.oper == "add": new_linklocal.append(linklocal_obj) found=True else: new_linklocal.append(vl) if not found and self._args.oper == "add": new_linklocal.append(linklocal_obj) obj[key] = new_linklocal conf_obj=GlobalVrouterConfig(linklocal_services=obj) result=self._vnc_lib.global_vrouter_config_update(conf_obj) print 'Updated.%s'%(result) # end __init__ def _parse_args(self, args_str): ''' Eg. python provision_metadata.py --api_server_ip 127.0.0.1 --api_server_port 8082 --api_server_use_ssl False --linklocal_service_name name --linklocal_service_ip 1.2.3.4 --linklocal_service_port 1234 --ipfabric_dns_service_name fabric_server_name --ipfabric_service_ip 10.1.1.1 --ipfabric_service_port 5775 --oper <add | delete> ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', 'api_server_use_ssl': False, 'linklocal_service_name': '', 'linklocal_service_ip': '', 'linklocal_service_port': 0, 'ipfabric_dns_service_name': '', 'ipfabric_service_ip': [], 'ipfabric_service_port': 0, 'oper': 'add', } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'admin' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--api_server_use_ssl", help="Use SSL to connect with API server") parser.add_argument( "--linklocal_service_name", help="Service Name") parser.add_argument( "--linklocal_service_ip", help="Link Local Service IP") parser.add_argument( "--linklocal_service_port", type=int, help="Link Local Service Port") parser.add_argument( "--ipfabric_dns_service_name", help="IP Fabric DNS Service Name") parser.add_argument( "--ipfabric_service_ip", help="IP Fabric Service IP") parser.add_argument( "--ipfabric_service_port", type=int, help="IP Fabric Service Port") parser.add_argument( "--oper", default='add', help="Provision operation to be done(add or delete)") parser.add_argument( "--admin_tenant_name", help="Tenant to create the Link Local Service") parser.add_argument( "--admin_user", help="Name of keystone admin user") parser.add_argument( "--admin_password", help="Password of keystone admin user") group = parser.add_mutually_exclusive_group() group.add_argument( "--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help = "Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv) if not self._args.linklocal_service_name: parser.error('linklocal_service_name is required')