mirror of https://github.com/apache/jclouds.git
Issue 333: added OperatingSystem to Image
This commit is contained in:
parent
462a6e5617
commit
0394c29394
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ 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);
|
||||
}
|
||||
|
||||
|
@ -151,8 +151,8 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
|
|||
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));
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
@ -95,26 +96,35 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
.<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);
|
||||
|
@ -125,6 +135,7 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
assertEquals(template.imageId("region/ami").build().getImage(), knownImage);
|
||||
|
||||
verify(knownImage);
|
||||
verify(os);
|
||||
verify(defaultOptions);
|
||||
verify(optionsProvider);
|
||||
verify(templateBuilderProvider);
|
||||
|
@ -139,8 +150,8 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
.<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);
|
||||
|
@ -177,8 +188,8 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
.<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);
|
||||
|
|
|
@ -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]))))
|
||||
|
|
|
@ -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 {
|
||||
|
||||
/**
|
||||
|
|
|
@ -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,18 +51,28 @@ 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();
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 + "]";
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
@ -107,8 +117,7 @@ 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) {
|
||||
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
|
||||
|
@ -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) {
|
||||
|
@ -274,9 +342,14 @@ public class TemplateBuilderImpl implements TemplateBuilder {
|
|||
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.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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -630,8 +750,15 @@ public class TemplateBuilderImpl implements TemplateBuilder {
|
|||
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 + "]";
|
||||
+ ", 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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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() + "]";
|
||||
}
|
||||
}
|
|
@ -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()";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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()";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -373,18 +378,16 @@ public class StubComputeServiceContextModule extends BaseComputeServiceContextMo
|
|||
|
||||
@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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,7 +58,9 @@ 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());
|
||||
|
@ -72,29 +74,39 @@ public class TemplateBuilderImplTest {
|
|||
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);
|
||||
|
||||
verify(image);
|
||||
verify(image2);
|
||||
verify(os);
|
||||
verify(os2);
|
||||
verify(defaultTemplate);
|
||||
verify(defaultLocation);
|
||||
verify(optionsProvider);
|
||||
|
@ -107,6 +119,8 @@ 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());
|
||||
|
@ -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,6 +173,8 @@ 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"));
|
||||
|
||||
|
@ -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,6 +228,8 @@ 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"));
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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);
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue