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 = VncApi(
            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)
Example #2
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 = VncApi(
            self._args.user, self._args.password,
            self._args.tenant_name,
            self._args.api_server_ip,
            self._args.api_server_port, '/')
        
        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)
    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 = VncApi(
            self._args.user, self._args.password,
            self._args.tenant_name,
            self._args.api_server_ip,
            self._args.api_server_port, '/')
        
        prefix = self._args.prefix
        vm_id = self._args.virtual_machine_id
        vm_ip = self._args.virtual_machine_interface_ip
        vmi_id_got =None
        route_table_name = self._args.route_table_name
        
        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)
        
        #Figure out VMI from VM IP
        vmi_list = self._vnc_lib.virtual_machine_interfaces_list( 
                        parent_id = vm_id)['virtual-machine-interfaces']
        vmi_id_list = [vmi['uuid'] for vmi in vmi_list]
        found = False
        for vmi_id in vmi_id_list:
            vmi_obj = self._vnc_lib.virtual_machine_interface_read(
                                id = vmi_id)
            ip_back_refs = vmi_obj.get_instance_ip_back_refs()
            for ip_back_ref in ip_back_refs:
                ip_obj = self._vnc_lib.instance_ip_read(
                                id = ip_back_ref['uuid'])
                if ip_obj.instance_ip_address == vm_ip:
                    found = True 
                    vmi_id_got = vmi_id
                    break
            if found:
                break
        #end for vmi_id
        if not found:
            print "No Virtual Machine interface found for IP %s" %(vm_ip)
            sys.exit(1)
        
        #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.set_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)
    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 = VncApi(self._args.user, self._args.password,
                               self._args.tenant_name,
                               self._args.api_server_ip,
                               self._args.api_server_port, '/')

        prefix = self._args.prefix
        vm_id = self._args.virtual_machine_id
        vm_ip = self._args.virtual_machine_interface_ip
        vmi_id_got = None
        route_table_name = self._args.route_table_name

        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)

        #Figure out VMI from VM IP
        vmi_list = self._vnc_lib.virtual_machine_interfaces_list(
            parent_id=vm_id)['virtual-machine-interfaces']
        vmi_id_list = [vmi['uuid'] for vmi in vmi_list]
        found = False
        for vmi_id in vmi_id_list:
            vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_id)
            ip_back_refs = vmi_obj.get_instance_ip_back_refs()
            for ip_back_ref in ip_back_refs:
                ip_obj = self._vnc_lib.instance_ip_read(id=ip_back_ref['uuid'])
                if ip_obj.instance_ip_address == vm_ip:
                    found = True
                    vmi_id_got = vmi_id
                    break
            if found:
                break
        #end for vmi_id
        if not found:
            print "No Virtual Machine interface found for IP %s" % (vm_ip)
            sys.exit(1)

        #Update the VMI Object now
        vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_id_got)
        vmi_obj.set_interface_route_table(intf_route_table_obj)
        self._vnc_lib.virtual_machine_interface_update(vmi_obj)