def __init__(self, args_str=None):
        self._args = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)

        try:
            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)
        except ResourceExhaustionError:  # haproxy throws 503
            raise

        for alarm in alarm_list:
            kwargs = alarm
            fq_name = alarm['fq_name']
            alarm_obj = Alarm(**kwargs)

            try:
                self._vnc_lib.alarm_create(alarm_obj)
            except AttributeError:
                print "Invalid alarm config for %s" % (fq_name)
            except RefsExistError:
                print "alarm config %s already created" % (fq_name)
            except Exception as e:
                print "Failed to create alarm config %s - %s" % (fq_name,
                                                                 str(e))
            else:
                print "Created alarm %s" % (fq_name)
    def __init__(self, args_str=None):
        self._args = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)

        connected = False
        tries = 0
        while not connected:
            try:
                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,
                    auth_host=self._args.openstack_ip)
                connected = True
            except ResourceExhaustionError: # haproxy throws 503
                if tries < 10:
                    tries += 1
                    time.sleep(3)
                else:
                    raise
        #self.phy_obj = self._vnc_lib.physical_routers_list()
        if self._args.oper == 'add':
            self.add_physical_device()
        elif self._args.oper == 'del':
            self.del_physical_device()
        else:
            print("Unknown operation %s. Only 'add' and 'del' supported"\
                % (self._args.oper))
예제 #3
0
    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.user, self._args.password,
            self._args.tenant_name,
            self._args.api_server_ip,
            self._args.api_server_port, '/',
            api_server_use_ssl=self._args.api_server_use_ssl)

        mtu = int(self._args.mtu)
        vmi_id_got = self._args.virtual_machine_interface_id

        if mtu < 256 or mtu > 9160:
            print 'Mtu value should be between 256 and 9160'
            sys.exit(1)

	if vmi_id_got is None:
            print 'virtual_machine_interface_id is invalid'
            sys.exit(1)
	vmi = None
	try:
            vmi = self._vnc_lib.virtual_machine_interface_read(id=vmi_id_got)
	except NoIdError:
	    pass
        if vmi is not None:
            vmi.set_virtual_machine_interface_mtu(mtu)
            self._vnc_lib.virtual_machine_interface_update(vmi)
            print "Virtual machine interface mtu updated"
        else:
            print "No virtual machine interface found"
    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, '/')
        vnc_lib = self._vnc_lib

        if self._args.op is None or self._args.op == 'add_basic':
            router_external = False
            if self._args.public_vrf_test is not None and self._args.public_vrf_test == 'True':
                router_external = True
            vxlan = None
            if self._args.vxlan is not None:
                vxlan = self._args.vxlan
            self.add_physical_router_config(router_external, vxlan)
        elif self._args.op == 'delete_basic':
            print 'calling delete_physical_router_config\n'
            self.delete_physical_router_config()
        elif self._args.op == 'delete_fip_test':
            print 'calling delete_physical_router_config: fip_test\n'
            self.delete_bms_config()
        elif self._args.op == 'fip_test':
            print 'calling add_physical_router_config: fip_test\n'
            self.add_bms_config()
    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)

        global_vrouter_fq_name = ['default-global-system-config',
                                  'default-global-vrouter-config']
        if self._args.oper == "add":
            encap_obj = EncapsulationPrioritiesType(
                    encapsulation=self._args.encap_priority.split(","))
            conf_obj = GlobalVrouterConfig(encapsulation_priorities=encap_obj,
                    vxlan_network_identifier_mode=self._args.vxlan_vn_id_mode,
                    fq_name=global_vrouter_fq_name)
            try:
                result = self._vnc_lib.global_vrouter_config_create(conf_obj)
                print 'Created.UUID is %s' % result
            except RefsExistError:
                print "Already created! Updating the object."
                result = self._vnc_lib.global_vrouter_config_update(conf_obj)
                print 'Updated.%s' % result
            return
        elif self._args.oper != "add":
            encap_obj = EncapsulationPrioritiesType(encapsulation=[])
            conf_obj = GlobalVrouterConfig(encapsulation_priorities=encap_obj,
                    fq_name=global_vrouter_fq_name)
            result = self._vnc_lib.global_vrouter_config_update(conf_obj)
