code: def list_targets(self):
          
          tenant_id = self.request.user.tenant_id
          ports = port_list(self.request, tenant_id=tenant_id)
          servers, has_more = nova.server_list(self.request, detailed=False)
          server_dict = collections.OrderedDict(
              [(s.id, s.name) for s in servers])
          reachable_subnets = self._get_reachable_subnets(ports)
  
          targets = []
          for p in ports:
              # Remove network ports from Floating IP targets
              if p.device_owner.startswith('network:'):
                  continue
              server_name = server_dict.get(p.device_id)
  
              for ip in p.fixed_ips:
                  if ip['subnet_id'] not in reachable_subnets:
                      continue
                  # Floating IPs can only target IPv4 addresses.
                  if netaddr.IPAddress(ip['ip_address']).version != 4:
                      continue
                  targets.append(FloatingIpTarget(p, ip['ip_address'],
                                                  server_name))
          return targets
docs: Returns a list of association targets of instance VIFs.
  
          Each association target is represented as FloatingIpTarget object.
          FloatingIpTarget is a APIResourceWrapper/APIDictWrapper and
          'id' and 'name' attributes must be defined in each object.
          FloatingIpTarget.id can be passed as port_id in associate().
          FloatingIpTarget.name is displayed in Floating Ip Association Form.