Issue 333: added OperatingSystem to Image

This commit is contained in:
Adrian Cole 2010-08-17 21:41:48 -07:00
parent 462a6e5617
commit 0394c29394
22 changed files with 1299 additions and 325 deletions

View File

@ -19,19 +19,17 @@
package org.jclouds.aws.ec2.compute.domain;
import static org.jclouds.compute.predicates.ImagePredicates.architectureIn;
import static org.jclouds.compute.predicates.ImagePredicates.any;
import static org.jclouds.compute.predicates.ImagePredicates.idIn;
import static org.jclouds.compute.predicates.ImagePredicates.is64Bit;
import java.util.Arrays;
import java.util.Collections;
import org.jclouds.aws.ec2.domain.InstanceType;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.internal.SizeImpl;
import org.jclouds.domain.Location;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
/**
*
@ -42,20 +40,15 @@ public class EC2Size extends SizeImpl {
private static final long serialVersionUID = 8605688733788974797L;
private final String instanceType;
EC2Size(String instanceType, Double cores, Integer ram, Integer disk,
Iterable<Architecture> supportedArchitectures) {
super(instanceType, instanceType, instanceType, null, null, ImmutableMap
.<String, String> of(), cores, ram, disk,
architectureIn(supportedArchitectures));
EC2Size(String instanceType, Double cores, Integer ram, Integer disk, boolean is64Bit) {
super(instanceType, instanceType, instanceType, null, null, ImmutableMap.<String, String> of(), cores, ram, disk,
is64Bit ? is64Bit() : any());
this.instanceType = instanceType;
}
public EC2Size(Location location, String instanceType, Double cores,
Integer ram, Integer disk, String[] ids) {
super(instanceType, instanceType, instanceType, location, null,
ImmutableMap.<String, String> of(), cores, ram, disk,
(ids.length == 0 ? architectureIn(Collections
.singleton(Architecture.X86_64)) : idIn(Arrays.asList(ids))));
public EC2Size(Location location, String instanceType, Double cores, Integer ram, Integer disk, String[] ids) {
super(instanceType, instanceType, instanceType, location, null, ImmutableMap.<String, String> of(), cores, ram,
disk, (ids.length == 0 ? is64Bit() : idIn(Arrays.asList(ids))));
this.instanceType = instanceType;
}
@ -69,53 +62,42 @@ public class EC2Size extends SizeImpl {
/**
* @see InstanceType#M1_SMALL
*/
public static final EC2Size M1_SMALL = new EC2Size(InstanceType.M1_SMALL,
1.0, 1740, 160, ImmutableSet.of(Architecture.X86_32));
public static final EC2Size M1_SMALL = new EC2Size(InstanceType.M1_SMALL, 1.0, 1740, 160, false);
/**
* @see InstanceType#M1_LARGE
*/
public static final EC2Size M1_LARGE = new EC2Size(InstanceType.M1_LARGE,
4.0, 7680, 850, ImmutableSet.of(Architecture.X86_64));
public static final EC2Size M1_LARGE = new EC2Size(InstanceType.M1_LARGE, 4.0, 7680, 850, true);
/**
* @see InstanceType#M1_XLARGE
*/
public static final EC2Size M1_XLARGE = new EC2Size(InstanceType.M1_XLARGE,
8.0, 15360, 1690, ImmutableSet.of(Architecture.X86_64));
public static final EC2Size M1_XLARGE = new EC2Size(InstanceType.M1_XLARGE, 8.0, 15360, 1690, true);
/**
* @see InstanceType#M2_XLARGE
*/
public static final EC2Size M2_XLARGE = new EC2Size(InstanceType.M2_XLARGE,
6.5, 17510, 420, ImmutableSet.of(Architecture.X86_64));
public static final EC2Size M2_XLARGE = new EC2Size(InstanceType.M2_XLARGE, 6.5, 17510, 420, true);
/**
* @see InstanceType#M2_2XLARGE
*/
public static final EC2Size M2_2XLARGE = new EC2Size(
InstanceType.M2_2XLARGE, 13.0, 35020, 850, ImmutableSet
.of(Architecture.X86_64));
public static final EC2Size M2_2XLARGE = new EC2Size(InstanceType.M2_2XLARGE, 13.0, 35020, 850, true);
/**
* @see InstanceType#M2_4XLARGE
*/
public static final EC2Size M2_4XLARGE = new EC2Size(
InstanceType.M2_4XLARGE, 26.0, 70041, 1690, ImmutableSet
.of(Architecture.X86_64));
public static final EC2Size M2_4XLARGE = new EC2Size(InstanceType.M2_4XLARGE, 26.0, 70041, 1690, true);
/**
* @see InstanceType#C1_MEDIUM
*/
public static final EC2Size C1_MEDIUM = new EC2Size(InstanceType.C1_MEDIUM,
5.0, 1740, 350, ImmutableSet.of(Architecture.X86_32));
public static final EC2Size C1_MEDIUM = new EC2Size(InstanceType.C1_MEDIUM, 5.0, 1740, 350, false);
/**
* @see InstanceType#C1_XLARGE
*/
public static final EC2Size C1_XLARGE = new EC2Size(InstanceType.C1_XLARGE,
20.0, 7168, 1690, ImmutableSet.of(Architecture.X86_64));
public static final EC2Size C1_XLARGE = new EC2Size(InstanceType.C1_XLARGE, 20.0, 7168, 1690, true);
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result
+ ((instanceType == null) ? 0 : instanceType.hashCode());
result = prime * result + ((instanceType == null) ? 0 : instanceType.hashCode());
return result;
}

View File

@ -34,7 +34,7 @@ import org.jclouds.aws.ec2.compute.options.EC2TemplateOptions;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.internal.TemplateBuilderImpl;
import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.domain.Location;

View File