예제 #6
0
 def __init__(self,
              user,
              password,
              tenant,
              api_server_ip,
              api_server_port,
              api_server_use_ssl=False,
              use_admin_api=False,
              sub_cluster_name=None,
              peer_list=None):
     self._admin_user = user
     self._admin_password = password
     self._admin_tenant_name = tenant
     self._api_server_ip = api_server_ip
     self._api_server_port = api_server_port
     self._api_server_use_ssl = api_server_use_ssl
     self._sub_cluster_name = sub_cluster_name
     self._peer_list = peer_list
     self._vnc_lib = VncApiAdmin(
         use_admin_api,
         self._admin_user,
         self._admin_password,
         self._admin_tenant_name,
         self._api_server_ip,
         self._api_server_port,
         '/',
         api_server_use_ssl=self._api_server_use_ssl)
예제 #7
0
    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.items():
            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))
예제 #8
0
    def __init__(self, args_str=None):
        self._args = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)

        if self._args.router_asn and not self._args.oper:
            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)

            # Update global system config also with this ASN
            gsc_obj = self._vnc_lib.global_system_config_read(
                fq_name=['default-global-system-config'])
            gsc_obj.set_autonomous_system(self._args.router_asn)
            if self._args.ibgp_auto_mesh is not None:
                gsc_obj.set_ibgp_auto_mesh(self._args.ibgp_auto_mesh)

            if self._args.set_graceful_restart_parameters == True:
                gr_params = GracefulRestartParametersType()
                gr_params.set_restart_time(
                    int(self._args.graceful_restart_time))
                gr_params.set_long_lived_restart_time(
                    int(self._args.long_lived_graceful_restart_time))
                gr_params.set_end_of_rib_timeout(
                    int(self._args.end_of_rib_timeout))
                gr_params.set_enable(self._args.graceful_restart_enable)
                gr_params.set_bgp_helper_enable(
                    self._args.graceful_restart_bgp_helper_enable)
                gr_params.set_xmpp_helper_enable(
                    self._args.graceful_restart_xmpp_helper_enable)
                gsc_obj.set_graceful_restart_parameters(gr_params)
            self._vnc_lib.global_system_config_update(gsc_obj)
            return

        bp_obj = BgpProvisioner(
            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,
            use_admin_api=self._args.use_admin_api)
        if self._args.oper == 'add':
            bp_obj.add_bgp_router('control-node', self._args.host_name,
                                  self._args.host_ip, self._args.router_asn,
                                  self._args.address_families, self._args.md5,
                                  self._args.local_autonomous_system)
        elif self._args.oper == 'del':
            bp_obj.del_bgp_router(self._args.host_name)
        else:
            print "Unknown operation %s. Only 'add' and 'del' supported"\
                % (self._args.oper)
