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