@ -79,7 +79,7 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
public void testImagesResolveCorrectly() {
Template defaultTemplate = client.templateBuilder().build();
assertEquals(defaultTemplate.getImage().getId(), defaultTemplate.getImage().getLocation().getId() + "/"
+ defaultTemplate.getImage().getProviderId());
+ defaultTemplate.getImage().getProviderId());
Template byId = client.templateBuilder().imageId(defaultTemplate.getImage().getId()).build();
assertEquals(byId.getImage(), defaultTemplate.getImage());
}
@ -92,20 +92,20 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
protected void assertDefaultWorks() {
Template defaultTemplate = client.templateBuilder().build();
assertEquals(defaultTemplate.getImage().getArchitecture(), Architecture.X86_32);
assertEquals(defaultTemplate.getImage().getOsFamily(), OsFamily.UBUNTU);
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
assertEquals(defaultTemplate.getSize().getCores(), 1.0d);
}
@Test(enabled = true, dependsOnMethods = "testCompareSizes")
public void testExtendedOptionsAndLogin() throws Exception {
SecurityGroupClient securityGroupClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getSecurityGroupServices();
.getSecurityGroupServices();
KeyPairClient keyPairClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getKeyPairServices();
.getKeyPairServices();
InstanceClient instanceClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getInstanceServices();
.getInstanceServices();
String tag = this.tag + "optionsandlogin";
@ -143,16 +143,16 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
// make sure we made our dummy group and also let in the user's group
assertEquals(Sets.newTreeSet(instance.getGroupIds()), ImmutableSortedSet.<String> of("jclouds#" + tag + "#"
+ instance.getRegion(), tag));
+ instance.getRegion(), tag));
// make sure our dummy group has no rules
SecurityGroup group = Iterables.getOnlyElement(securityGroupClient.describeSecurityGroupsInRegion(null,
"jclouds#" + tag + "#" + instance.getRegion()));
"jclouds#" + tag + "#" + instance.getRegion()));
assert group.getIpPermissions().size() == 0 : group;
// try to run a script with the original keyPair
runScriptWithCreds(tag, first.getImage().getOsFamily(), new Credentials(first.getCredentials().identity,
result.getKeyMaterial()));
runScriptWithCreds(tag, first.getImage().getOperatingSystem().getFamily(), new Credentials(first
.getCredentials().identity, result.getKeyMaterial()));
} finally {
client.destroyNodesMatching(NodePredicates.withTag(tag));
@ -169,11 +169,11 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
assertEquals(instance.getMonitoringState(), MonitoringState.ENABLED);
RestContext<CloudWatchClient, CloudWatchAsyncClient> monitoringContext = new RestContextFactory().createContext(
"cloudwatch", identity, credential, ImmutableSet.<Module> of(new Log4JLoggingModule()));
"cloudwatch", identity, credential, ImmutableSet.<Module> of(new Log4JLoggingModule()));
try {
Set<Datapoint> datapoints = monitoringContext.getApi().getMetricStatisticsInRegion(instance.getRegion(),
"CPUUtilization", before, new Date(), 60, "Average");
"CPUUtilization", before, new Date(), 60, "Average");
assert datapoints != null;
} finally {
monitoringContext.close();
@ -183,13 +183,13 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
@Test(enabled = true, dependsOnMethods = "testCompareSizes")
public void testExtendedOptionsNoKeyPair() throws Exception {
SecurityGroupClient securityGroupClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getSecurityGroupServices();
.getSecurityGroupServices();
KeyPairClient keyPairClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getKeyPairServices();
.getKeyPairServices();
InstanceClient instanceClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getInstanceServices();
.getInstanceServices();
String tag = this.tag + "optionsnokey";
@ -217,11 +217,11 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
// make sure we made our dummy group and also let in the user's group
assertEquals(instance.getGroupIds(), ImmutableSet.<String> of(tag, String.format("jclouds#%s#%s", tag,
instance.getRegion())));
instance.getRegion())));
// make sure our dummy group has no rules
SecurityGroup group = Iterables.getOnlyElement(securityGroupClient.describeSecurityGroupsInRegion(null, String
.format("jclouds#%s#%s", tag, instance.getRegion())));
.format("jclouds#%s#%s", tag, instance.getRegion())));
assert group.getIpPermissions().size() == 0 : group;
} finally {
@ -243,13 +243,13 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
return;
}
SecurityGroupClient securityGroupClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getSecurityGroupServices();
.getSecurityGroupServices();
KeyPairClient keyPairClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getKeyPairServices();
.getKeyPairServices();
InstanceClient instanceClient = EC2Client.class.cast(context.getProviderSpecificContext().getApi())
.getInstanceServices();
.getInstanceServices();
String tag = this.tag + "optionswithsubnetid";
@ -297,12 +297,12 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
private RunningInstance getInstance(InstanceClient instanceClient, String id) {
RunningInstance instance = Iterables.getOnlyElement(Iterables.getOnlyElement(instanceClient
.describeInstancesInRegion(null, id)));
.describeInstancesInRegion(null, id)));
return instance;
}
private void cleanupExtendedStuff(SecurityGroupClient securityGroupClient, KeyPairClient keyPairClient, String tag)
throws InterruptedException {
throws InterruptedException {
try {
securityGroupClient.deleteSecurityGroupInRegion(null, tag);
} catch (Exception e) {

View File

@ -37,7 +37,7 @@ import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.domain.internal.ImageImpl;
import org.jclouds.compute.internal.TemplateBuilderImpl;
import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.domain.Credentials;
import org.jclouds.domain.Location;

View File

@ -57,8 +57,8 @@ public class ImageParserTest extends BaseEC2HandlerTest {
assertEquals(result.size(), 7);
ImageParser parser = new ImageParser(new EC2PopulateDefaultLoginCredentialsForImageStrategy(), Suppliers
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
org.jclouds.compute.domain.Image ubuntuHardy = parser.apply(Iterables.get(result, 0));
assertEquals(ubuntuHardy.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
@ -67,7 +67,7 @@ public class ImageParserTest extends BaseEC2HandlerTest {
assertEquals(ubuntuHardy.getLocation(), defaultLocation);
assertEquals(ubuntuHardy.getName(), "8.04");
assertEquals(ubuntuHardy.getOsDescription(),
"ubuntu-images-us/ubuntu-hardy-8.04-i386-server-20091130.manifest.xml");
"ubuntu-images-us/ubuntu-hardy-8.04-i386-server-20091130.manifest.xml");
assertEquals(ubuntuHardy.getOsFamily(), OsFamily.UBUNTU);
assertEquals(ubuntuHardy.getUserMetadata(), ImmutableMap.<String, String> of("owner", "099720109477"));
assertEquals(ubuntuHardy.getVersion(), "20091130");
@ -88,12 +88,12 @@ public class ImageParserTest extends BaseEC2HandlerTest {
assertEquals(ubuntuKarmic.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
assertEquals(ubuntuKarmic.getDescription(),
"ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml");
"ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml");
assertEquals(ubuntuKarmic.getProviderId(), "ami-bb709dd2");
assertEquals(ubuntuKarmic.getLocation(), defaultLocation);
assertEquals(ubuntuKarmic.getName(), "9.10");
assertEquals(ubuntuKarmic.getOsDescription(),
"ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml");
"ubuntu-images-us/ubuntu-karmic-9.10-i386-server-20100121.manifest.xml");
assertEquals(ubuntuKarmic.getOsFamily(), OsFamily.UBUNTU);
assertEquals(ubuntuKarmic.getUserMetadata(), ImmutableMap.<String, String> of("owner", "099720109477"));
assertEquals(ubuntuKarmic.getVersion(), "20100121");
@ -117,12 +117,12 @@ public class ImageParserTest extends BaseEC2HandlerTest {
assertEquals(ubuntuLucid.getArchitecture(), org.jclouds.compute.domain.Architecture.X86_32);
assertEquals(ubuntuLucid.getDescription(),
"ubuntu-images-us-west-1/ubuntu-lucid-10.04-i386-server-20100427.1.manifest.xml");
"ubuntu-images-us-west-1/ubuntu-lucid-10.04-i386-server-20100427.1.manifest.xml");
assertEquals(ubuntuLucid.getProviderId(), "ami-c597c680");
assertEquals(ubuntuLucid.getLocation(), defaultLocation);
assertEquals(ubuntuLucid.getName(), "10.04");
assertEquals(ubuntuLucid.getOsDescription(),
"ubuntu-images-us-west-1/ubuntu-lucid-10.04-i386-server-20100427.1.manifest.xml");
"ubuntu-images-us-west-1/ubuntu-lucid-10.04-i386-server-20100427.1.manifest.xml");
assertEquals(ubuntuLucid.getOsFamily(), OsFamily.UBUNTU);
assertEquals(ubuntuLucid.getUserMetadata(), ImmutableMap.<String, String> of("owner", "099720109477"));
assertEquals(ubuntuLucid.getVersion(), "20100427.1");
@ -139,8 +139,8 @@ public class ImageParserTest extends BaseEC2HandlerTest {
Set<Image> result = parseImages(is);
ImageParser parser = new ImageParser(new EC2PopulateDefaultLoginCredentialsForImageStrategy(), Suppliers
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
org.jclouds.compute.domain.Image image = parser.apply(Iterables.get(result, 0));
@ -150,9 +150,9 @@ public class ImageParserTest extends BaseEC2HandlerTest {
assertEquals(image.getLocation(), defaultLocation);
assertEquals(image.getName(), "");
assertEquals(image.getOsDescription(), "vostok-builds/vostok-0.95-5622/vostok-0.95-5622.manifest.xml");
assertEquals(image.getOsFamily(), null);
assertEquals(image.getOsFamily(), OsFamily.UNKNOWN);
assertEquals(image.getUserMetadata(), ImmutableMap.<String, String> of("owner", "133804938231"));
assertEquals(image.getVersion(), "");
assertEquals(image.getVersion(), "5622");
}
@ -162,8 +162,8 @@ public class ImageParserTest extends BaseEC2HandlerTest {
Set<Image> result = parseImages(is);
ImageParser parser = new ImageParser(new EC2PopulateDefaultLoginCredentialsForImageStrategy(), Suppliers
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
org.jclouds.compute.domain.Image image = parser.apply(Iterables.get(result, 0));
@ -197,8 +197,8 @@ public class ImageParserTest extends BaseEC2HandlerTest {
Set<Image> result = parseImages(is);
assertEquals(result.size(), 4);
ImageParser parser = new ImageParser(new EC2PopulateDefaultLoginCredentialsForImageStrategy(), Suppliers
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
.<Set<? extends Location>> ofInstance(ImmutableSet.<Location> of(defaultLocation)), Suppliers
.ofInstance(defaultLocation));
org.jclouds.compute.domain.Image image = parser.apply(Iterables.get(result, 0));

View File

@ -35,11 +35,12 @@ import org.jclouds.aws.ec2.compute.domain.RegionAndName;
import org.jclouds.aws.ec2.compute.options.EC2TemplateOptions;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.domain.internal.SizeImpl;
import org.jclouds.compute.internal.TemplateBuilderImpl;
import org.jclouds.compute.internal.TemplateBuilderImplTest;
import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
import org.jclouds.compute.domain.internal.TemplateBuilderImplTest;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.domain.Location;
@ -68,22 +69,22 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
@Override
protected EC2TemplateBuilderImpl createTemplateBuilder(final Image knownImage,
Supplier<Set<? extends Location>> locations, Supplier<Set<? extends Image>> images,
Supplier<Set<? extends Size>> sizes, Location defaultLocation, Provider<TemplateOptions> optionsProvider,
Provider<TemplateBuilder> templateBuilderProvider) {
Supplier<Set<? extends Location>> locations, Supplier<Set<? extends Image>> images,
Supplier<Set<? extends Size>> sizes, Location defaultLocation, Provider<TemplateOptions> optionsProvider,
Provider<TemplateBuilder> templateBuilderProvider) {
final RegionAndName knownRegionAndName = new RegionAndName("region", "ami");
ConcurrentMap<RegionAndName, Image> imageMap = new MapMaker()
.makeComputingMap(new Function<RegionAndName, Image>() {
@Override
public Image apply(RegionAndName from) {
return from.equals(knownRegionAndName) ? knownImage : null;
}
.makeComputingMap(new Function<RegionAndName, Image>() {
@Override
public Image apply(RegionAndName from) {
return from.equals(knownRegionAndName) ? knownImage : null;
}
});
});
return new EC2TemplateBuilderImpl(locations, images, sizes, Suppliers.ofInstance(defaultLocation),
optionsProvider, templateBuilderProvider, imageMap);
optionsProvider, templateBuilderProvider, imageMap);
}
@SuppressWarnings("unchecked")
@ -92,39 +93,49 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
Location location = new LocationImpl(LocationScope.REGION, "region", "region", null);
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(location));
.<Location> of(location));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet
.<Size> of(new SizeImpl("1", "1", "region/1", location, null, ImmutableMap.<String, String> of(), 1, 1,
1, ImagePredicates.any())));
.<Size> of(new SizeImpl("1", "1", "region/1", location, null, ImmutableMap.<String, String> of(), 1, 1, 1,
ImagePredicates.any())));
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class);
TemplateOptions defaultOptions = createMock(TemplateOptions.class);
Image knownImage = createMock(Image.class);
OperatingSystem os = createMock(OperatingSystem.class);
expect(optionsProvider.get()).andReturn(defaultOptions);
expect(knownImage.getId()).andReturn("region/ami").atLeastOnce();
expect(knownImage.getLocation()).andReturn(location).atLeastOnce();
expect(knownImage.getOsFamily()).andReturn(null).atLeastOnce();
expect(knownImage.getName()).andReturn(null).atLeastOnce();
expect(knownImage.getDescription()).andReturn(null).atLeastOnce();
expect(knownImage.getOsDescription()).andReturn(null).atLeastOnce();
expect(knownImage.getVersion()).andReturn(null).atLeastOnce();
expect(knownImage.getArchitecture()).andReturn(Architecture.X86_32).atLeastOnce();
expect(knownImage.getOperatingSystem()).andReturn(os).atLeastOnce();
expect(os.getName()).andReturn(null).atLeastOnce();
expect(os.getVersion()).andReturn(null).atLeastOnce();
expect(os.getFamily()).andReturn(null).atLeastOnce();
expect(os.getDescription()).andReturn(null).atLeastOnce();
expect(os.getArch()).andReturn(null).atLeastOnce();
expect(os.is64Bit()).andReturn(false).atLeastOnce();
replay(knownImage);
replay(os);
replay(defaultOptions);
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(knownImage, locations, images, sizes, location,
optionsProvider, templateBuilderProvider);
optionsProvider, templateBuilderProvider);
assertEquals(template.imageId("region/ami").build().getImage(), knownImage);
verify(knownImage);
verify(os);
verify(defaultOptions);
verify(optionsProvider);
verify(templateBuilderProvider);
@ -136,11 +147,11 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
Location location = new LocationImpl(LocationScope.REGION, "region", "region", null);
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(location));
.<Location> of(location));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet
.<Size> of(new SizeImpl("1", "1", "region/1", location, null, ImmutableMap.<String, String> of(), 1, 1,
1, ImagePredicates.any())));
.<Size> of(new SizeImpl("1", "1", "region/1", location, null, ImmutableMap.<String, String> of(), 1, 1, 1,
ImagePredicates.any())));
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class);
@ -155,7 +166,7 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(knownImage, locations, images, sizes, location,
optionsProvider, templateBuilderProvider);
optionsProvider, templateBuilderProvider);
try {
template.imageId("ami").build();
assert false;
@ -174,11 +185,11 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
Location location = new LocationImpl(LocationScope.REGION, "region", "region", null);
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(location));
.<Location> of(location));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet
.<Size> of(new SizeImpl("1", "1", "region/1", location, null, ImmutableMap.<String, String> of(), 1, 1,
1, ImagePredicates.any())));
.<Size> of(new SizeImpl("1", "1", "region/1", location, null, ImmutableMap.<String, String> of(), 1, 1, 1,
ImagePredicates.any())));
Location defaultLocation = createMock(Location.class);
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
@ -197,7 +208,7 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(knownImage, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
optionsProvider, templateBuilderProvider);
assertEquals(template.imageId("region/bad").build().getImage(), knownImage);

View File

@ -316,7 +316,7 @@ See http://code.google.com/p/jclouds for details."
(define-accessors NodeMetadata "node" credentials extra state tag)
(defn builder-options [builder]
(or (get-field org.jclouds.compute.internal.TemplateBuilderImpl :options builder)
(or (get-field org.jclouds.compute.domain.internal.TemplateBuilderImpl :options builder)
(TemplateOptions.)))
(defmacro option-option-fn-0arg [key]
@ -341,7 +341,8 @@ See http://code.google.com/p/jclouds for details."
(concat
(make-option-map option-fn-1arg
[:os-family :location-id :architecture :image-id :size-id
:os-description-matches :image-version-matches :image-name-matches
:os-name-matches :os-version-matches :os-description-matches
:os-64-bit :image-version-matches :image-name-matches
:image-description-matches :min-cores :min-ram])
(make-option-map option-option-fn-1arg
[:run-script :install-private-key :authorize-public-key :inbound-ports]))))