예제 #9
0
    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)

        global_vrouter_fq_name = [
            'default-global-system-config', 'default-global-vrouter-config'
        ]
        if self._args.oper == "add":
            encap_obj = EncapsulationPrioritiesType(
                encapsulation=self._args.encap_priority.split(","))
            conf_obj = GlobalVrouterConfig(
                encapsulation_priorities=encap_obj,
                vxlan_network_identifier_mode=self._args.vxlan_vn_id_mode,
                fq_name=global_vrouter_fq_name)
            try:
                result = self._vnc_lib.global_vrouter_config_create(conf_obj)
                print('Created.UUID is %s' % result)
            except RefsExistError:
                print("GlobalVrouterConfig Exists Already!")
                vrouter_conf_obj = self._vnc_lib.global_vrouter_config_read(
                    fq_name=global_vrouter_fq_name)
                curr_encap_obj = vrouter_conf_obj.get_encapsulation_priorities(
                )
                print("Current Encap priority:", curr_encap_obj)
                curr_vxlan_vn_id_mode = vrouter_conf_obj.get_vxlan_network_identifier_mode(
                )
                print("Current curr_vxlan_vn_id_mode priority:",
                      curr_vxlan_vn_id_mode)
                vrouter_args = {}
                if not curr_encap_obj:
                    vrouter_args['encapsulation_priorities'] = encap_obj
                if not curr_vxlan_vn_id_mode:
                    vrouter_args[
                        'vxlan_network_identifier_mode'] = self._args.vxlan_vn_id_mode
                if vrouter_args:
                    vrouter_args['fq_name'] = global_vrouter_fq_name
                    conf_obj = GlobalVrouterConfig(**vrouter_args)
                    result = self._vnc_lib.global_vrouter_config_update(
                        conf_obj)
                    print('Updated.%s' % result)
            return
        elif self._args.oper != "add":
            encap_obj = EncapsulationPrioritiesType(encapsulation=[])
            conf_obj = GlobalVrouterConfig(encapsulation_priorities=encap_obj,
                                           fq_name=global_vrouter_fq_name)
            result = self._vnc_lib.global_vrouter_config_update(conf_obj)
예제 #10
0
    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)
예제 #11
0
    def __init__(self, args_str=None):
        self._args = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)

        try:
            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)
        except ResourceExhaustionError:  # haproxy throws 503
            raise

        for alarm in alarm_list:
            kwargs = alarm
            fq_name = alarm['fq_name']
            alarm_obj = Alarm(**kwargs)

            try:
                self._vnc_lib.alarm_create(alarm_obj)
            except AttributeError:
                print("Invalid alarm config for %s" % (fq_name))
            except RefsExistError:
                print("alarm config %s already exists, updating" % (fq_name))
                try:
                    # we need to keep id_perms field empty in the alarm object
                    # otherwise vnc-api expects a valid id_perms.uuid field.
                    # existing id_perms.description field in alarm config db will
                    # stay as is.
                    # create an alarm object without id_perms field.
                    del kwargs['id_perms']
                    alarm_obj2 = Alarm(**kwargs)
                    self._vnc_lib.alarm_update(alarm_obj2)
                except AttributeError:
                    print("Invalid alarm config for %s" % (fq_name))
                except Exception as e:
                    print("Failed to update alarm config %s - %s" %
                          (fq_name, str(e)))
                else:
                    print("Updated alarm %s" % (fq_name))
            except Exception as e:
                print("Failed to create alarm config %s - %s" %
                      (fq_name, str(e)))
            else:
                print("Created alarm %s" % (fq_name))
예제 #12
0
    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._prov_info = self._read_provision_data()
        prov_info = self._prov_info

        self._bgp_addr_fams = AddressFamilies(['inet-vpn'])
        self._bgp_sess_attrs = [
            BgpSessionAttributes(address_families=self._bgp_addr_fams)
        ]
        self._bgp_sessions = [BgpSession(attributes=self._bgp_sess_attrs)]
        self._bgp_peering_attrs = BgpPeeringAttributes(
            session=self._bgp_sessions)

        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)
        vnc_lib = self._vnc_lib

        gsc_obj = vnc_lib.global_system_config_read(
            fq_name=['default-global-system-config'])

        gsc_obj.set_autonomous_system(prov_info['bgp-asn'])
        if 'ibgp-auto-mesh' in prov_info:
            gsc_obj.set_ibgp_auto_mesh(prov_infoi['ibgp-auto-mesh'])
        vnc_lib.global_system_config_update(gsc_obj)
        self._global_system_config_obj = gsc_obj

        # TODO pick fqname hardcode from common
        rt_inst_obj = vnc_lib.routing_instance_read(fq_name=[
            'default-domain', 'default-project', 'ip-fabric', '__default__'
        ])
        self._fab_rt_inst_obj = rt_inst_obj

        for host in prov_info['hosts']:
            for role in host['roles']:
                if role['type'] == 'bgp':
                    self.add_bgp_router(host['name'], host['ip'])
                elif role['type'] == 'compute':
                    self.add_vrouter(host['name'], host['ip'])
