@Override
 public List<CloudResource> build(
     OpenStackContext context,
     long privateId,
     AuthenticatedContext auth,
     Group group,
     Image image,
     List<CloudResource> buildableResource)
     throws Exception {
   CloudResource resource = buildableResource.get(0);
   try {
     OSClient osClient = createOSClient(auth);
     List<CloudResource> computeResources = context.getComputeResources(privateId);
     CloudResource instance = getInstance(computeResources);
     String pool = osClient.compute().floatingIps().getPoolNames().get(0);
     FloatingIP unusedIp = osClient.compute().floatingIps().allocateIP(pool);
     ActionResponse response =
         osClient
             .compute()
             .floatingIps()
             .addFloatingIP(
                 instance.getParameter(OpenStackConstants.SERVER, Server.class),
                 unusedIp.getFloatingIpAddress());
     if (!response.isSuccess()) {
       throw new OpenStackResourceException(
           "Add floating-ip to server failed",
           resourceType(),
           resource.getName(),
           auth.getCloudContext().getId(),
           response.getFault());
     }
     return Collections.singletonList(createPersistedResource(resource, unusedIp.getId()));
   } catch (OS4JException ex) {
     throw new OpenStackResourceException(
         "Add floating-ip to server failed", resourceType(), resource.getName(), ex);
   }
 }