def _neutron_dict_to_fip_obj(self,
                                 fip_q,
                                 is_admin=False,
                                 tenant_id=None,
                                 fip_obj=None):
        if not fip_obj:
            try:
                fip_obj = self._resource_get(id=fip_q['id'])
            except vnc_exc.NoIdError:
                self._raise_contrail_exception('FloatingIPNotFound',
                                               floatingip_id=fip_q['id'])

        vmi_get_handler = vmi_handler.VMInterfaceGetHandler(self._vnc_lib)
        port_id = fip_q.get('port_id')
        if port_id:
            try:
                vmi_obj = vmi_get_handler.get_vmi_obj(port_id)
            except vnc_exc.NoIdError:
                self._raise_contrail_exception('PortNotFound',
                                               resource='floatingip',
                                               port_id=port_id)

            if not is_admin:
                vmi_tenant_id = vmi_get_handler.get_vmi_tenant_id(vmi_obj)
                if vmi_tenant_id != tenant_id:
                    self._raise_contrail_exception('PortNotFound',
                                                   resource='floatingip',
                                                   port_id=port_id)
            fip_obj.set_virtual_machine_interface(vmi_obj)
        else:
            fip_obj.set_virtual_machine_interface_list([])

        if fip_q.get('fixed_ip_address'):
            fip_obj.set_floating_ip_fixed_ip_address(fip_q['fixed_ip_address'])
        else:
            # fixed_ip_address not specified, pick from vmi_obj in create,
            # reset in case of disassociate
            vmi_refs = fip_obj.get_virtual_machine_interface_refs()
            if not vmi_refs:
                fip_obj.set_floating_ip_fixed_ip_address(None)
            else:
                vmi_obj = vmi_get_handler.get_vmi_obj(
                    vmi_refs[0]['uuid'], fields=['instance_ip_back_refs'])

                iip_refs = vmi_obj.get_instance_ip_back_refs()
                if iip_refs:
                    iip_obj = self._vnc_lib.instance_ip_read(
                        id=iip_refs[0]['uuid'])
                    fip_obj.set_floating_ip_fixed_ip_address(
                        iip_obj.get_instance_ip_address())

        return fip_obj
    def get_vmi_obj_router_id(self, vmi_obj, project_id=None):
        vmi_get_handler = vmi_handler.VMInterfaceGetHandler(self._vnc_lib)

        port_net_id = vmi_obj.get_virtual_network_refs()[0]['uuid']
        # find router_id from port
        router_list = self._router_list_project(project_id=project_id,
                                                detail=True)
        for router_obj in router_list or []:
            for vmi in (router_obj.get_virtual_machine_interface_refs() or []):
                vmi_obj = vmi_get_handler.get_vmi_obj(vmi['uuid'])
                if (vmi_obj.get_virtual_network_refs()[0]['uuid'] ==
                        port_net_id):
                    return router_obj.uuid
    def _fip_obj_to_neutron_dict(self, fip_obj, fields=None):
        fip_q_dict = {}
        vmi_get_handler = vmi_handler.VMInterfaceGetHandler(self._vnc_lib)

        floating_net_id = self._vnc_lib.fq_name_to_id(
            'virtual-network',
            fip_obj.get_fq_name()[:-2])
        tenant_id = self._project_id_vnc_to_neutron(
            fip_obj.get_project_refs()[0]['uuid'])

        port_id = None
        router_id = None
        vmi_obj = None
        vmi_refs = fip_obj.get_virtual_machine_interface_refs()
        for vmi_ref in vmi_refs or []:
            try:
                vmi_obj = vmi_get_handler.get_vmi_obj(vmi_ref['uuid'])

                # In case of floating ip on the Virtual-ip, svc-monitor will
                # link floating ip to "right" interface of service VMs
                # launched by ha-proxy service instance. Skip them
                props = vmi_obj.get_virtual_machine_interface_properties()
                if props:
                    interface_type = props.get_service_interface_type()
                    if interface_type == "right":
                        continue
                port_id = vmi_ref['uuid']
                break
            except vnc_exc.NoIdError:
                pass

        if vmi_obj:
            router_get_handler = router_handler.LogicalRouterGetHandler(
                self._vnc_lib)
            router_id = router_get_handler.get_vmi_obj_router_id(
                vmi_obj, project_id=tenant_id)

        fip_q_dict['id'] = fip_obj.uuid
        fip_q_dict['tenant_id'] = tenant_id
        fip_q_dict['floating_ip_address'] = fip_obj.get_floating_ip_address()
        fip_q_dict['floating_network_id'] = floating_net_id
        fip_q_dict['router_id'] = router_id
        fip_q_dict['port_id'] = port_id
        fip_q_dict['fixed_ip_address'] = (
            fip_obj.get_floating_ip_fixed_ip_address())
        fip_q_dict['status'] = constants.PORT_STATUS_ACTIVE

        if fields:
            fip_q_dict = self._filter_res_dict(fip_q_dict, fields)
        return fip_q_dict
    def _fip_obj_to_neutron_dict(self, fip_obj, fields=None):
        fip_q_dict = {}
        vmi_get_handler = vmi_handler.VMInterfaceGetHandler(self._vnc_lib)

        floating_net_id = self._vnc_lib.fq_name_to_id(
            'virtual-network',
            fip_obj.get_fq_name()[:-2])
        tenant_id = self._project_id_vnc_to_neutron(
            fip_obj.get_project_refs()[0]['uuid'])

        port_id = None
        router_id = None
        vmi_obj = None
        vmi_refs = fip_obj.get_virtual_machine_interface_refs()
        for vmi_ref in vmi_refs or []:
            try:
                vmi_obj = vmi_get_handler.get_vmi_obj(vmi_ref['uuid'])
                port_id = vmi_ref['uuid']
                break
            except vnc_exc.NoIdError:
                pass

        if vmi_obj:
            router_get_handler = router_handler.LogicalRouterGetHandler(
                self._vnc_lib)
            router_id = router_get_handler.get_vmi_obj_router_id(vmi_obj)

        fip_q_dict['id'] = fip_obj.uuid
        fip_q_dict['tenant_id'] = tenant_id
        fip_q_dict['floating_ip_address'] = fip_obj.get_floating_ip_address()
        fip_q_dict['floating_network_id'] = floating_net_id
        fip_q_dict['router_id'] = router_id
        fip_q_dict['port_id'] = port_id
        fip_q_dict['fixed_ip_address'] = (
            fip_obj.get_floating_ip_fixed_ip_address())
        fip_q_dict['status'] = n_constants.PORT_STATUS_ACTIVE

        if fields:
            fip_q_dict = self._filter_res_dict(fip_q_dict, fields)
        return fip_q_dict