mirror of https://github.com/apache/jclouds.git
Removed all unnecessary interfaces from strategies
Removed all interfaces from the strategy classes that only have one implementation.
This commit is contained in:
parent
5ba08d8448
commit
f39c1add89
|
@ -19,19 +19,96 @@
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import org.jclouds.abiquo.domain.network.Ip;
|
import static com.google.common.collect.Iterables.filter;
|
||||||
import org.jclouds.abiquo.strategy.ListEntities;
|
import static com.google.common.collect.Iterables.transform;
|
||||||
import org.jclouds.abiquo.strategy.cloud.internal.ListAttachedNicsImpl;
|
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
||||||
|
|
||||||
import com.google.inject.ImplementedBy;
|
import org.jclouds.abiquo.AbiquoApi;
|
||||||
|
import org.jclouds.abiquo.AbiquoAsyncApi;
|
||||||
|
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
||||||
|
import org.jclouds.abiquo.domain.network.ExternalIp;
|
||||||
|
import org.jclouds.abiquo.domain.network.Ip;
|
||||||
|
import org.jclouds.abiquo.domain.network.PrivateIp;
|
||||||
|
import org.jclouds.abiquo.domain.network.PublicIp;
|
||||||
|
import org.jclouds.abiquo.domain.network.UnmanagedIp;
|
||||||
|
import org.jclouds.abiquo.domain.util.LinkUtils;
|
||||||
|
import org.jclouds.abiquo.rest.internal.ExtendedUtils;
|
||||||
|
import org.jclouds.abiquo.strategy.ListEntities;
|
||||||
|
import org.jclouds.http.HttpResponse;
|
||||||
|
import org.jclouds.http.functions.ParseXMLWithJAXB;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
|
import com.abiquo.model.rest.RESTLink;
|
||||||
|
import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.network.PrivateIpDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.network.PublicIpDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List all NICs attached to a given virtual machine.
|
* List all NICs attached to a given virtual machine.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@ImplementedBy(ListAttachedNicsImpl.class)
|
@Singleton
|
||||||
public interface ListAttachedNics extends ListEntities<Ip<?, ?>, VirtualMachine> {
|
public class ListAttachedNics implements ListEntities<Ip<?, ?>, VirtualMachine> {
|
||||||
|
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
||||||
|
|
||||||
|
protected final ExtendedUtils extendedUtils;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ListAttachedNics(final RestContext<AbiquoApi, AbiquoAsyncApi> context, final ExtendedUtils extendedUtils) {
|
||||||
|
this.context = checkNotNull(context, "context");
|
||||||
|
this.extendedUtils = checkNotNull(extendedUtils, "extendedUtils");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Ip<?, ?>> execute(final VirtualMachine parent) {
|
||||||
|
parent.refresh();
|
||||||
|
Iterable<RESTLink> nicLinks = LinkUtils.filterNicLinks(parent.unwrap().getLinks());
|
||||||
|
return listIps(nicLinks);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Ip<?, ?>> execute(final VirtualMachine parent, final Predicate<Ip<?, ?>> selector) {
|
||||||
|
return filter(execute(parent), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<Ip<?, ?>> listIps(final Iterable<RESTLink> nicLinks) {
|
||||||
|
return transform(nicLinks, new Function<RESTLink, Ip<?, ?>>() {
|
||||||
|
@Override
|
||||||
|
public Ip<?, ?> apply(final RESTLink input) {
|
||||||
|
HttpResponse response = extendedUtils.getAbiquoHttpClient().get(input);
|
||||||
|
|
||||||
|
if (input.getType().equals(PrivateIpDto.BASE_MEDIA_TYPE)) {
|
||||||
|
ParseXMLWithJAXB<PrivateIpDto> parser = new ParseXMLWithJAXB<PrivateIpDto>(extendedUtils.getXml(),
|
||||||
|
TypeLiteral.get(PrivateIpDto.class));
|
||||||
|
|
||||||
|
return wrap(context, PrivateIp.class, parser.apply(response));
|
||||||
|
} else if (input.getType().equals(PublicIpDto.BASE_MEDIA_TYPE)) {
|
||||||
|
ParseXMLWithJAXB<PublicIpDto> parser = new ParseXMLWithJAXB<PublicIpDto>(extendedUtils.getXml(),
|
||||||
|
TypeLiteral.get(PublicIpDto.class));
|
||||||
|
|
||||||
|
return wrap(context, PublicIp.class, parser.apply(response));
|
||||||
|
} else if (input.getType().equals(ExternalIpDto.BASE_MEDIA_TYPE)) {
|
||||||
|
ParseXMLWithJAXB<ExternalIpDto> parser = new ParseXMLWithJAXB<ExternalIpDto>(extendedUtils.getXml(),
|
||||||
|
TypeLiteral.get(ExternalIpDto.class));
|
||||||
|
|
||||||
|
return wrap(context, ExternalIp.class, parser.apply(response));
|
||||||
|
} else if (input.getType().equals(UnmanagedIpDto.BASE_MEDIA_TYPE)) {
|
||||||
|
ParseXMLWithJAXB<UnmanagedIpDto> parser = new ParseXMLWithJAXB<UnmanagedIpDto>(extendedUtils.getXml(),
|
||||||
|
TypeLiteral.get(UnmanagedIpDto.class));
|
||||||
|
|
||||||
|
return wrap(context, UnmanagedIp.class, parser.apply(response));
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Unsupported media type: " + input.getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,18 +19,86 @@
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import org.jclouds.abiquo.strategy.ListRootEntities;
|
import static com.google.common.collect.Iterables.filter;
|
||||||
import org.jclouds.abiquo.strategy.cloud.internal.ListVirtualAppliancesImpl;
|
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
||||||
|
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||||
|
|
||||||
import com.google.inject.ImplementedBy;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
|
import org.jclouds.abiquo.AbiquoApi;
|
||||||
|
import org.jclouds.abiquo.AbiquoAsyncApi;
|
||||||
|
import org.jclouds.abiquo.domain.DomainWrapper;
|
||||||
|
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
||||||
|
import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
|
||||||
|
import org.jclouds.abiquo.strategy.ListRootEntities;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
|
import com.abiquo.server.core.cloud.VirtualApplianceDto;
|
||||||
|
import com.abiquo.server.core.cloud.VirtualAppliancesDto;
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List virtual appliances in each virtual datacenter.
|
* List virtual appliances in each virtual datacenter.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@ImplementedBy(ListVirtualAppliancesImpl.class)
|
@Singleton
|
||||||
public interface ListVirtualAppliances extends ListRootEntities<VirtualAppliance> {
|
public class ListVirtualAppliances implements ListRootEntities<VirtualAppliance> {
|
||||||
|
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
||||||
|
|
||||||
|
protected final ListVirtualDatacenters listVirtualDatacenters;
|
||||||
|
|
||||||
|
protected final ExecutorService userExecutor;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
||||||
|
protected Long maxTime;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ListVirtualAppliances(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
||||||
|
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor,
|
||||||
|
final ListVirtualDatacenters listVirtualDatacenters) {
|
||||||
|
this.context = checkNotNull(context, "context");
|
||||||
|
this.listVirtualDatacenters = checkNotNull(listVirtualDatacenters, "listVirtualDatacenters");
|
||||||
|
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualAppliance> execute() {
|
||||||
|
// Find virtual appliances in concurrent requests
|
||||||
|
Iterable<VirtualDatacenter> vdcs = listVirtualDatacenters.execute();
|
||||||
|
Iterable<VirtualApplianceDto> vapps = listConcurrentVirtualAppliances(vdcs);
|
||||||
|
|
||||||
|
return wrap(context, VirtualAppliance.class, vapps);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualAppliance> execute(final Predicate<VirtualAppliance> selector) {
|
||||||
|
return filter(execute(), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<VirtualApplianceDto> listConcurrentVirtualAppliances(final Iterable<VirtualDatacenter> vdcs) {
|
||||||
|
Iterable<VirtualAppliancesDto> vapps = transformParallel(vdcs,
|
||||||
|
new Function<VirtualDatacenter, Future<? extends VirtualAppliancesDto>>() {
|
||||||
|
@Override
|
||||||
|
public Future<VirtualAppliancesDto> apply(final VirtualDatacenter input) {
|
||||||
|
return context.getAsyncApi().getCloudApi().listVirtualAppliances(input.unwrap());
|
||||||
|
}
|
||||||
|
}, userExecutor, maxTime, logger, "getting virtual appliances");
|
||||||
|
|
||||||
|
return DomainWrapper.join(vapps);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,28 +19,98 @@
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import java.util.List;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static com.google.common.collect.Iterables.filter;
|
||||||
|
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
||||||
|
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
|
import org.jclouds.abiquo.AbiquoApi;
|
||||||
|
import org.jclouds.abiquo.AbiquoAsyncApi;
|
||||||
|
import org.jclouds.abiquo.domain.DomainWrapper;
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
|
import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
|
||||||
import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions;
|
import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions;
|
||||||
import org.jclouds.abiquo.strategy.ListRootEntities;
|
import org.jclouds.abiquo.strategy.ListRootEntities;
|
||||||
import org.jclouds.abiquo.strategy.cloud.internal.ListVirtualDatacentersImpl;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
|
import com.abiquo.server.core.cloud.VirtualDatacenterDto;
|
||||||
|
import com.abiquo.server.core.cloud.VirtualDatacentersDto;
|
||||||
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.inject.ImplementedBy;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List virtual datacenters.
|
* List virtual datacenters.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@ImplementedBy(ListVirtualDatacentersImpl.class)
|
@Singleton
|
||||||
public interface ListVirtualDatacenters extends ListRootEntities<VirtualDatacenter> {
|
public class ListVirtualDatacenters implements ListRootEntities<VirtualDatacenter> {
|
||||||
Iterable<VirtualDatacenter> execute(VirtualDatacenterOptions virtualDatacenterOptions);
|
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
||||||
|
|
||||||
Iterable<VirtualDatacenter> execute(List<Integer> virtualDatacenterIds);
|
protected final ExecutorService userExecutor;
|
||||||
|
|
||||||
Iterable<VirtualDatacenter> execute(Predicate<VirtualDatacenter> selector,
|
@Resource
|
||||||
VirtualDatacenterOptions virtualDatacenterOptions);
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
||||||
|
protected Long maxTime;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ListVirtualDatacenters(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
||||||
|
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor) {
|
||||||
|
this.context = checkNotNull(context, "context");
|
||||||
|
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualDatacenter> execute() {
|
||||||
|
VirtualDatacenterOptions virtualDatacenterOptions = VirtualDatacenterOptions.builder().build();
|
||||||
|
|
||||||
|
return execute(virtualDatacenterOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualDatacenter> execute(final Predicate<VirtualDatacenter> selector) {
|
||||||
|
return filter(execute(), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterable<VirtualDatacenter> execute(final VirtualDatacenterOptions virtualDatacenterOptions) {
|
||||||
|
VirtualDatacentersDto result = context.getApi().getCloudApi().listVirtualDatacenters(virtualDatacenterOptions);
|
||||||
|
return wrap(context, VirtualDatacenter.class, result.getCollection());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterable<VirtualDatacenter> execute(final Predicate<VirtualDatacenter> selector,
|
||||||
|
final VirtualDatacenterOptions virtualDatacenterOptions) {
|
||||||
|
return filter(execute(virtualDatacenterOptions), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterable<VirtualDatacenter> execute(final List<Integer> virtualDatacenterIds) {
|
||||||
|
// Find virtual datacenters in concurrent requests
|
||||||
|
return listConcurrentVirtualDatacenters(virtualDatacenterIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<VirtualDatacenter> listConcurrentVirtualDatacenters(final List<Integer> ids) {
|
||||||
|
Iterable<VirtualDatacenterDto> vdcs = transformParallel(ids,
|
||||||
|
new Function<Integer, Future<? extends VirtualDatacenterDto>>() {
|
||||||
|
@Override
|
||||||
|
public Future<VirtualDatacenterDto> apply(final Integer input) {
|
||||||
|
return context.getAsyncApi().getCloudApi().getVirtualDatacenter(input);
|
||||||
|
}
|
||||||
|
}, userExecutor, maxTime, logger, "getting virtual datacenters");
|
||||||
|
|
||||||
|
return DomainWrapper.wrap(context, VirtualDatacenter.class, Lists.newArrayList(vdcs));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,19 +19,93 @@
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static com.google.common.collect.Iterables.filter;
|
||||||
|
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
||||||
|
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
|
import org.jclouds.abiquo.AbiquoApi;
|
||||||
|
import org.jclouds.abiquo.AbiquoAsyncApi;
|
||||||
|
import org.jclouds.abiquo.domain.DomainWrapper;
|
||||||
|
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
||||||
import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions;
|
import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions;
|
||||||
import org.jclouds.abiquo.strategy.ListRootEntities;
|
import org.jclouds.abiquo.strategy.ListRootEntities;
|
||||||
import org.jclouds.abiquo.strategy.cloud.internal.ListVirtualMachinesImpl;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
import com.google.inject.ImplementedBy;
|
import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
|
||||||
|
import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List virtual machines in each virtual datacenter and each virtual appliance.
|
* List virtual machines in each virtual datacenter and each virtual appliance.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@ImplementedBy(ListVirtualMachinesImpl.class)
|
@Singleton
|
||||||
public interface ListVirtualMachines extends ListRootEntities<VirtualMachine> {
|
public class ListVirtualMachines implements ListRootEntities<VirtualMachine> {
|
||||||
Iterable<VirtualMachine> execute(VirtualMachineOptions options);
|
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
||||||
|
|
||||||
|
protected final ExecutorService userExecutor;
|
||||||
|
|
||||||
|
protected final ListVirtualAppliances listVirtualAppliances;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
||||||
|
protected Long maxTime;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ListVirtualMachines(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
||||||
|
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor,
|
||||||
|
final ListVirtualAppliances listVirtualAppliances) {
|
||||||
|
super();
|
||||||
|
this.context = checkNotNull(context, "context");
|
||||||
|
this.listVirtualAppliances = checkNotNull(listVirtualAppliances, "listVirtualAppliances");
|
||||||
|
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualMachine> execute() {
|
||||||
|
return execute(VirtualMachineOptions.builder().disablePagination().build());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterable<VirtualMachine> execute(final VirtualMachineOptions options) {
|
||||||
|
// Find virtual machines in concurrent requests
|
||||||
|
Iterable<VirtualAppliance> vapps = listVirtualAppliances.execute();
|
||||||
|
Iterable<VirtualMachineWithNodeExtendedDto> vms = listConcurrentVirtualMachines(vapps, options);
|
||||||
|
|
||||||
|
return wrap(context, VirtualMachine.class, vms);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualMachine> execute(final Predicate<VirtualMachine> selector) {
|
||||||
|
return filter(execute(), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<VirtualMachineWithNodeExtendedDto> listConcurrentVirtualMachines(
|
||||||
|
final Iterable<VirtualAppliance> vapps, final VirtualMachineOptions options) {
|
||||||
|
Iterable<VirtualMachinesWithNodeExtendedDto> vms = transformParallel(vapps,
|
||||||
|
new Function<VirtualAppliance, Future<? extends VirtualMachinesWithNodeExtendedDto>>() {
|
||||||
|
@Override
|
||||||
|
public Future<VirtualMachinesWithNodeExtendedDto> apply(final VirtualAppliance input) {
|
||||||
|
return context.getAsyncApi().getCloudApi().listVirtualMachines(input.unwrap(), options);
|
||||||
|
}
|
||||||
|
}, userExecutor, maxTime, logger, "getting virtual machines");
|
||||||
|
|
||||||
|
return DomainWrapper.join(vms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,116 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.collect.Iterables.filter;
|
|
||||||
import static com.google.common.collect.Iterables.transform;
|
|
||||||
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.abiquo.AbiquoAsyncApi;
|
|
||||||
import org.jclouds.abiquo.AbiquoApi;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
|
||||||
import org.jclouds.abiquo.domain.network.ExternalIp;
|
|
||||||
import org.jclouds.abiquo.domain.network.Ip;
|
|
||||||
import org.jclouds.abiquo.domain.network.PrivateIp;
|
|
||||||
import org.jclouds.abiquo.domain.network.PublicIp;
|
|
||||||
import org.jclouds.abiquo.domain.network.UnmanagedIp;
|
|
||||||
import org.jclouds.abiquo.domain.util.LinkUtils;
|
|
||||||
import org.jclouds.abiquo.rest.internal.ExtendedUtils;
|
|
||||||
import org.jclouds.abiquo.strategy.cloud.ListAttachedNics;
|
|
||||||
import org.jclouds.http.HttpResponse;
|
|
||||||
import org.jclouds.http.functions.ParseXMLWithJAXB;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
|
|
||||||
import com.abiquo.model.rest.RESTLink;
|
|
||||||
import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.network.PrivateIpDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.network.PublicIpDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
import com.google.inject.TypeLiteral;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List all NICs attached to a given virtual machine.
|
|
||||||
*
|
|
||||||
* @author Ignasi Barrera
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class ListAttachedNicsImpl implements ListAttachedNics {
|
|
||||||
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
|
||||||
|
|
||||||
protected final ExtendedUtils extendedUtils;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public ListAttachedNicsImpl(final RestContext<AbiquoApi, AbiquoAsyncApi> context, final ExtendedUtils extendedUtils) {
|
|
||||||
this.context = checkNotNull(context, "context");
|
|
||||||
this.extendedUtils = checkNotNull(extendedUtils, "extendedUtils");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Ip<?, ?>> execute(final VirtualMachine parent) {
|
|
||||||
parent.refresh();
|
|
||||||
Iterable<RESTLink> nicLinks = LinkUtils.filterNicLinks(parent.unwrap().getLinks());
|
|
||||||
return listIps(nicLinks);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Ip<?, ?>> execute(final VirtualMachine parent, final Predicate<Ip<?, ?>> selector) {
|
|
||||||
return filter(execute(parent), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<Ip<?, ?>> listIps(final Iterable<RESTLink> nicLinks) {
|
|
||||||
return transform(nicLinks, new Function<RESTLink, Ip<?, ?>>() {
|
|
||||||
@Override
|
|
||||||
public Ip<?, ?> apply(final RESTLink input) {
|
|
||||||
HttpResponse response = extendedUtils.getAbiquoHttpClient().get(input);
|
|
||||||
|
|
||||||
if (input.getType().equals(PrivateIpDto.BASE_MEDIA_TYPE)) {
|
|
||||||
ParseXMLWithJAXB<PrivateIpDto> parser = new ParseXMLWithJAXB<PrivateIpDto>(extendedUtils.getXml(),
|
|
||||||
TypeLiteral.get(PrivateIpDto.class));
|
|
||||||
|
|
||||||
return wrap(context, PrivateIp.class, parser.apply(response));
|
|
||||||
} else if (input.getType().equals(PublicIpDto.BASE_MEDIA_TYPE)) {
|
|
||||||
ParseXMLWithJAXB<PublicIpDto> parser = new ParseXMLWithJAXB<PublicIpDto>(extendedUtils.getXml(),
|
|
||||||
TypeLiteral.get(PublicIpDto.class));
|
|
||||||
|
|
||||||
return wrap(context, PublicIp.class, parser.apply(response));
|
|
||||||
} else if (input.getType().equals(ExternalIpDto.BASE_MEDIA_TYPE)) {
|
|
||||||
ParseXMLWithJAXB<ExternalIpDto> parser = new ParseXMLWithJAXB<ExternalIpDto>(extendedUtils.getXml(),
|
|
||||||
TypeLiteral.get(ExternalIpDto.class));
|
|
||||||
|
|
||||||
return wrap(context, ExternalIp.class, parser.apply(response));
|
|
||||||
} else if (input.getType().equals(UnmanagedIpDto.BASE_MEDIA_TYPE)) {
|
|
||||||
ParseXMLWithJAXB<UnmanagedIpDto> parser = new ParseXMLWithJAXB<UnmanagedIpDto>(extendedUtils.getXml(),
|
|
||||||
TypeLiteral.get(UnmanagedIpDto.class));
|
|
||||||
|
|
||||||
return wrap(context, UnmanagedIp.class, parser.apply(response));
|
|
||||||
} else {
|
|
||||||
throw new IllegalArgumentException("Unsupported media type: " + input.getType());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,106 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.collect.Iterables.filter;
|
|
||||||
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
|
||||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.inject.Named;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.abiquo.AbiquoAsyncApi;
|
|
||||||
import org.jclouds.abiquo.AbiquoApi;
|
|
||||||
import org.jclouds.abiquo.domain.DomainWrapper;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
|
|
||||||
import org.jclouds.abiquo.strategy.cloud.ListVirtualAppliances;
|
|
||||||
import org.jclouds.abiquo.strategy.cloud.ListVirtualDatacenters;
|
|
||||||
import org.jclouds.logging.Logger;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
|
|
||||||
import com.abiquo.server.core.cloud.VirtualApplianceDto;
|
|
||||||
import com.abiquo.server.core.cloud.VirtualAppliancesDto;
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List virtual appliance in each virtual datacenter.
|
|
||||||
*
|
|
||||||
* @author Ignasi Barrera
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class ListVirtualAppliancesImpl implements ListVirtualAppliances {
|
|
||||||
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
|
||||||
|
|
||||||
protected final ListVirtualDatacenters listVirtualDatacenters;
|
|
||||||
|
|
||||||
protected final ExecutorService userExecutor;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
protected Logger logger = Logger.NULL;
|
|
||||||
|
|
||||||
@Inject(optional = true)
|
|
||||||
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
|
||||||
protected Long maxTime;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
ListVirtualAppliancesImpl(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
|
||||||
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor,
|
|
||||||
final ListVirtualDatacenters listVirtualDatacenters) {
|
|
||||||
this.context = checkNotNull(context, "context");
|
|
||||||
this.listVirtualDatacenters = checkNotNull(listVirtualDatacenters, "listVirtualDatacenters");
|
|
||||||
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualAppliance> execute() {
|
|
||||||
// Find virtual appliances in concurrent requests
|
|
||||||
Iterable<VirtualDatacenter> vdcs = listVirtualDatacenters.execute();
|
|
||||||
Iterable<VirtualApplianceDto> vapps = listConcurrentVirtualAppliances(vdcs);
|
|
||||||
|
|
||||||
return wrap(context, VirtualAppliance.class, vapps);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualAppliance> execute(final Predicate<VirtualAppliance> selector) {
|
|
||||||
return filter(execute(), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<VirtualApplianceDto> listConcurrentVirtualAppliances(final Iterable<VirtualDatacenter> vdcs) {
|
|
||||||
Iterable<VirtualAppliancesDto> vapps = transformParallel(vdcs,
|
|
||||||
new Function<VirtualDatacenter, Future<? extends VirtualAppliancesDto>>() {
|
|
||||||
@Override
|
|
||||||
public Future<VirtualAppliancesDto> apply(final VirtualDatacenter input) {
|
|
||||||
return context.getAsyncApi().getCloudApi().listVirtualAppliances(input.unwrap());
|
|
||||||
}
|
|
||||||
}, userExecutor, maxTime, logger, "getting virtual appliances");
|
|
||||||
|
|
||||||
return DomainWrapper.join(vapps);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,119 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.collect.Iterables.filter;
|
|
||||||
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
|
||||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.inject.Named;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.abiquo.AbiquoAsyncApi;
|
|
||||||
import org.jclouds.abiquo.AbiquoApi;
|
|
||||||
import org.jclouds.abiquo.domain.DomainWrapper;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions;
|
|
||||||
import org.jclouds.abiquo.strategy.cloud.ListVirtualDatacenters;
|
|
||||||
import org.jclouds.logging.Logger;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
|
|
||||||
import com.abiquo.server.core.cloud.VirtualDatacenterDto;
|
|
||||||
import com.abiquo.server.core.cloud.VirtualDatacentersDto;
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List virtual datacenters.
|
|
||||||
*
|
|
||||||
* @author Ignasi Barrera
|
|
||||||
* @author Francesc Montserrat
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class ListVirtualDatacentersImpl implements ListVirtualDatacenters {
|
|
||||||
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
|
||||||
|
|
||||||
protected final ExecutorService userExecutor;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
protected Logger logger = Logger.NULL;
|
|
||||||
|
|
||||||
@Inject(optional = true)
|
|
||||||
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
|
||||||
protected Long maxTime;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
ListVirtualDatacentersImpl(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
|
||||||
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor) {
|
|
||||||
this.context = checkNotNull(context, "context");
|
|
||||||
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualDatacenter> execute() {
|
|
||||||
VirtualDatacenterOptions virtualDatacenterOptions = VirtualDatacenterOptions.builder().build();
|
|
||||||
|
|
||||||
return execute(virtualDatacenterOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualDatacenter> execute(final Predicate<VirtualDatacenter> selector) {
|
|
||||||
return filter(execute(), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualDatacenter> execute(final VirtualDatacenterOptions virtualDatacenterOptions) {
|
|
||||||
VirtualDatacentersDto result = context.getApi().getCloudApi().listVirtualDatacenters(virtualDatacenterOptions);
|
|
||||||
return wrap(context, VirtualDatacenter.class, result.getCollection());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualDatacenter> execute(final Predicate<VirtualDatacenter> selector,
|
|
||||||
final VirtualDatacenterOptions virtualDatacenterOptions) {
|
|
||||||
return filter(execute(virtualDatacenterOptions), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualDatacenter> execute(final List<Integer> virtualDatacenterIds) {
|
|
||||||
// Find virtual datacenters in concurrent requests
|
|
||||||
return listConcurrentVirtualDatacenters(virtualDatacenterIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<VirtualDatacenter> listConcurrentVirtualDatacenters(final List<Integer> ids) {
|
|
||||||
Iterable<VirtualDatacenterDto> vdcs = transformParallel(ids,
|
|
||||||
new Function<Integer, Future<? extends VirtualDatacenterDto>>() {
|
|
||||||
@Override
|
|
||||||
public Future<VirtualDatacenterDto> apply(final Integer input) {
|
|
||||||
return context.getAsyncApi().getCloudApi().getVirtualDatacenter(input);
|
|
||||||
}
|
|
||||||
}, userExecutor, maxTime, logger, "getting virtual datacenters");
|
|
||||||
|
|
||||||
return DomainWrapper.wrap(context, VirtualDatacenter.class, Lists.newArrayList(vdcs));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,114 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.collect.Iterables.filter;
|
|
||||||
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
|
||||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.inject.Named;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.abiquo.AbiquoAsyncApi;
|
|
||||||
import org.jclouds.abiquo.AbiquoApi;
|
|
||||||
import org.jclouds.abiquo.domain.DomainWrapper;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions;
|
|
||||||
import org.jclouds.abiquo.strategy.cloud.ListVirtualAppliances;
|
|
||||||
import org.jclouds.abiquo.strategy.cloud.ListVirtualMachines;
|
|
||||||
import org.jclouds.logging.Logger;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
|
|
||||||
import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
|
|
||||||
import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List virtual machines in each virtual datacenter and each virtual appliance.
|
|
||||||
*
|
|
||||||
* @author Ignasi Barrera
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class ListVirtualMachinesImpl implements ListVirtualMachines {
|
|
||||||
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
|
||||||
|
|
||||||
protected final ExecutorService userExecutor;
|
|
||||||
|
|
||||||
protected final ListVirtualAppliances listVirtualAppliances;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
protected Logger logger = Logger.NULL;
|
|
||||||
|
|
||||||
@Inject(optional = true)
|
|
||||||
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
|
||||||
protected Long maxTime;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
ListVirtualMachinesImpl(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
|
||||||
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor,
|
|
||||||
final ListVirtualAppliances listVirtualAppliances) {
|
|
||||||
super();
|
|
||||||
this.context = checkNotNull(context, "context");
|
|
||||||
this.listVirtualAppliances = checkNotNull(listVirtualAppliances, "listVirtualAppliances");
|
|
||||||
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualMachine> execute() {
|
|
||||||
return execute(VirtualMachineOptions.builder().disablePagination().build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualMachine> execute(final VirtualMachineOptions options) {
|
|
||||||
// Find virtual machines in concurrent requests
|
|
||||||
Iterable<VirtualAppliance> vapps = listVirtualAppliances.execute();
|
|
||||||
Iterable<VirtualMachineWithNodeExtendedDto> vms = listConcurrentVirtualMachines(vapps, options);
|
|
||||||
|
|
||||||
return wrap(context, VirtualMachine.class, vms);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualMachine> execute(final Predicate<VirtualMachine> selector) {
|
|
||||||
return filter(execute(), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<VirtualMachineWithNodeExtendedDto> listConcurrentVirtualMachines(
|
|
||||||
final Iterable<VirtualAppliance> vapps, final VirtualMachineOptions options) {
|
|
||||||
Iterable<VirtualMachinesWithNodeExtendedDto> vms = transformParallel(vapps,
|
|
||||||
new Function<VirtualAppliance, Future<? extends VirtualMachinesWithNodeExtendedDto>>() {
|
|
||||||
@Override
|
|
||||||
public Future<VirtualMachinesWithNodeExtendedDto> apply(final VirtualAppliance input) {
|
|
||||||
return context.getAsyncApi().getCloudApi().listVirtualMachines(input.unwrap(), options);
|
|
||||||
}
|
|
||||||
}, userExecutor, maxTime, logger, "getting virtual machines");
|
|
||||||
|
|
||||||
return DomainWrapper.join(vms);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -19,19 +19,87 @@
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.enterprise;
|
package org.jclouds.abiquo.strategy.enterprise;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static com.google.common.collect.Iterables.filter;
|
||||||
|
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
||||||
|
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
|
import org.jclouds.abiquo.AbiquoApi;
|
||||||
|
import org.jclouds.abiquo.AbiquoAsyncApi;
|
||||||
|
import org.jclouds.abiquo.domain.DomainWrapper;
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate;
|
import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate;
|
||||||
import org.jclouds.abiquo.domain.enterprise.Enterprise;
|
import org.jclouds.abiquo.domain.enterprise.Enterprise;
|
||||||
|
import org.jclouds.abiquo.domain.infrastructure.Datacenter;
|
||||||
import org.jclouds.abiquo.strategy.ListEntities;
|
import org.jclouds.abiquo.strategy.ListEntities;
|
||||||
import org.jclouds.abiquo.strategy.enterprise.internal.ListVirtualMachineTemplatesImpl;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
import com.google.inject.ImplementedBy;
|
import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
|
||||||
|
import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List all virtual machine templates available to an enterprise.
|
* List all virtual machine templates available to an enterprise.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@ImplementedBy(ListVirtualMachineTemplatesImpl.class)
|
@Singleton
|
||||||
public interface ListVirtualMachineTemplates extends ListEntities<VirtualMachineTemplate, Enterprise> {
|
public class ListVirtualMachineTemplates implements ListEntities<VirtualMachineTemplate, Enterprise> {
|
||||||
|
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
||||||
|
|
||||||
|
protected final ExecutorService userExecutor;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
||||||
|
protected Long maxTime;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ListVirtualMachineTemplates(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
||||||
|
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor) {
|
||||||
|
super();
|
||||||
|
this.context = checkNotNull(context, "context");
|
||||||
|
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualMachineTemplate> execute(final Enterprise parent) {
|
||||||
|
// Find virtual machine templates in concurrent requests
|
||||||
|
Iterable<Datacenter> dcs = parent.listAllowedDatacenters();
|
||||||
|
Iterable<VirtualMachineTemplateDto> templates = listConcurrentTemplates(parent, dcs);
|
||||||
|
|
||||||
|
return wrap(context, VirtualMachineTemplate.class, templates);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<VirtualMachineTemplate> execute(final Enterprise parent,
|
||||||
|
final Predicate<VirtualMachineTemplate> selector) {
|
||||||
|
return filter(execute(parent), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<VirtualMachineTemplateDto> listConcurrentTemplates(final Enterprise parent,
|
||||||
|
final Iterable<Datacenter> dcs) {
|
||||||
|
Iterable<VirtualMachineTemplatesDto> templates = transformParallel(dcs,
|
||||||
|
new Function<Datacenter, Future<? extends VirtualMachineTemplatesDto>>() {
|
||||||
|
@Override
|
||||||
|
public Future<VirtualMachineTemplatesDto> apply(final Datacenter input) {
|
||||||
|
return context.getAsyncApi().getVirtualMachineTemplateApi()
|
||||||
|
.listVirtualMachineTemplates(parent.getId(), input.getId());
|
||||||
|
}
|
||||||
|
}, userExecutor, maxTime, logger, "getting virtual machine templates");
|
||||||
|
|
||||||
|
return DomainWrapper.join(templates);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.enterprise.internal;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.collect.Iterables.filter;
|
|
||||||
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
|
||||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.inject.Named;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.abiquo.AbiquoAsyncApi;
|
|
||||||
import org.jclouds.abiquo.AbiquoApi;
|
|
||||||
import org.jclouds.abiquo.domain.DomainWrapper;
|
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate;
|
|
||||||
import org.jclouds.abiquo.domain.enterprise.Enterprise;
|
|
||||||
import org.jclouds.abiquo.domain.infrastructure.Datacenter;
|
|
||||||
import org.jclouds.abiquo.strategy.enterprise.ListVirtualMachineTemplates;
|
|
||||||
import org.jclouds.logging.Logger;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
|
|
||||||
import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
|
|
||||||
import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List all virtual machine templates available to an enterprise.
|
|
||||||
*
|
|
||||||
* @author Ignasi Barrera
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class ListVirtualMachineTemplatesImpl implements ListVirtualMachineTemplates {
|
|
||||||
protected final RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
|
||||||
|
|
||||||
protected final ExecutorService userExecutor;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
protected Logger logger = Logger.NULL;
|
|
||||||
|
|
||||||
@Inject(optional = true)
|
|
||||||
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
|
||||||
protected Long maxTime;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
ListVirtualMachineTemplatesImpl(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
|
||||||
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor) {
|
|
||||||
super();
|
|
||||||
this.context = checkNotNull(context, "context");
|
|
||||||
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualMachineTemplate> execute(final Enterprise parent) {
|
|
||||||
// Find virtual machine templates in concurrent requests
|
|
||||||
Iterable<Datacenter> dcs = parent.listAllowedDatacenters();
|
|
||||||
Iterable<VirtualMachineTemplateDto> templates = listConcurrentTemplates(parent, dcs);
|
|
||||||
|
|
||||||
return wrap(context, VirtualMachineTemplate.class, templates);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<VirtualMachineTemplate> execute(final Enterprise parent,
|
|
||||||
final Predicate<VirtualMachineTemplate> selector) {
|
|
||||||
return filter(execute(parent), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<VirtualMachineTemplateDto> listConcurrentTemplates(final Enterprise parent,
|
|
||||||
final Iterable<Datacenter> dcs) {
|
|
||||||
Iterable<VirtualMachineTemplatesDto> templates = transformParallel(dcs,
|
|
||||||
new Function<Datacenter, Future<? extends VirtualMachineTemplatesDto>>() {
|
|
||||||
@Override
|
|
||||||
public Future<VirtualMachineTemplatesDto> apply(final Datacenter input) {
|
|
||||||
return context.getAsyncApi().getVirtualMachineTemplateApi()
|
|
||||||
.listVirtualMachineTemplates(parent.getId(), input.getId());
|
|
||||||
}
|
|
||||||
}, userExecutor, maxTime, logger, "getting virtual machine templates");
|
|
||||||
|
|
||||||
return DomainWrapper.join(templates);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -19,18 +19,98 @@
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.infrastructure;
|
package org.jclouds.abiquo.strategy.infrastructure;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static com.google.common.collect.Iterables.filter;
|
||||||
|
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
||||||
|
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
|
import org.jclouds.abiquo.AbiquoApi;
|
||||||
|
import org.jclouds.abiquo.AbiquoAsyncApi;
|
||||||
|
import org.jclouds.abiquo.domain.DomainWrapper;
|
||||||
|
import org.jclouds.abiquo.domain.infrastructure.Datacenter;
|
||||||
import org.jclouds.abiquo.domain.infrastructure.Machine;
|
import org.jclouds.abiquo.domain.infrastructure.Machine;
|
||||||
import org.jclouds.abiquo.strategy.ListRootEntities;
|
import org.jclouds.abiquo.strategy.ListRootEntities;
|
||||||
import org.jclouds.abiquo.strategy.infrastructure.internal.ListMachinesImpl;
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
import com.google.inject.ImplementedBy;
|
import com.abiquo.server.core.infrastructure.DatacentersDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.MachineDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.MachinesDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.RackDto;
|
||||||
|
import com.abiquo.server.core.infrastructure.RacksDto;
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List machines in each datacenter and rack.
|
* List machines in each datacenter and rack.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@ImplementedBy(ListMachinesImpl.class)
|
@Singleton
|
||||||
public interface ListMachines extends ListRootEntities<Machine> {
|
public class ListMachines implements ListRootEntities<Machine> {
|
||||||
|
protected RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
||||||
|
|
||||||
|
protected final ExecutorService userExecutor;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
||||||
|
protected Long maxTime;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ListMachines(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
||||||
|
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor) {
|
||||||
|
super();
|
||||||
|
this.context = checkNotNull(context, "context");
|
||||||
|
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Machine> execute() {
|
||||||
|
// Find machines in concurrent requests
|
||||||
|
DatacentersDto result = context.getApi().getInfrastructureApi().listDatacenters();
|
||||||
|
Iterable<Datacenter> datacenters = wrap(context, Datacenter.class, result.getCollection());
|
||||||
|
Iterable<RackDto> racks = listConcurrentRacks(datacenters);
|
||||||
|
Iterable<MachineDto> machines = listConcurrentMachines(racks);
|
||||||
|
|
||||||
|
return wrap(context, Machine.class, machines);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Machine> execute(final Predicate<Machine> selector) {
|
||||||
|
return filter(execute(), selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<RackDto> listConcurrentRacks(final Iterable<Datacenter> datacenters) {
|
||||||
|
Iterable<RacksDto> racks = transformParallel(datacenters, new Function<Datacenter, Future<? extends RacksDto>>() {
|
||||||
|
@Override
|
||||||
|
public Future<RacksDto> apply(final Datacenter input) {
|
||||||
|
return context.getAsyncApi().getInfrastructureApi().listRacks(input.unwrap());
|
||||||
|
}
|
||||||
|
}, userExecutor, maxTime, logger, "getting racks");
|
||||||
|
|
||||||
|
return DomainWrapper.join(racks);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterable<MachineDto> listConcurrentMachines(final Iterable<RackDto> racks) {
|
||||||
|
Iterable<MachinesDto> machines = transformParallel(racks, new Function<RackDto, Future<? extends MachinesDto>>() {
|
||||||
|
@Override
|
||||||
|
public Future<MachinesDto> apply(final RackDto input) {
|
||||||
|
return context.getAsyncApi().getInfrastructureApi().listMachines(input);
|
||||||
|
}
|
||||||
|
}, userExecutor, maxTime, logger, "getting machines");
|
||||||
|
|
||||||
|
return DomainWrapper.join(machines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.infrastructure.internal;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.collect.Iterables.filter;
|
|
||||||
import static org.jclouds.abiquo.domain.DomainWrapper.wrap;
|
|
||||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.inject.Named;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
|
||||||
import org.jclouds.abiquo.AbiquoApi;
|
|
||||||
import org.jclouds.abiquo.AbiquoAsyncApi;
|
|
||||||
import org.jclouds.abiquo.domain.DomainWrapper;
|
|
||||||
import org.jclouds.abiquo.domain.infrastructure.Datacenter;
|
|
||||||
import org.jclouds.abiquo.domain.infrastructure.Machine;
|
|
||||||
import org.jclouds.abiquo.strategy.infrastructure.ListMachines;
|
|
||||||
import org.jclouds.logging.Logger;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
|
|
||||||
import com.abiquo.server.core.infrastructure.DatacentersDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.MachineDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.MachinesDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.RackDto;
|
|
||||||
import com.abiquo.server.core.infrastructure.RacksDto;
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List machines in each datacenter and rack.
|
|
||||||
*
|
|
||||||
* @author Ignasi Barrera
|
|
||||||
*/
|
|
||||||
@Singleton
|
|
||||||
public class ListMachinesImpl implements ListMachines {
|
|
||||||
protected RestContext<AbiquoApi, AbiquoAsyncApi> context;
|
|
||||||
|
|
||||||
protected final ExecutorService userExecutor;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
protected Logger logger = Logger.NULL;
|
|
||||||
|
|
||||||
@Inject(optional = true)
|
|
||||||
@Named(Constants.PROPERTY_REQUEST_TIMEOUT)
|
|
||||||
protected Long maxTime;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
ListMachinesImpl(final RestContext<AbiquoApi, AbiquoAsyncApi> context,
|
|
||||||
@Named(Constants.PROPERTY_USER_THREADS) final ExecutorService userExecutor) {
|
|
||||||
super();
|
|
||||||
this.context = checkNotNull(context, "context");
|
|
||||||
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Machine> execute() {
|
|
||||||
// Find machines in concurrent requests
|
|
||||||
DatacentersDto result = context.getApi().getInfrastructureApi().listDatacenters();
|
|
||||||
Iterable<Datacenter> datacenters = wrap(context, Datacenter.class, result.getCollection());
|
|
||||||
Iterable<RackDto> racks = listConcurrentRacks(datacenters);
|
|
||||||
Iterable<MachineDto> machines = listConcurrentMachines(racks);
|
|
||||||
|
|
||||||
return wrap(context, Machine.class, machines);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterable<Machine> execute(final Predicate<Machine> selector) {
|
|
||||||
return filter(execute(), selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<RackDto> listConcurrentRacks(final Iterable<Datacenter> datacenters) {
|
|
||||||
Iterable<RacksDto> racks = transformParallel(datacenters, new Function<Datacenter, Future<? extends RacksDto>>() {
|
|
||||||
@Override
|
|
||||||
public Future<RacksDto> apply(final Datacenter input) {
|
|
||||||
return context.getAsyncApi().getInfrastructureApi().listRacks(input.unwrap());
|
|
||||||
}
|
|
||||||
}, userExecutor, maxTime, logger, "getting racks");
|
|
||||||
|
|
||||||
return DomainWrapper.join(racks);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Iterable<MachineDto> listConcurrentMachines(final Iterable<RackDto> racks) {
|
|
||||||
Iterable<MachinesDto> machines = transformParallel(racks, new Function<RackDto, Future<? extends MachinesDto>>() {
|
|
||||||
@Override
|
|
||||||
public Future<MachinesDto> apply(final RackDto input) {
|
|
||||||
return context.getAsyncApi().getInfrastructureApi().listMachines(input);
|
|
||||||
}
|
|
||||||
}, userExecutor, maxTime, logger, "getting machines");
|
|
||||||
|
|
||||||
return DomainWrapper.join(machines);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.size;
|
import static com.google.common.collect.Iterables.size;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
@ -32,6 +32,7 @@ import org.jclouds.abiquo.domain.network.PublicIp;
|
||||||
import org.jclouds.abiquo.domain.network.UnmanagedNetwork;
|
import org.jclouds.abiquo.domain.network.UnmanagedNetwork;
|
||||||
import org.jclouds.abiquo.predicates.network.IpPredicates;
|
import org.jclouds.abiquo.predicates.network.IpPredicates;
|
||||||
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
||||||
|
import org.jclouds.abiquo.strategy.cloud.ListAttachedNics;
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
@ -39,13 +40,13 @@ import org.testng.annotations.Test;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tests for the {@link ListAttachedNicsImpl} strategy.
|
* Live tests for the {@link ListAttachedNics} strategy.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@Test(groups = "api", testName = "ListAttachedNicsImplLiveApiTest")
|
@Test(groups = "api", testName = "ListAttachedNicsLiveApiTest")
|
||||||
public class ListAttachedNicsImplLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
public class ListAttachedNicsLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
||||||
private ListAttachedNicsImpl strategy;
|
private ListAttachedNics strategy;
|
||||||
|
|
||||||
private PrivateIp privateIp;
|
private PrivateIp privateIp;
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ public class ListAttachedNicsImplLiveApiTest extends BaseAbiquoStrategyLiveApiTe
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(groups = "api")
|
@BeforeClass(groups = "api")
|
||||||
protected void setupStrategy() {
|
protected void setupStrategy() {
|
||||||
this.strategy = env.context.getUtils().getInjector().getInstance(ListAttachedNicsImpl.class);
|
this.strategy = env.context.getUtils().getInjector().getInstance(ListAttachedNics.class);
|
||||||
|
|
||||||
privateIp = env.privateNetwork.listUnusedIps().get(0);
|
privateIp = env.privateNetwork.listUnusedIps().get(0);
|
||||||
assertNotNull(privateIp);
|
assertNotNull(privateIp);
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.size;
|
import static com.google.common.collect.Iterables.size;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
@ -27,22 +27,23 @@ import static org.testng.Assert.assertTrue;
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
|
||||||
import org.jclouds.abiquo.predicates.cloud.VirtualAppliancePredicates;
|
import org.jclouds.abiquo.predicates.cloud.VirtualAppliancePredicates;
|
||||||
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
||||||
|
import org.jclouds.abiquo.strategy.cloud.ListVirtualAppliances;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tests for the {@link ListVirtualAppliancesImpl} strategy.
|
* Live tests for the {@link ListVirtualAppliances} strategy.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@Test(groups = "api", testName = "ListVirtualAppliancesImplLiveApiTest")
|
@Test(groups = "api", testName = "ListVirtualAppliancesLiveApiTest")
|
||||||
public class ListVirtualAppliancesImplLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
public class ListVirtualAppliancesLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
||||||
private ListVirtualAppliancesImpl strategy;
|
private ListVirtualAppliances strategy;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(groups = "api")
|
@BeforeClass(groups = "api")
|
||||||
protected void setupStrategy() {
|
protected void setupStrategy() {
|
||||||
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualAppliancesImpl.class);
|
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualAppliances.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute() {
|
public void testExecute() {
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.size;
|
import static com.google.common.collect.Iterables.size;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
@ -28,22 +28,23 @@ import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
|
||||||
import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions;
|
import org.jclouds.abiquo.domain.cloud.options.VirtualDatacenterOptions;
|
||||||
import org.jclouds.abiquo.predicates.cloud.VirtualDatacenterPredicates;
|
import org.jclouds.abiquo.predicates.cloud.VirtualDatacenterPredicates;
|
||||||
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
||||||
|
import org.jclouds.abiquo.strategy.cloud.ListVirtualDatacenters;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tests for the {@link ListVirtualDatacentersImpl} strategy.
|
* Live tests for the {@link ListVirtualDatacenters} strategy.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@Test(groups = "api", testName = "ListVirtualDatacentersImplLiveApiTest")
|
@Test(groups = "api", testName = "ListVirtualDatacentersLiveApiTest")
|
||||||
public class ListVirtualDatacentersImplLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
public class ListVirtualDatacentersLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
||||||
private ListVirtualDatacentersImpl strategy;
|
private ListVirtualDatacenters strategy;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(groups = "api")
|
@BeforeClass(groups = "api")
|
||||||
protected void setupStrategy() {
|
protected void setupStrategy() {
|
||||||
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualDatacentersImpl.class);
|
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualDatacenters.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute() {
|
public void testExecute() {
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.cloud.internal;
|
package org.jclouds.abiquo.strategy.cloud;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.size;
|
import static com.google.common.collect.Iterables.size;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
@ -30,22 +30,23 @@ import java.util.List;
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
import org.jclouds.abiquo.domain.cloud.VirtualMachine;
|
||||||
import org.jclouds.abiquo.predicates.cloud.VirtualMachinePredicates;
|
import org.jclouds.abiquo.predicates.cloud.VirtualMachinePredicates;
|
||||||
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
||||||
|
import org.jclouds.abiquo.strategy.cloud.ListVirtualMachines;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tests for the {@link ListVirtualMachinesImpl} strategy.
|
* Live tests for the {@link ListVirtualMachines} strategy.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@Test(groups = "api", testName = "ListVirtualMachinesImplLiveApiTest")
|
@Test(groups = "api", testName = "ListVirtualMachinesLiveApiTest")
|
||||||
public class ListVirtualMachinesImplLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
public class ListVirtualMachinesLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
||||||
private ListVirtualMachinesImpl strategy;
|
private ListVirtualMachines strategy;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(groups = "api")
|
@BeforeClass(groups = "api")
|
||||||
protected void setupStrategy() {
|
protected void setupStrategy() {
|
||||||
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualMachinesImpl.class);
|
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualMachines.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute() {
|
public void testExecute() {
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.enterprise.internal;
|
package org.jclouds.abiquo.strategy.enterprise;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.size;
|
import static com.google.common.collect.Iterables.size;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
@ -27,23 +27,24 @@ import static org.testng.Assert.assertTrue;
|
||||||
import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate;
|
import org.jclouds.abiquo.domain.cloud.VirtualMachineTemplate;
|
||||||
import org.jclouds.abiquo.predicates.cloud.VirtualMachineTemplatePredicates;
|
import org.jclouds.abiquo.predicates.cloud.VirtualMachineTemplatePredicates;
|
||||||
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
||||||
import org.jclouds.abiquo.strategy.cloud.internal.ListVirtualAppliancesImpl;
|
import org.jclouds.abiquo.strategy.cloud.ListVirtualAppliances;
|
||||||
|
import org.jclouds.abiquo.strategy.enterprise.ListVirtualMachineTemplates;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tests for the {@link ListVirtualAppliancesImpl} strategy.
|
* Live tests for the {@link ListVirtualAppliances} strategy.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@Test(groups = "api", testName = "ListVirtualMachineTemplatesImplLiveApiTest")
|
@Test(groups = "api", testName = "ListVirtualMachineTemplatesLiveApiTest")
|
||||||
public class ListVirtualMachineTemplatesImplLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
public class ListVirtualMachineTemplatesLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
||||||
private ListVirtualMachineTemplatesImpl strategy;
|
private ListVirtualMachineTemplates strategy;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(groups = "api")
|
@BeforeClass(groups = "api")
|
||||||
protected void setupStrategy() {
|
protected void setupStrategy() {
|
||||||
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualMachineTemplatesImpl.class);
|
this.strategy = env.context.getUtils().getInjector().getInstance(ListVirtualMachineTemplates.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute() {
|
public void testExecute() {
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.abiquo.strategy.infrastructure.internal;
|
package org.jclouds.abiquo.strategy.infrastructure;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.size;
|
import static com.google.common.collect.Iterables.size;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
@ -27,22 +27,23 @@ import static org.testng.Assert.assertTrue;
|
||||||
import org.jclouds.abiquo.domain.infrastructure.Machine;
|
import org.jclouds.abiquo.domain.infrastructure.Machine;
|
||||||
import org.jclouds.abiquo.predicates.infrastructure.MachinePredicates;
|
import org.jclouds.abiquo.predicates.infrastructure.MachinePredicates;
|
||||||
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
import org.jclouds.abiquo.strategy.BaseAbiquoStrategyLiveApiTest;
|
||||||
|
import org.jclouds.abiquo.strategy.infrastructure.ListMachines;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Live tests for the {@link ListMachinesImpl} strategy.
|
* Live tests for the {@link ListMachines} strategy.
|
||||||
*
|
*
|
||||||
* @author Ignasi Barrera
|
* @author Ignasi Barrera
|
||||||
*/
|
*/
|
||||||
@Test(groups = "api", testName = "ListMachinesImplLiveApiTest")
|
@Test(groups = "api", testName = "ListMachinesLiveApiTest")
|
||||||
public class ListMachinesImplLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
public class ListMachinesLiveApiTest extends BaseAbiquoStrategyLiveApiTest {
|
||||||
private ListMachinesImpl strategy;
|
private ListMachines strategy;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(groups = "api")
|
@BeforeClass(groups = "api")
|
||||||
protected void setupStrategy() {
|
protected void setupStrategy() {
|
||||||
this.strategy = env.context.getUtils().getInjector().getInstance(ListMachinesImpl.class);
|
this.strategy = env.context.getUtils().getInjector().getInstance(ListMachines.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute() {
|
public void testExecute() {
|
Loading…
Reference in New Issue