예제 #13
0
    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)

        #import pdb;pdb.set_trace()
        vxlan_id = self._args.vxlan_id
        vn_name = self._args.vn_name
        forwarding_mode = self._args.forwarding_mode
        project_fq_name_str = self._args.project_fq_name
        project_fq_name = project_fq_name_str.split(':')

        #Figure out VN
        vni_list = self._vnc_lib.virtual_networks_list(
            parent_fq_name=project_fq_name)['virtual-networks']
        found = False
        for vni_record in vni_list:
            if (vni_record['fq_name'][0] == project_fq_name[0]
                    and vni_record['fq_name'][1] == project_fq_name[1]
                    and vni_record['fq_name'][2] == vn_name):
                vni_obj = self._vnc_lib.virtual_network_read(
                    id=vni_record['uuid'])
                vni_obj_properties = vni_obj.get_virtual_network_properties(
                ) or VirtualNetworkType()
                if (vxlan_id is not None):
                    vni_obj_properties.set_vxlan_network_identifier(
                        int(vxlan_id))
                if (forwarding_mode is not None):
                    vni_obj_properties.set_forwarding_mode(forwarding_mode)
                vni_obj.set_virtual_network_properties(vni_obj_properties)
                self._vnc_lib.virtual_network_update(vni_obj)
                found = True

        if not found:
            print("No Virtual Network  %s" % (vn_name))
            sys.exit(1)
예제 #14
0
    def __init__(self, args_str=None):
        self._args = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)

        connected = False
        tries = 0
        while not connected:
            try:
                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,
                    '/',
                    auth_host=self._args.openstack_ip,
                    api_server_use_ssl=self._args.api_server_use_ssl)
                connected = True
            except ResourceExhaustionError:  # haproxy throws 503
                if tries < 10:
                    tries += 1
                    time.sleep(3)
                else:
                    raise
        gsc_obj = self._vnc_lib.global_system_config_read(
            fq_name=['default-global-system-config'])
        self._global_system_config_obj = gsc_obj

        rt_inst_obj = self._vnc_lib.routing_instance_read(fq_name=[
            'default-domain', 'default-project', 'ip-fabric', '__default__'
        ])
        self._fab_rt_inst_obj = rt_inst_obj

        if self._args.oper == 'add':
            self.add_vrouter()
            if not self._args.disable_vhost_vmi:
                self.add_vhost0_vmi()
        elif self._args.oper == 'del':
            self.del_vhost0_vmi()
            self.del_vrouter()
        else:
            print("Unknown operation %s. Only 'add' and 'del' supported" %
                  (self._args.oper))
예제 #15
0
    def __init__(self, args_str=None):
        self._args = None
        self._peer_list = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)
        if self._args.peer_list:
            self._peer_list = self._args.peer_list.split(',')

        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, '/',
            self._args.api_server_use_ssl)

        self.add_bgp_router()
        if self._args.oper == 'add':
            self.add_physical_device()
        elif self._args.oper == 'del':
            self.delete_physical_device()