View File

@ -22,8 +22,12 @@ package org.jclouds.compute.domain;
/**
* Architecture of a node
*
* <p/>
* Please transition to {@link OperatingSystem}
*
* @author Adrian Cole
*/
@Deprecated
public enum Architecture {
/**

View File

@ -19,11 +19,14 @@
package org.jclouds.compute.domain;
import org.jclouds.compute.domain.internal.ImageImpl;
import javax.annotation.Nullable;
import com.google.inject.ImplementedBy;
import org.jclouds.compute.domain.internal.ImageImpl;
import org.jclouds.domain.Credentials;
import com.google.common.annotations.Beta;
import com.google.inject.ImplementedBy;
/**
* Running Operating system
*
@ -31,6 +34,11 @@ import org.jclouds.domain.Credentials;
*/
@ImplementedBy(ImageImpl.class)
public interface Image extends ComputeMetadata {
/**
* The operating system installed on this image
*/
@Beta
OperatingSystem getOperatingSystem();
/**
* Version of the image
@ -43,23 +51,33 @@ public interface Image extends ComputeMetadata {
String getDescription();
/**
* Operating System
* please use {#link {@link #getOperatingSystem()}
*
* @see OperatingSystem#getFamily()
*/
@Deprecated
OsFamily getOsFamily();
/**
* Description of the operating system including the version.
* please use {#link {@link #getOperatingSystem()}
*
* @see OperatingSystem#getDescription()
*/
@Deprecated
String getOsDescription();
/**
* Operating System
* please use {#link {@link #getOperatingSystem()}
*
* @see OperatingSystem#getDescription()
*/
@Nullable
@Deprecated
Architecture getArchitecture();
/**
* Default credentials for the current image
*/
/**
* Default credentials for the current image
*/
Credentials getDefaultCredentials();
}

View File

@ -0,0 +1,207 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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.compute.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import javax.annotation.Nullable;
import com.google.common.annotations.Beta;
/**
* Running Operating system
*
* @author Adrian Cole
*/
@Beta
public class OperatingSystem {
@Nullable
private OsFamily family;
@Nullable
private String name;
@Nullable
private String arch;
@Nullable
private String version;
private String description;
private boolean is64Bit;
// for serialization/deserialization
protected OperatingSystem() {
}
public OperatingSystem(@Nullable OsFamily family, @Nullable String name, @Nullable String version,
@Nullable String arch, String description, boolean is64Bit) {
this.family = family;
this.name = name;
this.arch = arch;
this.version = version;
this.description = checkNotNull(description, "description");
this.is64Bit = is64Bit;
}
/**
* Type of the operating system
* <p/>
* generally, this is used to compare the means by which you use an operating
* system. For example, to determine compatibility of a particular
* bootstrapping or package installation approach.
*/
@Nullable
public OsFamily getFamily() {
return family;
}
/**
* name of the operating system; ex. {@code Red Hat Enterprise Linux}
*
* <h2>note</h2> While this looks similar to, and may in some cases be the
* same as the java system property {@code os.name} it isn't guaranteed to
* match a particular value. For example, this value could be derived from
* data parsed for a cloud api or the OVF CIM OSType enum value;
*
* @return operating system name or null if it couldn't be determined.
*/
@Nullable
public String getName() {
return name;
}
/**
* architecture of the operating system; ex. {@code x86_64}
* <p/>
* generally, this is used to decide whether an operating system will run
* certain binaries, for example, a 64bit JDK.
*
* <h2>note</h2>
* While this looks similar to, and may in some cases be the same as the java
* system property {@code os.arch} it isn't guaranteed to match a particular
* value. For example, this value could be derived from data parsed for a
* cloud api or the OVF CIM OSType enum value;
*
* @return operating system architecture or null if it couldn't be
* determined.
*/
@Nullable
public String getArch() {
return arch;
}
/**
* version of the operating system; ex. {@code 10.0.4}
* <p/>
* generally, this is used to compare versions of the same operating system
* name. It should be meaningful when sorted against, although this isn't
* necessary.
* <h2>note</h2>
* While this looks similar to, and may in some cases be the same as the java
* system property {@code os.version} it isn't guaranteed to match a
* particular value. For example, this value could be derived from data
* parsed for a cloud api or the OVF CIM OSType enum value;
*
* @return operating system version or null if it couldn't be determined.
*/
@Nullable
public String getVersion() {
return version;
}
/**
* description of the operating system; ex. {@code CentOS 32-bit},{@code
* Other Linux (32-bit)}
* <p/>
* This is the only required field in the operating system object. In some
* implementations, it is this data that is used to parse the value of the
* {@link #name}, {@link #version}, and {@link #arch} fields.
*
* @return operating system description
*/
public String getDescription() {
return description;
}
/**
*
* @return whether this operating system supports 64 bit computation.
*/
public boolean is64Bit() {
return is64Bit;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((arch == null) ? 0 : arch.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((family == null) ? 0 : family.hashCode());
result = prime * result + (is64Bit ? 1231 : 1237);
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((version == null) ? 0 : version.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
OperatingSystem other = (OperatingSystem) obj;
if (arch == null) {
if (other.arch != null)
return false;
} else if (!arch.equals(other.arch))
return false;
if (description == null) {
if (other.description != null)
return false;
} else if (!description.equals(other.description))
return false;
if (family == null) {
if (other.family != null)
return false;
} else if (!family.equals(other.family))
return false;
if (is64Bit != other.is64Bit)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (version == null) {
if (other.version != null)
return false;
} else if (!version.equals(other.version))
return false;
return true;
}
@Override
public String toString() {
return "[name=" + name + ", family=" + family + ", version=" + version + ", arch=" + arch + ", is64Bit="
+ is64Bit + ", description=" + description + "]";
}
}

View File

@ -26,14 +26,16 @@ import com.google.common.base.CaseFormat;
/**
* Running Operating system
*
*
* @author Adrian Cole
*/
public enum OsFamily {
CENTOS,
UNKNOWN, AIX, ARCH, CENTOS, DARWIN, DEBIAN, ESX, FEDORA, FREEBSD, GENTOO, HPUX, LINUX, MANDRIVA, NETBSD,
/**
*
* Oracle Enterprise Linux
*/
OEL, RHEL, FEDORA, DEBIAN, UBUNTU, TTYLINUX, ARCH, SUSE, SOLARIS, GENTOO, WINDOWS;
OEL, OPENBSD, RHEL, SIGAR, SOLARIS, SUSE, TURBOLINUX, UBUNTU, WINDOWS;
public String value() {
return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
}
@ -43,8 +45,11 @@ public enum OsFamily {
return value();
}
public static OsFamily fromValue(String operatingSystem) {
return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE,
checkNotNull(operatingSystem, "region")));
public static OsFamily fromValue(String osFamily) {
try {
return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(osFamily, "osFamily")));
} catch (IllegalArgumentException e) {
return UNKNOWN;
}
}
}

View File