예제 #16
0
    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, '/')
        vnc = self._vnc_lib
        gsc_uuid = vnc.global_system_configs_list(
        )['global-system-configs'][0]['uuid']
        gsc = vnc.global_system_config_read(id=gsc_uuid)

        if hasattr(self._args, 'add'):
            print('Add -> ', ', '.join(self._args.add))
            g = GlobalSystemConfig()
            g.add_user_defined_log_statistics(
                UserDefinedLogStat(*self._args.add))
            vnc.global_system_config_update(g)
        elif hasattr(self._args, 'delete'):
            print('Delete -> ', ', '.join(self._args.delete))
            if gsc.user_defined_log_statistics:
                gsc.user_defined_log_statistics.statlist = [
                    x for x in gsc.user_defined_log_statistics.statlist
                    if x.name not in self._args.delete
                ]
                gsc.set_user_defined_log_statistics(
                    gsc.user_defined_log_statistics)
                vnc.global_system_config_update(gsc)
        elif hasattr(self._args, 'list'):
            print('ls -> ', ', '.join(self._args.list))
            print('Configured:')
            if gsc.user_defined_log_statistics:
                for x in gsc.user_defined_log_statistics.statlist:
                    if self._chk2print(x.name):
                        print('Name: "%s", Pattern: "%s"' %
                              (x.name, x.pattern))
    def __init__(self, args_str=None):
        self._args = None
        if not args_str:
            args_str = ' '.join(sys.argv[1:])
        self._parse_args(args_str)

        connected = False
        tries = 0
        while not connected:
            try:
                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,
                    '/',
                    auth_host=self._args.openstack_ip,
                    api_server_use_ssl=self._args.api_server_use_ssl)
                connected = True
            except ResourceExhaustionError:  # haproxy throws 503
                if tries < 10:
                    tries += 1
                    time.sleep(3)
                else:
                    raise

        gsc_obj = self._vnc_lib.global_system_config_read(
            fq_name=['default-global-system-config'])
        self._global_system_config_obj = gsc_obj

        if self._args.oper == 'add':
            self.add_webui_node()
        elif self._args.oper == 'del':
            self.del_webui_node()
        else:
            print("Unknown operation %s. Only 'add' and 'del' supported"\
                % (self._args.oper))
    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)
    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))
    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.user,
            self._args.password,
            self._args.tenant_name,
            self._args.api_server_ip,
            self._args.api_server_port,
            '/',
            api_server_use_ssl=self._args.api_server_use_ssl)

        prefix = self._args.prefix
        vmi_id_got = self._args.virtual_machine_interface_id
        route_table_name = self._args.route_table_name

        try:
            ip_nw = IPNetwork(prefix)
        except AddrFormatError:
            print('Invalid ip address format')
            sys.exit(1)

        project_fq_name_str = 'default-domain:' + self._args.tenant_name
        project_fq_name = project_fq_name_str.split(':')
        project_obj = self._vnc_lib.project_read(fq_name=project_fq_name)

        route_table = RouteTableType(route_table_name)
        route_table.set_route([])
        intf_route_table = InterfaceRouteTable(
            interface_route_table_routes=route_table,
            parent_obj=project_obj,
            name=route_table_name)
        try:
            route_table_obj = self._vnc_lib.interface_route_table_read(
                fq_name=intf_route_table.get_fq_name())
            intf_route_table_id = route_table_obj.uuid
        except NoIdError:
            if self._args.oper == 'del':
                print("Route table %s does not exist" % (route_table_name))
                sys.exit(1)
            print("Creating Route table")
            intf_route_table_id = self._vnc_lib.interface_route_table_create(
                intf_route_table)
        intf_route_table_obj = self._vnc_lib.interface_route_table_read(
            id=intf_route_table_id)
        if self._args.oper == 'add':
            intf_route_table_obj = self.add_route(intf_route_table_obj, prefix)
        elif self._args.oper == 'del':
            intf_route_table_obj = self.del_route(intf_route_table_obj, prefix)
        self._vnc_lib.interface_route_table_update(intf_route_table_obj)

        #Update the VMI Object now
        vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_id_got)
        if self._args.oper == 'add':
            vmi_obj.add_interface_route_table(intf_route_table_obj)
        elif self._args.oper == 'del':
            if self.is_route_table_empty(intf_route_table_obj):
                vmi_obj.del_interface_route_table(intf_route_table_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi_obj)