@ -21,7 +21,7 @@ package org.jclouds.compute.domain;
import java.util.NoSuchElementException;
import org.jclouds.compute.internal.TemplateBuilderImpl;
import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
import org.jclouds.compute.options.TemplateOptions;
import com.google.inject.ImplementedBy;
@ -35,7 +35,8 @@ import com.google.inject.ImplementedBy;
public interface TemplateBuilder {
/**
* prime this builder with parameters known to work on the current compute provider.
* prime this builder with parameters known to work on the current compute
* provider.
*/
TemplateBuilder any();
@ -84,7 +85,10 @@ public interface TemplateBuilder {
/**
* Configure this template to require a specific architecture
*
* Please switch to either architecture as a string, or {@link #is64bit()}
*/
@Deprecated
TemplateBuilder architecture(Architecture architecture);
/**
@ -100,23 +104,50 @@ public interface TemplateBuilder {
TemplateBuilder sizeId(String sizeId);
/**
* Configure this template to have an operating system description that matches the regular
* expression
* Configure this template to have an operating system name that matches the
* regular expression
*/
TemplateBuilder osNameMatches(String osNameRegex);
/**
* Configure this template to have an operating system description that
* matches the regular expression
*/
TemplateBuilder osDescriptionMatches(String osDescriptionRegex);
/**
* Configure this template to have an image name that matches the regular expression
* Configure this template to have an os version that matches the regular
* expression
*/
TemplateBuilder osVersionMatches(String osVersionRegex);
/**
* Configure this template to require a specific architecture. ex.
* virtualizationType or
*
*/
TemplateBuilder osArchMatches(String architecture);
/**
* Configure this template to require a 64 bit operating system.
*/
TemplateBuilder os64bit(boolean is64bit);
/**
* Configure this template to have an image name that matches the regular
* expression
*/
TemplateBuilder imageNameMatches(String imageNameRegex);
/**
* Configure this template to have an image version that matches the regular expression
* Configure this template to have an image version that matches the regular
* expression
*/
TemplateBuilder imageVersionMatches(String imageVersionRegex);
/**
* Configure this template to have an image description that matches the regular expression
* Configure this template to have an image description that matches the
* regular expression
*/
TemplateBuilder imageDescriptionMatches(String imageDescriptionRegex);

View File

@ -29,6 +29,7 @@ import javax.annotation.Nullable;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.ComputeType;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.domain.Credentials;
import org.jclouds.domain.Location;
@ -41,26 +42,42 @@ public class ImageImpl extends ComputeMetadataImpl implements Image {
/** The serialVersionUID */
private static final long serialVersionUID = 7856744554191025307L;
private final OperatingSystem operatingSystem;
private final String version;
private final String description;
private final OsFamily osFamily;
private final String osDescription;
@Nullable
private final Architecture architecture;
private final Credentials defaultCredentials;
public ImageImpl(String providerId, String name, String id, Location location, URI uri,
Map<String, String> userMetadata, String description, String version,
@Nullable OsFamily osFamily, String osDescription, Architecture architecture,
Credentials defaultCredentials) {
Map<String, String> userMetadata, OperatingSystem operatingSystem, String description, String version,
@Nullable Architecture architecture, Credentials defaultCredentials) {
super(ComputeType.IMAGE, providerId, name, id, location, uri, userMetadata);
this.operatingSystem = checkNotNull(operatingSystem, "operatingSystem");
this.version = checkNotNull(version, "version");
this.osFamily = osFamily;
this.description = checkNotNull(description, "description");
this.osDescription = checkNotNull(osDescription, "osDescription");
this.architecture = checkNotNull(architecture, "architecture");
this.architecture = architecture;
this.defaultCredentials = defaultCredentials;
}
@Deprecated
public ImageImpl(String providerId, String name, String id, Location location, URI uri,
Map<String, String> userMetadata, String description, String version, @Nullable OsFamily osFamily,
String osDescription, @Nullable Architecture architecture, Credentials defaultCredentials) {
this(providerId, name, id, location, uri, userMetadata, new OperatingSystem(osFamily, null, null,
architecture != null ? architecture.toString() : null, osDescription, architecture != null ? architecture
.equals(Architecture.X86_64) : false), description, version, architecture, defaultCredentials);
}
/**
* {@inheritDoc}
*/
@Override
public OperatingSystem getOperatingSystem() {
return operatingSystem;
}
/**
* {@inheritDoc}
*/
@ -82,21 +99,24 @@ public class ImageImpl extends ComputeMetadataImpl implements Image {
*/
@Override
public OsFamily getOsFamily() {
return osFamily;
return operatingSystem.getFamily();
}
/**
* {@inheritDoc}
*/
@Deprecated
@Override
public String getOsDescription() {
return osDescription;
return operatingSystem.getDescription();
}
/**
* {@inheritDoc}
*/
@Deprecated
@Override
@Nullable
public Architecture getArchitecture() {
return architecture;
}
@ -111,10 +131,8 @@ public class ImageImpl extends ComputeMetadataImpl implements Image {
@Override
public String toString() {
return "[id=" + getId() + ", providerId=" + getProviderId() + ", name=" + getName()
+ ", locationId=" + (getLocation() != null ? getLocation().getId() : "null")
+ ", architecture=" + architecture + ", osDescription=" + osDescription
+ ", version=" + version + ", osFamily=" + osFamily + "]";
return "[id=" + getId() + ", name=" + getName() + ", operatingSystem=" + operatingSystem + ", description="
+ description + ", version=" + version + ", location=" + getLocation() + "]";
}
@Override
@ -122,9 +140,9 @@ public class ImageImpl extends ComputeMetadataImpl implements Image {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((architecture == null) ? 0 : architecture.hashCode());
result = prime * result + ((defaultCredentials == null) ? 0 : defaultCredentials.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((osDescription == null) ? 0 : osDescription.hashCode());
result = prime * result + ((osFamily == null) ? 0 : osFamily.hashCode());
result = prime * result + ((operatingSystem == null) ? 0 : operatingSystem.hashCode());
result = prime * result + ((version == null) ? 0 : version.hashCode());
return result;
}
@ -143,20 +161,20 @@ public class ImageImpl extends ComputeMetadataImpl implements Image {
return false;
} else if (!architecture.equals(other.architecture))
return false;
if (defaultCredentials == null) {
if (other.defaultCredentials != null)
return false;
} else if (!defaultCredentials.equals(other.defaultCredentials))
return false;
if (description == null) {
if (other.description != null)
return false;
} else if (!description.equals(other.description))
return false;
if (osDescription == null) {
if (other.osDescription != null)
if (operatingSystem == null) {
if (other.operatingSystem != null)
return false;
} else if (!osDescription.equals(other.osDescription))
return false;
if (osFamily == null) {
if (other.osFamily != null)
return false;
} else if (!osFamily.equals(other.osFamily))
} else if (!operatingSystem.equals(other.operatingSystem))
return false;
if (version == null) {
if (other.version != null)

View File

@ -17,7 +17,7 @@
* ====================================================================
*/
package org.jclouds.compute.internal;
package org.jclouds.compute.domain.internal;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Predicates.and;
@ -38,11 +38,11 @@ import javax.inject.Provider;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.ComputeMetadata;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.domain.internal.TemplateImpl;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.domain.Location;
@ -50,9 +50,11 @@ import org.jclouds.logging.Logger;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.base.Supplier;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering;
import com.google.common.primitives.Doubles;
@ -75,8 +77,6 @@ public class TemplateBuilderImpl implements TemplateBuilder {
protected final Provider<TemplateOptions> optionsProvider;
protected final Provider<TemplateBuilder> defaultTemplateProvider;
@VisibleForTesting
protected OsFamily os;
@VisibleForTesting
protected Architecture arch;
@VisibleForTesting
@ -86,9 +86,19 @@ public class TemplateBuilderImpl implements TemplateBuilder {
@VisibleForTesting
protected String sizeId;
@VisibleForTesting
protected String imageVersion;
@VisibleForTesting
protected OsFamily osFamily;
@VisibleForTesting
protected String osVersion;
@VisibleForTesting
protected Boolean os64Bit;
@VisibleForTesting
protected String osName;
@VisibleForTesting
protected String osDescription;
@VisibleForTesting
protected String imageVersion;
protected String osArch;
@VisibleForTesting
protected String imageName;
@VisibleForTesting
@ -106,9 +116,8 @@ public class TemplateBuilderImpl implements TemplateBuilder {
@Inject
protected TemplateBuilderImpl(Supplier<Set<? extends Location>> locations, Supplier<Set<? extends Image>> images,
Supplier<Set<? extends Size>> sizes, Supplier<Location> defaultLocation2,
Provider<TemplateOptions> optionsProvider,
@Named("DEFAULT") Provider<TemplateBuilder> defaultTemplateProvider) {
Supplier<Set<? extends Size>> sizes, Supplier<Location> defaultLocation2,
Provider<TemplateOptions> optionsProvider, @Named("DEFAULT") Provider<TemplateBuilder> defaultTemplateProvider) {
this.locations = locations;
this.images = images;
this.sizes = sizes;
@ -118,11 +127,13 @@ public class TemplateBuilderImpl implements TemplateBuilder {
}
/**
* If the current location id is null, then we don't care where to launch a node.
* If the current location id is null, then we don't care where to launch a
* node.
*
* If the input location is null, then the data isn't location sensitive
*
* If the input location is a parent of the specified location, then we are ok.
* If the input location is a parent of the specified location, then we are
* ok.
*/
private final Predicate<ComputeMetadata> locationPredicate = new Predicate<ComputeMetadata>() {
@Override
@ -130,7 +141,7 @@ public class TemplateBuilderImpl implements TemplateBuilder {
boolean returnVal = true;
if (location != null && input.getLocation() != null)
returnVal = location.equals(input.getLocation()) || location.getParent() != null
&& location.getParent().equals(input.getLocation());
&& location.getParent().equals(input.getLocation());
return returnVal;
}
};
@ -150,13 +161,13 @@ public class TemplateBuilderImpl implements TemplateBuilder {
}
};
private final Predicate<Image> osPredicate = new Predicate<Image>() {
private final Predicate<OperatingSystem> osFamilyPredicate = new Predicate<OperatingSystem>() {
@Override
public boolean apply(Image input) {
public boolean apply(OperatingSystem input) {
boolean returnVal = true;
if (os != null)
returnVal = os.equals(input.getOsFamily());
if (osFamily != null)
returnVal = osFamily.equals(input.getFamily());
return returnVal;
}
@ -172,21 +183,77 @@ public class TemplateBuilderImpl implements TemplateBuilder {
}
};
private final Predicate<Image> osDescriptionPredicate = new Predicate<Image>() {
private final Predicate<OperatingSystem> osNamePredicate = new Predicate<OperatingSystem>() {
@Override
public boolean apply(Image input) {
public boolean apply(OperatingSystem input) {
boolean returnVal = true;
if (osDescription != null) {
if (input.getOsDescription() == null)
if (osName != null) {
if (input.getName() == null)
returnVal = false;
else
returnVal = input.getOsDescription().contains(osDescription)
|| input.getOsDescription().matches(osDescription);
returnVal = input.getName().contains(osName) || input.getName().matches(osName);
}
return returnVal;
}
};
private final Predicate<OperatingSystem> osDescriptionPredicate = new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem input) {
boolean returnVal = true;
if (osDescription != null) {
if (input.getDescription() == null)
returnVal = false;
else
returnVal = input.getDescription().contains(osDescription)
|| input.getDescription().matches(osDescription);
}
return returnVal;
}
};
private final Predicate<OperatingSystem> osVersionPredicate = new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem input) {
boolean returnVal = true;
if (osVersion != null) {
if (input.getVersion() == null)
returnVal = false;
else
returnVal = input.getVersion().contains(osVersion) || input.getVersion().matches(osVersion);
}
return returnVal;
}
};
private final Predicate<OperatingSystem> os64BitPredicate = new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem input) {
boolean returnVal = true;
if (os64Bit != null) {
if (os64Bit)
return input.is64Bit();
else
return !input.is64Bit();
}
return returnVal;
}
};
private final Predicate<OperatingSystem> osArchPredicate = new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem input) {
boolean returnVal = true;
if (osArch != null) {
if (input.getArch() == null)
returnVal = false;
else
returnVal = input.getArch().contains(osArch) || input.getArch().matches(osArch);
}
return returnVal;
}
};
private final Predicate<Image> imageVersionPredicate = new Predicate<Image>() {
@Override
public boolean apply(Image input) {
@ -200,6 +267,7 @@ public class TemplateBuilderImpl implements TemplateBuilder {
return returnVal;
}
};
private final Predicate<Image> imageNamePredicate = new Predicate<Image>() {
@Override
public boolean apply(Image input) {
@ -222,8 +290,8 @@ public class TemplateBuilderImpl implements TemplateBuilder {
returnVal = false;
else
returnVal = input.getDescription().equals(imageDescription)
|| input.getDescription().contains(imageDescription)
|| input.getDescription().matches(imageDescription);
|| input.getDescription().contains(imageDescription)
|| input.getDescription().matches(imageDescription);
}
return returnVal;
}
@ -257,12 +325,12 @@ public class TemplateBuilderImpl implements TemplateBuilder {
}
};
private final Predicate<Size> sizePredicate = and(sizeIdPredicate, locationPredicate, sizeCoresPredicate,
sizeRamPredicate);
sizeRamPredicate);
static final Ordering<Size> DEFAULT_SIZE_ORDERING = new Ordering<Size>() {
public int compare(Size left, Size right) {
return ComparisonChain.start().compare(left.getCores(), right.getCores()).compare(left.getRam(),
right.getRam()).compare(left.getDisk(), right.getDisk()).result();
right.getRam()).compare(left.getDisk(), right.getDisk()).result();
}
};
static final Ordering<Size> BY_CORES_ORDERING = new Ordering<Size>() {
@ -273,10 +341,15 @@ public class TemplateBuilderImpl implements TemplateBuilder {
static final Ordering<Image> DEFAULT_IMAGE_ORDERING = new Ordering<Image>() {
public int compare(Image left, Image right) {
return ComparisonChain.start().compare(left.getName(), right.getName(),
Ordering.<String> natural().nullsLast()).compare(left.getVersion(), right.getVersion(),
Ordering.<String> natural().nullsLast()).compare(left.getOsDescription(), right.getOsDescription(),
Ordering.<String> natural().nullsLast()).compare(left.getArchitecture(), right.getArchitecture())
.result();
Ordering.<String> natural().nullsLast()).compare(left.getVersion(), right.getVersion(),
Ordering.<String> natural().nullsLast()).compare(left.getOperatingSystem().getName(),
right.getOperatingSystem().getName(),//
Ordering.<String> natural().nullsLast()).compare(left.getOperatingSystem().getVersion(),
right.getOperatingSystem().getVersion(),//
Ordering.<String> natural().nullsLast()).compare(left.getOperatingSystem().getDescription(),
right.getOperatingSystem().getDescription(),//
Ordering.<String> natural().nullsLast()).compare(left.getOperatingSystem().getArch(),
right.getOperatingSystem().getArch()).result();
}
};
@ -309,16 +382,23 @@ public class TemplateBuilderImpl implements TemplateBuilder {
public TemplateBuilder fromImage(Image image) {
if (image.getLocation() != null)
this.location = image.getLocation();
if (image.getOsFamily() != null)
this.os = image.getOsFamily();
if (image.getOperatingSystem().getFamily() != null)
this.osFamily = image.getOperatingSystem().getFamily();
if (image.getName() != null)
this.imageName = image.getName();
if (image.getDescription() != null)
this.imageDescription = image.getDescription();
if (image.getOsDescription() != null)
this.osDescription = image.getOsDescription();
if (image.getOperatingSystem().getName() != null)
this.osName = image.getOperatingSystem().getName();
if (image.getOperatingSystem().getDescription() != null)
this.osDescription = image.getOperatingSystem().getDescription();
if (image.getVersion() != null)
this.imageVersion = image.getVersion();
if (image.getOperatingSystem().getVersion() != null)
this.osVersion = image.getOperatingSystem().getVersion();
this.os64Bit = image.getOperatingSystem().is64Bit();
if (image.getOperatingSystem().getArch() != null)
this.osArch = image.getOperatingSystem().getArch();
if (image.getArchitecture() != null)
this.arch = image.getArchitecture();
return this;
@ -372,7 +452,7 @@ public class TemplateBuilderImpl implements TemplateBuilder {
*/
@Override
public TemplateBuilder osFamily(OsFamily os) {
this.os = os;
this.osFamily = os;
return this;
}
@ -433,7 +513,7 @@ public class TemplateBuilderImpl implements TemplateBuilder {
size = sizeOrdering.max(filter(sizesThatAreCompatibleWithOurImages, sizePredicate));
} catch (NoSuchElementException exception) {
throw new NoSuchElementException("sizes don't support any images: " + toString() + "\n" + sizesl + "\n"
+ images);
+ images);
}
logger.debug("<< matched size(%s)", size);
return size;
@ -494,9 +574,17 @@ public class TemplateBuilderImpl implements TemplateBuilder {
}
});
predicates.add(osPredicate);
predicates.add(new Predicate<Image>() {
@Override
public boolean apply(Image input) {
return Predicates.and(
ImmutableSet.of(osFamilyPredicate, osNamePredicate, osDescriptionPredicate, osVersionPredicate,
os64BitPredicate, osArchPredicate)).apply(input.getOperatingSystem());
}
});
predicates.add(imageArchPredicate);
predicates.add(osDescriptionPredicate);
predicates.add(imageVersionPredicate);
predicates.add(imageNamePredicate);
predicates.add(imageDescriptionPredicate);
@ -516,8 +604,12 @@ public class TemplateBuilderImpl implements TemplateBuilder {
this.imageDescription = null;
this.imageVersion = null;
this.arch = null;
this.os = null;
this.osFamily = null;
this.osName = null;
this.osDescription = null;
this.osVersion = null;
this.os64Bit = null;
this.osArch = null;
return this;
}
@ -548,6 +640,24 @@ public class TemplateBuilderImpl implements TemplateBuilder {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TemplateBuilder osVersionMatches(String osVersionRegex) {
this.osVersion = osVersionRegex;
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TemplateBuilder osArchMatches(String osArchitectureRegex) {
this.osArch = osArchitectureRegex;
return this;
}
/**
* {@inheritDoc}
*/
@ -566,6 +676,15 @@ public class TemplateBuilderImpl implements TemplateBuilder {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TemplateBuilder osNameMatches(String osNameRegex) {
this.osName = osNameRegex;
return this;
}
/**
* {@inheritDoc}
*/
@ -613,9 +732,10 @@ public class TemplateBuilderImpl implements TemplateBuilder {
@VisibleForTesting
boolean nothingChangedExceptOptions() {
return os == null && arch == null && location == null && imageId == null && sizeId == null
&& osDescription == null && imageVersion == null && imageName == null && imageDescription == null
&& minCores == 0 && minRam == 0 && !biggest && !fastest;
return osFamily == null && arch == null && location == null && imageId == null && sizeId == null
&& osName == null && osDescription == null && imageVersion == null && osVersion == null && osArch == null
&& os64Bit == null && imageName == null && imageDescription == null && minCores == 0 && minRam == 0
&& !biggest && !fastest;
}
/**
@ -629,9 +749,16 @@ public class TemplateBuilderImpl implements TemplateBuilder {
@Override
public String toString() {
return "[arch=" + arch + ", biggest=" + biggest + ", fastest=" + fastest + ", imageName=" + imageName
+ ", imageDescription=" + imageDescription + ", imageId=" + imageId + ", imageVersion=" + imageVersion
+ ", location=" + location + ", minCores=" + minCores + ", minRam=" + minRam + ", os=" + os
+ ", osDescription=" + osDescription + ", sizeId=" + sizeId + "]";
+ ", imageDescription=" + imageDescription + ", imageId=" + imageId + ", imageVersion=" + imageVersion
+ ", location=" + location + ", minCores=" + minCores + ", minRam=" + minRam + ", osFamily=" + osFamily
+ ", osName=" + osName + ", osDescription=" + osDescription + ", osVersion=" + osVersion + ", osArch=" + osArch + ", os64Bit="
+ os64Bit + ", sizeId=" + sizeId + "]";
}
@Override
public TemplateBuilder os64bit(boolean is64Bit) {
this.os64Bit = is64Bit;
return this;
}
}

View File

@ -0,0 +1,294 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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.compute.domain.os;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import com.google.common.annotations.Beta;
/**
* Operating system based on DMTF CIM model.
*
* @author Adrian Cole
* @see <a href="http://dmtf.org/standards/cim/cim_schema_v2260">DMTF CIM
* model</a>
*/
@Beta
public class CIMOperatingSystem extends OperatingSystem {
public enum OSType {
/**
* Other
*/
OTHER(0, "Other", OsFamily.UNKNOWN, false),
/**
* MACOS
*/
MACOS(1, "MACOS", OsFamily.DARWIN, false),
/**
* Solaris
*/
SOLARIS(28, "Solaris", OsFamily.SOLARIS, false),
/**
* LINUX
*/
LINUX(35, "LINUX", OsFamily.LINUX, false),
/**
* FreeBSD
*/
FREEBSD(41, "FreeBSD", OsFamily.FREEBSD, false),
/**
* NetBSD
*/
NETBSD(42, "NetBSD", OsFamily.NETBSD, false),
/**
* OpenBSD
*/
OPENBSD(64, "OpenBSD", OsFamily.OPENBSD, false),
/**
* Not Applicable
*/
NOT_APPLICABLE(65, "Not Applicable", OsFamily.UNKNOWN, false),
/**
* Microsoft Windows Server 2003
*/
WINDOWS_SERVER_2003(68, "Microsoft Windows Server 2003", OsFamily.WINDOWS, false),
/**
* Microsoft Windows Server 2003 64-Bit
*/
WINDOWS_SERVER_2003_64(69, "Microsoft Windows Server 2003 64-Bit", OsFamily.WINDOWS, true),
/**
* Microsoft Windows Server 2008
*/
WINDOWS_SERVER_2008(75, "Microsoft Windows Server 2008", OsFamily.WINDOWS, false),
/**
* Microsoft Windows Server 2008 64-Bit
*/
WINDOWS_SERVER_2008_64(76, "Microsoft Windows Server 2008 64-Bit", OsFamily.WINDOWS, true),
/**
* FreeBSD 64-Bit
*/
FREEBSD_64(77, "FreeBSD 64-Bit", OsFamily.FREEBSD, true),
/**
* RedHat Enterprise Linux
*/
RHEL(78, "RedHat Enterprise Linux", OsFamily.RHEL, false),
/**
* RedHat Enterprise Linux 64-Bit
*/
RHEL_64(79, "RedHat Enterprise Linux 64-Bit", OsFamily.RHEL, true),
/**
* Solaris 64-Bit
*/
SOLARIS_64(80, "Solaris 64-Bit", OsFamily.SOLARIS, true),
/**
* SUSE
*/
SUSE(81, "SUSE", OsFamily.SUSE, false),
/**
* SUSE 64-Bit
*/
SUSE_64(82, "SUSE 64-Bit", OsFamily.SUSE, true),
/**
* SLES
*/
SLES(83, "SLES", OsFamily.SUSE, false),
/**
* SLES 64-Bit
*/
SLES_64(84, "SLES 64-Bit", OsFamily.SUSE, true),
/**
* Novell OES
*/
NOVELL_OES(85, "Novell OES", OsFamily.SUSE, true),
/**
* Mandriva
*/
MANDRIVA(88, "Mandriva", OsFamily.MANDRIVA, false),
/**
* Mandriva 64-Bit
*/
MANDRIVA_64(89, "Mandriva 64-Bit", OsFamily.MANDRIVA, true),
/**
* TurboLinux
*/
TURBOLINUX(90, "TurboLinux", OsFamily.TURBOLINUX, false),
/**
* TurboLinux 64-Bit
*/
TURBOLINUX_64(91, "TurboLinux 64-Bit", OsFamily.TURBOLINUX, true),
/**
* Ubuntu
*/
UBUNTU(92, "Ubuntu", OsFamily.UBUNTU, false),
/**
* Ubuntu 64-Bit
*/
UBUNTU_64(93, "Ubuntu 64-Bit", OsFamily.UBUNTU, true),
/**
* Debian
*/
DEBIAN(94, "Debian", OsFamily.DEBIAN, false),
/**
* Debian 64-Bit
*/
DEBIAN_64(95, "Debian 64-Bit", OsFamily.DEBIAN, false),
/**
* Linux 2.4.x
*/
LINUX_2_4(96, "Linux 2.4.x", OsFamily.LINUX, false),
/**
* Linux 2.4.x 64-Bi
*/
LINUX_2_4_64(97, "Linux 2.4.x 64-Bit", OsFamily.LINUX, true),
/**
* Linux 2.6.x
*/
LINUX_2_6(98, "Linux 2.6.x", OsFamily.LINUX, false),
/**
* Linux 2.6.x 64-Bit
*/
LINUX_2_6_64(99, "Linux 2.6.x 64-Bit", OsFamily.LINUX, true),
/**
* Linux 64-Bit
*/
LINUX_64(100, "Linux 64-Bit", OsFamily.LINUX, true),
/**
* Other 64-Bit
*/
OTHER_64(101, "Other 64-Bit", OsFamily.UNKNOWN, true),
/**
* Microsoft Windows Server 2008 R2
*/
WINDOWS_SERVER_2008_R2(102, "Microsoft Windows Server 2008 R2", OsFamily.WINDOWS, true),
/**
* VMware ESXi
*/
ESXI(103, "VMware ESXi", OsFamily.ESX, true),
/**
* Microsoft Windows 7
*/
WINDOWS_7(104, "Microsoft Windows 7", OsFamily.WINDOWS, false),
/**
* CentOS 32-bit
*/
CENTOS(105, "CentOS 32-bit", OsFamily.CENTOS, false),
/**
* CentOS 64-bit
*/
CENTOS_64(106, "CentOS 64-bit", OsFamily.CENTOS, true),
/**
* Oracle Enterprise Linux 32-bit
*/
ORACLE_ENTERPRISE_LINUX(107, "Oracle Enterprise Linux 32-bit", OsFamily.OEL, false),
/**
* Oracle Enterprise Linux 64-bit
*/
ORACLE_ENTERPRISE_LINUX_64(108, "Oracle Enterprise Linux 64-bit", OsFamily.OEL, true);
private final int code;
public int getCode() {
return code;
}
public String getValue() {
return value;
}
public OsFamily getFamily() {
return family;
}
public boolean is64Bit() {
return is64Bit;
}
private final String value;
private final OsFamily family;
private final boolean is64Bit;
OSType(int code, String value, OsFamily family, boolean is64Bit) {
this.code = code;
this.value = value;
this.family = family;
this.is64Bit = is64Bit;
}
public static OSType fromValue(int code) {
for (OSType type : values()) {
if (type.code == code)
return type;
}
return OTHER;
}
}
private OSType osType;
protected CIMOperatingSystem() {
super();
}
public CIMOperatingSystem(OSType osType, String version, String arch, String description) {
super(osType.getFamily(), osType.getValue(), version, arch, description, osType.is64Bit());
this.osType = osType;
}
/**
* CIM OSType of the image
*/
public OSType getOsType() {
return osType;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((osType == null) ? 0 : osType.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
CIMOperatingSystem other = (CIMOperatingSystem) obj;
if (osType == null) {
if (other.osType != null)
return false;
} else if (!osType.equals(other.osType))
return false;
return true;
}
@Override
public String toString() {
return "[osType=" + osType + ", version=" + getVersion() + ", arch=" + getArch() + ", description="
+ getDescription() + "]";
}
}

View File

@ -23,7 +23,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Set;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.Image;
import com.google.common.base.Predicate;
@ -84,19 +83,19 @@ public class ImagePredicates {
};
}
public static Predicate<Image> architectureIn(
Iterable<Architecture> architectures) {
checkNotNull(architectures, "architectures must be defined");
final Set<Architecture> search = Sets.newHashSet(architectures);
/**
* return true if this is a 64bit image.
*/
public static Predicate<Image> is64Bit() {
return new Predicate<Image>() {
@Override
public boolean apply(Image image) {
return search.contains(image.getArchitecture());
return image.getOperatingSystem().is64Bit();
}
@Override
public String toString() {
return "architectureIn(" + search + ")";
return "is64Bit()";
}
};
}

View File

@ -0,0 +1,115 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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.compute.predicates;
import org.jclouds.compute.domain.OperatingSystem;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
/**
* Container for operating system filters (predicates).
*
* This class has static methods that create customized predicates to use with
* {@link org.jclouds.compute.ComputeService}.
*
* @author Adrian Cole
*/
public class OperatingSystemPredicates {
/**
* evaluates true if the OperatingSystem supports the apt installer
*
*/
public static Predicate<OperatingSystem> supportsApt() {
return new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem os) {
if (os.getFamily() != null) {
switch (os.getFamily()) {
case DEBIAN:
case UBUNTU:
return true;
}
}
String toMatch = os.getName() != null ? os.getName() : os.getDescription();
return (toMatch.toLowerCase().indexOf("ubuntu") != -1 || toMatch.toLowerCase().indexOf("debian") != -1);
}
@Override
public String toString() {
return "supportsApt()";
}
};
}
/**
* evaluates true if the OperatingSystem supports the yum installer
*
*/
public static Predicate<OperatingSystem> supportsYum() {
return new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem os) {
if (os.getFamily() != null) {
switch (os.getFamily()) {
case CENTOS:
case FEDORA:
case RHEL:
return true;
}
}
String toMatch = os.getName() != null ? os.getName() : os.getDescription();
return (toMatch.toLowerCase().indexOf("centos") != -1 || toMatch.toLowerCase().indexOf("rhel") != -1
|| toMatch.toLowerCase().replace(" ", "").indexOf("redhate") != -1 || toMatch.toLowerCase().indexOf(
"fedora") != -1);
}
@Override
public String toString() {
return "supportsYum()";
}
};
}
/**
* return everything.
*/
public static Predicate<OperatingSystem> any() {
return Predicates.<OperatingSystem> alwaysTrue();
}
/**
* return true if this is a 64bit os.
*/
public static Predicate<OperatingSystem> is64Bit() {
return new Predicate<OperatingSystem>() {
@Override
public boolean apply(OperatingSystem os) {
return os.is64Bit();
}
@Override
public String toString() {
return "is64Bit()";
}
};
}
}

View File

@ -20,7 +20,7 @@
package org.jclouds.compute.stub.config;
import static com.google.common.base.Preconditions.checkArgument;
import static org.jclouds.compute.predicates.ImagePredicates.architectureIn;
import static org.jclouds.compute.predicates.ImagePredicates.any;
import java.net.URI;
import java.util.Map;
@ -41,11 +41,11 @@ import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.LoadBalancerService;
import org.jclouds.compute.config.BaseComputeServiceContextModule;
import org.jclouds.compute.config.ComputeServiceTimeoutsModule;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.ComputeMetadata;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.NodeState;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.Template;
@ -137,7 +137,7 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
@Inject
public StubSocketOpen(ConcurrentMap<Integer, StubNodeMetadata> nodes,
@Named("PUBLIC_IP_PREFIX") String publicIpPrefix) {
@Named("PUBLIC_IP_PREFIX") String publicIpPrefix) {
this.nodes = nodes;
this.publicIpPrefix = publicIpPrefix;
}
@ -178,11 +178,11 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
private final ExecutorService service;
public StubNodeMetadata(String providerId, String name, String id, Location location, URI uri,
Map<String, String> userMetadata, String tag, Image image, NodeState state,
Iterable<String> publicAddresses, Iterable<String> privateAddresses, Map<String, String> extra,
Credentials credentials, ExecutorService service) {
Map<String, String> userMetadata, String tag, Image image, NodeState state,
Iterable<String> publicAddresses, Iterable<String> privateAddresses, Map<String, String> extra,
Credentials credentials, ExecutorService service) {
super(providerId, name, id, location, uri, userMetadata, tag, image, state, publicAddresses, privateAddresses,
extra, credentials);
extra, credentials);
this.setState(state, 0);
this.service = service;
}
@ -225,9 +225,9 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
@Inject
public StubAddNodeWithTagStrategy(ConcurrentMap<Integer, StubNodeMetadata> nodes, Supplier<Location> location,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
@Named("NODE_ID") Provider<Integer> idProvider, @Named("PUBLIC_IP_PREFIX") String publicIpPrefix,
@Named("PRIVATE_IP_PREFIX") String privateIpPrefix, @Named("PASSWORD_PREFIX") String passwordPrefix) {
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service,
@Named("NODE_ID") Provider<Integer> idProvider, @Named("PUBLIC_IP_PREFIX") String publicIpPrefix,
@Named("PRIVATE_IP_PREFIX") String privateIpPrefix, @Named("PASSWORD_PREFIX") String passwordPrefix) {
this.nodes = nodes;
this.location = location;
this.service = Executors.newCachedThreadPool();
@ -242,9 +242,9 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
checkArgument(location.get().equals(template.getLocation()), "invalid location: " + template.getLocation());
int id = idProvider.get();
StubNodeMetadata node = new StubNodeMetadata(id + "", name, id + "", location.get(), null, ImmutableMap
.<String, String> of(), tag, template.getImage(), NodeState.PENDING, ImmutableSet
.<String> of(publicIpPrefix + id), ImmutableSet.<String> of(privateIpPrefix + id), ImmutableMap
.<String, String> of(), new Credentials("root", passwordPrefix + id), service);
.<String, String> of(), tag, template.getImage(), NodeState.PENDING, ImmutableSet
.<String> of(publicIpPrefix + id), ImmutableSet.<String> of(privateIpPrefix + id), ImmutableMap
.<String, String> of(), new Credentials("root", passwordPrefix + id), service);
nodes.put(id, node);
node.setState(NodeState.RUNNING, 100);
return node;
@ -314,7 +314,7 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
@Inject
protected StubDestroyNodeStrategy(ConcurrentMap<Integer, StubNodeMetadata> nodes,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service) {
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service) {
this.nodes = nodes;
this.service = service;
}
@ -351,14 +351,19 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
}));
Location zone = defaultLocation.get().getParent();
String parentId = zone.getId();
return Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of(new ImageImpl("1", OsFamily.UBUNTU
.name(), parentId + "/1", zone, null, ImmutableMap.<String, String> of(), "stub ubuntu 32", "",
OsFamily.UBUNTU, "ubuntu 64", Architecture.X86_64, new Credentials("root", null)), new ImageImpl("2",
OsFamily.UBUNTU.name(), parentId + "/2", zone, null, ImmutableMap.<String, String> of(),
"stub ubuntu 64", "", OsFamily.UBUNTU, "ubuntu 64", Architecture.X86_64, new Credentials("root", null)),
new ImageImpl("3", OsFamily.CENTOS.name(), parentId + "/3", zone, null, ImmutableMap
.<String, String> of(), "stub centos 64", "", OsFamily.CENTOS, "centos 64",
Architecture.X86_64, new Credentials("root", null))));
return Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of(//
new ImageImpl("1", OsFamily.UBUNTU.name(), parentId + "/1", zone, null,
ImmutableMap.<String, String> of(), //
new OperatingSystem(OsFamily.UBUNTU, "ubuntu 32", null, "X86_32", "ubuntu 32", false),
"stub ubuntu 32", "", null, new Credentials("root", null)), //
new ImageImpl("2", OsFamily.UBUNTU.name(), parentId + "/2", zone, null,
ImmutableMap.<String, String> of(),//
new OperatingSystem(OsFamily.UBUNTU, "ubuntu 64", null, "X86_64", "ubuntu 64", true),
"stub ubuntu 64", "", null, new Credentials("root", null)),//
new ImageImpl("3", OsFamily.CENTOS.name(), parentId + "/3", zone, null,
ImmutableMap.<String, String> of(), //
new OperatingSystem(OsFamily.CENTOS, "centos 64", null, "X86_64", "centos 64", true),
"stub centos 64", "", null, new Credentials("root", null))));
}
@Provides
@ -366,25 +371,23 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
protected Set<? extends Location> provideLocations(@org.jclouds.rest.annotations.Provider String providerName) {
Location provider = new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null);
Location region = new LocationImpl(LocationScope.REGION, providerName + "region", providerName + "region",
provider);
provider);
return ImmutableSet
.of(new LocationImpl(LocationScope.ZONE, providerName + "zone", providerName + "zone", region));
.of(new LocationImpl(LocationScope.ZONE, providerName + "zone", providerName + "zone", region));
}
@Override
protected Supplier<Set<? extends Size>> getSourceSizeSupplier(Injector injector) {
return Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of(new StubSize("small", 1, 1740, 160,
ImmutableSet.of(Architecture.X86_32)), new StubSize("medium", 4, 7680, 850, ImmutableSet
.of(Architecture.X86_64)), new StubSize("large", 8, 15360, 1690, ImmutableSet.of(Architecture.X86_64))));
return Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of(new StubSize("small", 1, 1740, 160),
new StubSize("medium", 4, 7680, 850), new StubSize("large", 8, 15360, 1690)));
}
private static class StubSize extends org.jclouds.compute.domain.internal.SizeImpl {
/** The serialVersionUID */
private static final long serialVersionUID = -1842135761654973637L;
StubSize(String type, int cores, int ram, int disk, Iterable<Architecture> supportedArchitectures) {
super(type, type, type, null, null, ImmutableMap.<String, String> of(), cores, ram, disk,
architectureIn(supportedArchitectures));
StubSize(String type, int cores, int ram, int disk) {
super(type, type, type, null, null, ImmutableMap.<String, String> of(), cores, ram, disk, any());
}
}

View File

@ -37,7 +37,6 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import org.easymock.IArgumentMatcher;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
@ -87,10 +86,10 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
@Test
public void testTemplateBuilder() {
Template defaultTemplate = client.templateBuilder().build();
assertEquals(defaultTemplate.getImage().getArchitecture(), Architecture.X86_64);
assertEquals(defaultTemplate.getImage().getOsFamily(), OsFamily.UBUNTU);
assertEquals(defaultTemplate.getImage().getOperatingSystem().getArch(), "X86_64");
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
assertEquals(defaultTemplate.getLocation().getId(), provider + "zone");
assertEquals(defaultTemplate.getSize().getCores(), 4.0d);
assertEquals(defaultTemplate.getSize().getCores(), 1.0d);
}
@Override
@ -112,17 +111,17 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
expect(open.apply(new IPSocket("144.175.1.4", 22))).andReturn(true);
expect(
factory.create(eq(new IPSocket("144.175.1.1", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client1).atLeastOnce();
factory.create(eq(new IPSocket("144.175.1.1", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client1).atLeastOnce();
expect(
factory.create(eq(new IPSocket("144.175.1.2", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client2).atLeastOnce();
factory.create(eq(new IPSocket("144.175.1.2", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client2).atLeastOnce();
expect(
factory.create(eq(new IPSocket("144.175.1.3", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client3).atLeastOnce();
factory.create(eq(new IPSocket("144.175.1.3", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client3).atLeastOnce();
expect(
factory.create(eq(new IPSocket("144.175.1.4", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client4).atLeastOnce();
factory.create(eq(new IPSocket("144.175.1.4", 22)), eq("root"), aryEq(keyPair.get("private")
.getBytes()))).andReturn(client4).atLeastOnce();
helloAndJava(client1);
helloAndJava(client2);
@ -166,20 +165,20 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
SshClient client4 = createMock(SshClient.class);
expect(factory.create(new IPSocket("144.175.1.1", 22), "root", "romeo")).andThrow(
new SshException("Auth fail"));
new SshException("Auth fail"));
expect(factory.create(new IPSocket("144.175.1.1", 22), "root", "password1")).andReturn(client1)
.atLeastOnce();
.atLeastOnce();
client1.connect();
runScript(client1, "computeserv", 1);
client1.disconnect();
expect(factory.create(new IPSocket("144.175.1.2", 22), "root", "password2")).andReturn(client2)
.atLeastOnce();
.atLeastOnce();
expect(factory.create(new IPSocket("144.175.1.3", 22), "root", "password3")).andReturn(client3)
.atLeastOnce();
.atLeastOnce();
expect(factory.create(new IPSocket("144.175.1.4", 22), "root", "password4")).andReturn(client4)
.atLeastOnce();
.atLeastOnce();
runScriptAndInstallSsh(client2, "runscript", 2);
runScriptAndInstallSsh(client3, "runscript", 3);
@ -243,9 +242,9 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
public static String initScript(String scriptName, String script) {
return new InitBuilder(scriptName, "/tmp/" + scriptName, "/tmp/" + scriptName,
ImmutableMap.<String, String> of(), Iterables.toArray(Splitter.on("\n").split(
new String(checkNotNull(script, "script"))), String.class))
.build(org.jclouds.scriptbuilder.domain.OsFamily.UNIX);
ImmutableMap.<String, String> of(), Iterables.toArray(Splitter.on("\n").split(
new String(checkNotNull(script, "script"))), String.class))
.build(org.jclouds.scriptbuilder.domain.OsFamily.UNIX);
}
public static Payload payloadEq(String value) {
@ -256,7 +255,7 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
public void testAssignability() throws Exception {
@SuppressWarnings("unused")
RestContext<ConcurrentMap<Integer, StubNodeMetadata>, ConcurrentMap<Integer, StubNodeMetadata>> stubContext = new ComputeServiceContextFactory()
.createContext(provider, identity, credential).getProviderSpecificContext();
.createContext(provider, identity, credential).getProviderSpecificContext();
}
private static class PayloadEquals implements IArgumentMatcher, Serializable {
@ -306,7 +305,7 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
return false;
PayloadEquals other = (PayloadEquals) o;
return this.expected == null && other.expected == null || this.expected != null
&& this.expected.equals(other.expected);
&& this.expected.equals(other.expected);
}
@Override

View File

@ -17,7 +17,7 @@
* ====================================================================
*/
package org.jclouds.compute.internal;
package org.jclouds.compute.domain.internal;
import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.createMock;
@ -32,10 +32,10 @@ import javax.inject.Provider;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.domain.internal.SizeImpl;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.domain.Location;
@ -58,43 +58,55 @@ public class TemplateBuilderImplTest {
public void tesResolveImages() {
Location defaultLocation = createMock(Location.class);
Image image = createMock(Image.class);
OperatingSystem os = createMock(OperatingSystem.class);
Image image2 = createMock(Image.class);
OperatingSystem os2 = createMock(OperatingSystem.class);
Size size = new SizeImpl("sizeId", null, "sizeId", defaultLocation, null, ImmutableMap.<String, String> of(),
1.0, 0, 0, ImagePredicates.any());
1.0, 0, 0, ImagePredicates.any());
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(defaultLocation));
.<Location> of(defaultLocation));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of(
image, image2));
image, image2));
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of(size));
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class);
TemplateBuilder defaultTemplate = createMock(TemplateBuilder.class);
expect(image.getName()).andReturn("image");
expect(image2.getName()).andReturn("image");
expect(image.getVersion()).andReturn("version");
expect(image2.getVersion()).andReturn("version");
expect(image.getOsDescription()).andReturn("osDescription");
expect(image2.getOsDescription()).andReturn("osDescription");
expect(image.getArchitecture()).andReturn(Architecture.X86_64).atLeastOnce();
expect(image2.getArchitecture()).andReturn(Architecture.X86_64).atLeastOnce();
expect(image.getName()).andReturn("imageName");
expect(image2.getName()).andReturn("imageName");
expect(image.getVersion()).andReturn("imageVersion");
expect(image2.getVersion()).andReturn("imageVersion");
expect(image.getOperatingSystem()).andReturn(os).atLeastOnce();
expect(image2.getOperatingSystem()).andReturn(os2).atLeastOnce();
expect(os.getName()).andReturn("osName");
expect(os2.getName()).andReturn("osName");
expect(os.getVersion()).andReturn("osVersion");
expect(os2.getVersion()).andReturn("osVersion");
expect(os.getDescription()).andReturn("osDescription");
expect(os2.getDescription()).andReturn("osDescription");
expect(os.getArch()).andReturn("X86_64").atLeastOnce();
expect(os2.getArch()).andReturn("X86_64").atLeastOnce();
replay(image);
replay(image2);
replay(os);
replay(os2);
replay(defaultTemplate);
replay(defaultLocation);
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
assertEquals(template.resolveImage(size,images.get()), image2);
assertEquals(template.resolveImage(size, images.get()), image2);
verify(image);
verify(image2);
verify(os);
verify(os2);
verify(defaultTemplate);
verify(defaultLocation);
verify(optionsProvider);
@ -107,14 +119,16 @@ public class TemplateBuilderImplTest {
Location defaultLocation = createMock(Location.class);
Image image = createMock(Image.class);
Image image2 = createMock(Image.class);
OperatingSystem os = createMock(OperatingSystem.class);
OperatingSystem os2 = createMock(OperatingSystem.class);
Size size = new SizeImpl("sizeId", null, "sizeId", defaultLocation, null, ImmutableMap.<String, String> of(),
1.0, 0, 0, ImagePredicates.any());
1.0, 0, 0, ImagePredicates.any());
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(defaultLocation));
.<Location> of(defaultLocation));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of(
image, image2));
image, image2));
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of(size));
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class);
@ -127,21 +141,27 @@ public class TemplateBuilderImplTest {
expect(image2.getLocation()).andReturn(defaultLocation).atLeastOnce();
expect(image2.getArchitecture()).andReturn(Architecture.X86_64).atLeastOnce();
expect(image.getOperatingSystem()).andReturn(os).atLeastOnce();
expect(image2.getOperatingSystem()).andReturn(os2).atLeastOnce();
replay(image);
replay(image2);
replay(os);
replay(os2);
replay(defaultTemplate);
replay(defaultLocation);
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
assertEquals(template.smallest().architecture(Architecture.X86_32).build().getImage(), image);
verify(image);
verify(image2);
verify(os);
verify(os2);
verify(defaultTemplate);
verify(defaultLocation);
verify(optionsProvider);
@ -153,13 +173,15 @@ public class TemplateBuilderImplTest {
public void testSizeWithImageIdPredicateOnlyAcceptsImage() {
Location defaultLocation = createMock(Location.class);
Image image = createMock(Image.class);
OperatingSystem os = createMock(OperatingSystem.class);
Size size = new SizeImpl("sizeId", null, "sizeId", defaultLocation, null, ImmutableMap.<String, String> of(), 0,
0, 0, ImagePredicates.idEquals("imageId"));
0, 0, ImagePredicates.idEquals("imageId"));
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(defaultLocation));
.<Location> of(defaultLocation));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet
.<Image> of(image));
.<Image> of(image));
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of(size));
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class);
@ -168,25 +190,33 @@ public class TemplateBuilderImplTest {
expect(optionsProvider.get()).andReturn(new TemplateOptions());
expect(image.getId()).andReturn("imageId").atLeastOnce();
expect(image.getLocation()).andReturn(defaultLocation).atLeastOnce();
expect(image.getOsFamily()).andReturn(null).atLeastOnce();
expect(image.getName()).andReturn(null).atLeastOnce();
expect(image.getDescription()).andReturn(null).atLeastOnce();
expect(image.getOsDescription()).andReturn(null).atLeastOnce();
expect(image.getVersion()).andReturn(null).atLeastOnce();
expect(image.getArchitecture()).andReturn(null).atLeastOnce();
expect(image.getOperatingSystem()).andReturn(os).atLeastOnce();
expect(os.getName()).andReturn(null).atLeastOnce();
expect(os.getVersion()).andReturn(null).atLeastOnce();
expect(os.getFamily()).andReturn(null).atLeastOnce();
expect(os.getDescription()).andReturn(null).atLeastOnce();
expect(os.getArch()).andReturn(null).atLeastOnce();
expect(os.is64Bit()).andReturn(false).atLeastOnce();
replay(image);
replay(os);
replay(defaultTemplate);
replay(defaultLocation);
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
template.imageId("imageId").build();
verify(image);
verify(os);
verify(defaultTemplate);
verify(defaultLocation);
verify(optionsProvider);
@ -198,13 +228,15 @@ public class TemplateBuilderImplTest {
public void testSizeWithImageIdPredicateOnlyDoesntImage() {
Location defaultLocation = createMock(Location.class);
Image image = createMock(Image.class);
OperatingSystem os = createMock(OperatingSystem.class);
Size size = new SizeImpl("sizeId", null, "sizeId", defaultLocation, null, ImmutableMap.<String, String> of(), 0,
0, 0, ImagePredicates.idEquals("imageId"));
0, 0, ImagePredicates.idEquals("imageId"));
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of(defaultLocation));
.<Location> of(defaultLocation));
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet
.<Image> of(image));
.<Image> of(image));
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of(size));
Provider<TemplateOptions> optionsProvider = createMock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class);
@ -213,26 +245,34 @@ public class TemplateBuilderImplTest {
expect(optionsProvider.get()).andReturn(new TemplateOptions());
expect(image.getId()).andReturn("notImageId").atLeastOnce();
expect(image.getLocation()).andReturn(defaultLocation).atLeastOnce();
expect(image.getOsFamily()).andReturn(null).atLeastOnce();
expect(image.getOperatingSystem()).andReturn(os).atLeastOnce();
expect(image.getName()).andReturn(null).atLeastOnce();
expect(image.getDescription()).andReturn(null).atLeastOnce();
expect(image.getOsDescription()).andReturn(null).atLeastOnce();
expect(image.getVersion()).andReturn(null).atLeastOnce();
expect(image.getArchitecture()).andReturn(null).atLeastOnce();
expect(os.getName()).andReturn(null).atLeastOnce();
expect(os.getVersion()).andReturn(null).atLeastOnce();
expect(os.getFamily()).andReturn(null).atLeastOnce();
expect(os.getDescription()).andReturn(null).atLeastOnce();
expect(os.getArch()).andReturn(null).atLeastOnce();
expect(os.is64Bit()).andReturn(false).atLeastOnce();
replay(image);
replay(os);
replay(defaultTemplate);
replay(defaultLocation);
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(image, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(image, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
try {
template.imageId("notImageId").build();
assert false;
} catch (NoSuchElementException e) {
verify(image);
verify(os);
verify(defaultTemplate);
verify(defaultLocation);
verify(optionsProvider);
@ -247,7 +287,7 @@ public class TemplateBuilderImplTest {
TemplateOptions from = provideTemplateOptions();
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
Location defaultLocation = createMock(Location.class);
@ -265,8 +305,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
template.options(options).build();
@ -281,7 +321,7 @@ public class TemplateBuilderImplTest {
public void testNothingUsesDefaultTemplateBuilder() {
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
@ -298,8 +338,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
template.build();
@ -309,11 +349,11 @@ public class TemplateBuilderImplTest {
verify(templateBuilderProvider);
}
protected TemplateBuilderImpl createTemplateBuilder( Image knownImage, Supplier<Set<? extends Location>> locations,
Supplier<Set<? extends Image>> images, Supplier<Set<? extends Size>> sizes, Location defaultLocation,
Provider<TemplateOptions> optionsProvider, Provider<TemplateBuilder> templateBuilderProvider) {
protected TemplateBuilderImpl createTemplateBuilder(Image knownImage, Supplier<Set<? extends Location>> locations,
Supplier<Set<? extends Image>> images, Supplier<Set<? extends Size>> sizes, Location defaultLocation,
Provider<TemplateOptions> optionsProvider, Provider<TemplateBuilder> templateBuilderProvider) {
TemplateBuilderImpl template = new TemplateBuilderImpl(locations, images, sizes, Suppliers
.ofInstance(defaultLocation), optionsProvider, templateBuilderProvider);
.ofInstance(defaultLocation), optionsProvider, templateBuilderProvider);
return template;
}
@ -321,7 +361,7 @@ public class TemplateBuilderImplTest {
@Test
public void testSuppliedLocationWithNoOptions() {
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
Location defaultLocation = createMock(Location.class);
@ -334,8 +374,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
try {
template.imageId("foo").locationId("location").build();
@ -356,7 +396,7 @@ public class TemplateBuilderImplTest {
TemplateOptions from = provideTemplateOptions();
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
Location defaultLocation = createMock(Location.class);
@ -369,8 +409,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
try {
template.imageId("foo").options(provideTemplateOptions()).locationId("location").build();
@ -388,7 +428,7 @@ public class TemplateBuilderImplTest {
@Test
public void testDefaultLocationWithNoOptionsNoSuchElement() {
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
Location defaultLocation = createMock(Location.class);
@ -403,8 +443,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
try {
template.imageId("region/ami").build();
@ -427,7 +467,7 @@ public class TemplateBuilderImplTest {
@Test
public void testDefaultLocationWithOptions() {
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
Location defaultLocation = createMock(Location.class);
@ -443,8 +483,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
try {
template.imageId("region/ami").options(provideTemplateOptions()).build();
@ -462,7 +502,7 @@ public class TemplateBuilderImplTest {
@Test
public void testImageIdNullsEverythingElse() {
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.<Location> of());
.<Location> of());
Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.<Image> of());
Supplier<Set<? extends Size>> sizes = Suppliers.<Set<? extends Size>> ofInstance(ImmutableSet.<Size> of());
Location defaultLocation = createMock(Location.class);
@ -473,8 +513,8 @@ public class TemplateBuilderImplTest {
replay(optionsProvider);
replay(templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation, optionsProvider,
templateBuilderProvider);
TemplateBuilderImpl template = createTemplateBuilder(null, locations, images, sizes, defaultLocation,
optionsProvider, templateBuilderProvider);
template.architecture(Architecture.X86_32);
template.imageDescriptionMatches("imageDescriptionMatches");
@ -488,7 +528,7 @@ public class TemplateBuilderImplTest {
assertEquals(template.imageName, "imageNameMatches");
assertEquals(template.imageVersion, "imageVersionMatches");
assertEquals(template.osDescription, "osDescriptionMatches");
assertEquals(template.os, OsFamily.CENTOS);
assertEquals(template.osFamily, OsFamily.CENTOS);
assertEquals(template.imageId, null);
template.imageId("myid");
@ -497,7 +537,7 @@ public class TemplateBuilderImplTest {
assertEquals(template.imageName, null);
assertEquals(template.imageVersion, null);
assertEquals(template.osDescription, null);
assertEquals(template.os, null);
assertEquals(template.osFamily, null);
assertEquals(template.imageId, "myid");
verify(defaultLocation);

View File

@ -0,0 +1,127 @@
/**
*
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed 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.compute.predicates;
import static org.jclouds.compute.predicates.OperatingSystemPredicates.supportsApt;
import static org.jclouds.compute.predicates.OperatingSystemPredicates.supportsYum;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.os.CIMOperatingSystem;
import org.jclouds.compute.domain.os.CIMOperatingSystem.OSType;
import org.testng.annotations.Test;
/**
* Tests possible uses of OperatingSystemPredicates
*
* @author Adrian Cole
*/
@Test
public class OperatingSystemPredicatesTest {
public void testCIMCENTOSDoesntSupportApt() {
assert !supportsApt().apply(new CIMOperatingSystem(OSType.CENTOS, null, null, "description"));
assert !supportsApt().apply(new CIMOperatingSystem(OSType.CENTOS_64, null, null, "description"));
}
public void testCIMRHELDoesntSupportApt() {
assert !supportsApt().apply(new CIMOperatingSystem(OSType.RHEL, null, null, "description"));
assert !supportsApt().apply(new CIMOperatingSystem(OSType.RHEL_64, null, null, "description"));
}
public void testCIMDEBIANSupportsApt() {
assert supportsApt().apply(new CIMOperatingSystem(OSType.DEBIAN, null, null, "description"));
assert supportsApt().apply(new CIMOperatingSystem(OSType.DEBIAN_64, null, null, "description"));
}
public void testCIMUBUNTUSupportsApt() {
assert supportsApt().apply(new CIMOperatingSystem(OSType.UBUNTU, null, null, "description"));
assert supportsApt().apply(new CIMOperatingSystem(OSType.UBUNTU_64, null, null, "description"));
}
public void testUbuntuNameSupportsApt() {
assert supportsApt().apply(new OperatingSystem(null, "Ubuntu", null, null, "description", false));
}
public void testCIMCENTOSSupportsYum() {
assert supportsYum().apply(new CIMOperatingSystem(OSType.CENTOS, null, null, "description"));
assert supportsYum().apply(new CIMOperatingSystem(OSType.CENTOS_64, null, null, "description"));
}
public void testCIMRHELSupportsYum() {
assert supportsYum().apply(new CIMOperatingSystem(OSType.RHEL, null, null, "description"));
assert supportsYum().apply(new CIMOperatingSystem(OSType.RHEL_64, null, null, "description"));
}
public void testCIMDEBIANDoesntSupportYum() {
assert !supportsYum().apply(new CIMOperatingSystem(OSType.DEBIAN, null, null, "description"));
assert !supportsYum().apply(new CIMOperatingSystem(OSType.DEBIAN_64, null, null, "description"));
}
public void testCIMUBUNTUDoesntSupportYum() {
assert !supportsYum().apply(new CIMOperatingSystem(OSType.UBUNTU, null, null, "description"));
assert !supportsYum().apply(new CIMOperatingSystem(OSType.UBUNTU_64, null, null, "description"));
}
public void testCentosTypeSupportsYum() {
assert supportsYum().apply(new OperatingSystem(OsFamily.CENTOS, null, null, null, "description", false));
}
public void testRhelTypeSupportsYum() {
assert supportsYum().apply(new OperatingSystem(OsFamily.RHEL, null, null, null, "description", false));
}
public void testFedoraTypeSupportsYum() {
assert supportsYum().apply(new OperatingSystem(OsFamily.FEDORA, null, null, null, "description", false));
}
public void testCentosNameSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, "Centos", null, null, "description", false));
}
public void testRhelNameSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, "RHEL", null, null, "description", false));
}
public void testFedoraNameSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, "Fedora", null, null, "description", false));
}
public void testRedHatEnterpriseLinuxNameSupportsYum() {
assert supportsYum().apply(
new OperatingSystem(null, "Red Hat Enterprise Linux", null, null, "description", false));
}
public void testCentosDescriptionSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, null, null, null, "Centos", false));
}
public void testRhelDescriptionSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, null, null, null, "RHEL", false));
}
public void testFedoraDescriptionSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, null, null, null, "Fedora", false));
}
public void testRedHatEnterpriseLinuxDescriptionSupportsYum() {
assert supportsYum().apply(new OperatingSystem(null, null, null, null, "Red Hat Enterprise Linux", false));
}
}

View File

@ -19,19 +19,17 @@
package org.jclouds.gogrid.compute.suppliers;
import static org.jclouds.compute.predicates.ImagePredicates.architectureIn;
import static org.jclouds.compute.predicates.ImagePredicates.any;
import java.util.Set;
import javax.inject.Singleton;
import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.Size;
import org.jclouds.compute.domain.internal.SizeImpl;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
/**
@ -45,16 +43,11 @@ public class GoGridSizeSupplier implements Supplier<Set<? extends Size>> {
public Set<? extends Size> get() {
final Set<Size> sizes = Sets.newHashSet();
sizes.add(new SizeImpl("1", "1", "1", null, null, ImmutableMap.<String, String> of(), 0.5, 512, 30,
architectureIn(ImmutableSet.<Architecture> of(Architecture.X86_32, Architecture.X86_64))));
sizes.add(new SizeImpl("2", "2", "2", null, null, ImmutableMap.<String, String> of(), 1, 1024, 60,
architectureIn(ImmutableSet.<Architecture> of(Architecture.X86_32, Architecture.X86_64))));
sizes.add(new SizeImpl("3", "3", "3", null, null, ImmutableMap.<String, String> of(), 2, 2048, 120,
architectureIn(ImmutableSet.<Architecture> of(Architecture.X86_32, Architecture.X86_64))));
sizes.add(new SizeImpl("4", "4", "4", null, null, ImmutableMap.<String, String> of(), 4, 4096, 240,
architectureIn(ImmutableSet.<Architecture> of(Architecture.X86_32, Architecture.X86_64))));
sizes.add(new SizeImpl("5", "5", "5", null, null, ImmutableMap.<String, String> of(), 8, 8192, 480,
architectureIn(ImmutableSet.<Architecture> of(Architecture.X86_32, Architecture.X86_64))));
sizes.add(new SizeImpl("1", "1", "1", null, null, ImmutableMap.<String, String> of(), 0.5, 512, 30, any()));
sizes.add(new SizeImpl("2", "2", "2", null, null, ImmutableMap.<String, String> of(), 1, 1024, 60, any()));
sizes.add(new SizeImpl("3", "3", "3", null, null, ImmutableMap.<String, String> of(), 2, 2048, 120, any()));
sizes.add(new SizeImpl("4", "4", "4", null, null, ImmutableMap.<String, String> of(), 4, 4096, 240, any()));
sizes.add(new SizeImpl("5", "5", "5", null, null, ImmutableMap.<String, String> of(), 8, 8192, 480, any()));
return sizes;
}
}