mirror of https://github.com/apache/jclouds.git
Merge pull request #674 from aledsage/ec2-Windows-ImageOsParsing
EC2ImageParser checks platform==windows for OsFamily
This commit is contained in:
commit
71869a6bb3
|
@ -32,10 +32,10 @@ import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.collect.Memoized;
|
import org.jclouds.collect.Memoized;
|
||||||
import org.jclouds.compute.domain.Image;
|
import org.jclouds.compute.domain.Image;
|
||||||
|
import org.jclouds.compute.domain.Image.Status;
|
||||||
import org.jclouds.compute.domain.ImageBuilder;
|
import org.jclouds.compute.domain.ImageBuilder;
|
||||||
import org.jclouds.compute.domain.OperatingSystem;
|
import org.jclouds.compute.domain.OperatingSystem;
|
||||||
import org.jclouds.compute.domain.OsFamily;
|
import org.jclouds.compute.domain.OsFamily;
|
||||||
import org.jclouds.compute.domain.Image.Status;
|
|
||||||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||||
import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
|
import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
|
||||||
import org.jclouds.compute.util.ComputeServiceUtils;
|
import org.jclouds.compute.util.ComputeServiceUtils;
|
||||||
|
@ -100,7 +100,7 @@ public class EC2ImageParser implements Function<org.jclouds.ec2.domain.Image, Im
|
||||||
|
|
||||||
OperatingSystem.Builder osBuilder = OperatingSystem.builder();
|
OperatingSystem.Builder osBuilder = OperatingSystem.builder();
|
||||||
osBuilder.is64Bit(from.getArchitecture() == Architecture.X86_64);
|
osBuilder.is64Bit(from.getArchitecture() == Architecture.X86_64);
|
||||||
OsFamily family = parseOsFamilyOrUnrecognized(from.getImageLocation());
|
OsFamily family = parseOsFamily(from);
|
||||||
osBuilder.family(family);
|
osBuilder.family(family);
|
||||||
osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, from.getImageLocation(),
|
osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, from.getImageLocation(),
|
||||||
osVersionMap));
|
osVersionMap));
|
||||||
|
@ -131,4 +131,20 @@ public class EC2ImageParser implements Function<org.jclouds.ec2.domain.Image, Im
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First treats windows as a special case: check if platform==windows.
|
||||||
|
* Then tries matching based on the image name.
|
||||||
|
* And then falls back to checking other types of platform.
|
||||||
|
*/
|
||||||
|
private OsFamily parseOsFamily(org.jclouds.ec2.domain.Image from) {
|
||||||
|
if (from.getPlatform() != null && from.getPlatform().equalsIgnoreCase("windows")) {
|
||||||
|
return OsFamily.WINDOWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
OsFamily family = parseOsFamilyOrUnrecognized(from.getImageLocation());
|
||||||
|
if (family == OsFamily.UNRECOGNIZED && from.getPlatform() != null) {
|
||||||
|
family = parseOsFamilyOrUnrecognized(from.getPlatform());
|
||||||
|
}
|
||||||
|
return family;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,10 +24,10 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.jclouds.compute.config.BaseComputeServiceContextModule;
|
import org.jclouds.compute.config.BaseComputeServiceContextModule;
|
||||||
|
import org.jclouds.compute.domain.Image.Status;
|
||||||
import org.jclouds.compute.domain.ImageBuilder;
|
import org.jclouds.compute.domain.ImageBuilder;
|
||||||
import org.jclouds.compute.domain.OperatingSystem;
|
import org.jclouds.compute.domain.OperatingSystem;
|
||||||
import org.jclouds.compute.domain.OsFamily;
|
import org.jclouds.compute.domain.OsFamily;
|
||||||
import org.jclouds.compute.domain.Image.Status;
|
|
||||||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||||
import org.jclouds.domain.Location;
|
import org.jclouds.domain.Location;
|
||||||
import org.jclouds.domain.LocationBuilder;
|
import org.jclouds.domain.LocationBuilder;
|
||||||
|
@ -64,22 +64,46 @@ public class EC2ImageParserTest {
|
||||||
assertEquals(image.getBackendStatus(), "available");
|
assertEquals(image.getBackendStatus(), "available");
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(Iterables.get(result, 0), new ImageBuilder().operatingSystem(
|
assertImageEquals(Iterables.get(result, 0), new ImageBuilder().operatingSystem(
|
||||||
new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).arch("paravirtual").version("").description(
|
new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).arch("paravirtual").version("").description(
|
||||||
"137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build()).description("Amazon")
|
"137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build()).description("Amazon")
|
||||||
.defaultCredentials(new LoginCredentials("ec2-user", false)).id("us-east-1/ami-82e4b5c7").name(
|
.defaultCredentials(new LoginCredentials("ec2-user", false)).id("us-east-1/ami-82e4b5c7").name(
|
||||||
"amzn-ami-0.9.7-beta.i386-ebs").providerId("ami-82e4b5c7").location(defaultLocation)
|
"amzn-ami-0.9.7-beta.i386-ebs").providerId("ami-82e4b5c7").location(defaultLocation)
|
||||||
.userMetadata(ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).status(
|
.userMetadata(ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).status(
|
||||||
Status.AVAILABLE).build());
|
Status.AVAILABLE).backendStatus("available").build());
|
||||||
|
|
||||||
assertEquals(Iterables.get(result, 3), new ImageBuilder().operatingSystem(
|
assertImageEquals(Iterables.get(result, 3), new ImageBuilder().operatingSystem(
|
||||||
new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).arch("paravirtual").version("").description(
|
new OperatingSystem.Builder().family(OsFamily.UNRECOGNIZED).arch("paravirtual").version("").description(
|
||||||
"amzn-ami-us-west-1/amzn-ami-0.9.7-beta.x86_64.manifest.xml").is64Bit(true).build())
|
"amzn-ami-us-west-1/amzn-ami-0.9.7-beta.x86_64.manifest.xml").is64Bit(true).build())
|
||||||
.description("Amazon Linux AMI x86_64 S3").defaultCredentials(new LoginCredentials("ec2-user", false))
|
.description("Amazon Linux AMI x86_64 S3").defaultCredentials(new LoginCredentials("ec2-user", false))
|
||||||
.id("us-east-1/ami-f2e4b5b7").providerId("ami-f2e4b5b7").name("amzn-ami-0.9.7-beta.x86_64-S3").location(
|
.id("us-east-1/ami-f2e4b5b7").providerId("ami-f2e4b5b7").name("amzn-ami-0.9.7-beta.x86_64-S3").location(
|
||||||
defaultLocation)
|
defaultLocation)
|
||||||
.userMetadata(ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).status(
|
.userMetadata(ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).status(
|
||||||
Status.AVAILABLE).build());
|
Status.AVAILABLE).backendStatus("available").build());
|
||||||
|
|
||||||
|
assertImageEquals(Iterables.get(result, 4), new ImageBuilder().operatingSystem(
|
||||||
|
new OperatingSystem.Builder().family(OsFamily.WINDOWS).arch("hvm").version("2008").description(
|
||||||
|
"amazon/NameGivesNoClue_Server-2008-R2_SP1-Language_Packs-64Bit-Base-2012.05.10")
|
||||||
|
.is64Bit(true).build())
|
||||||
|
.description("Microsoft Windows Server 2008 R2 SP1 Datacenter 64-bit Multi-language AMI provided by Amazon")
|
||||||
|
.defaultCredentials(new LoginCredentials("root", false))
|
||||||
|
.id("us-east-1/ami-85457ff1").providerId("ami-85457ff1").name("NameGivesNoClue_Server-2008-R2_SP1-Language_Packs-64Bit-Base-2012.05.10")
|
||||||
|
.location(defaultLocation)
|
||||||
|
.userMetadata(ImmutableMap.of("owner", "801119661308", "rootDeviceType", "ebs"))
|
||||||
|
.status(Status.AVAILABLE).backendStatus("available").build());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertImageEquals(org.jclouds.compute.domain.Image actual, org.jclouds.compute.domain.Image expected) {
|
||||||
|
// Note that ImageImpl.equals does not compare operating system etc; there's an explicit comment:
|
||||||
|
// equals from super is sufficient to establish identity equivalence
|
||||||
|
assertEquals(actual, expected);
|
||||||
|
assertEquals(actual.getOperatingSystem(), expected.getOperatingSystem());
|
||||||
|
assertEquals(actual.getStatus(), expected.getStatus());
|
||||||
|
assertEquals(actual.getBackendStatus(), expected.getBackendStatus());
|
||||||
|
assertEquals(actual.getVersion(), expected.getVersion());
|
||||||
|
assertEquals(actual.getDescription(), expected.getDescription());
|
||||||
|
assertEquals(actual.getDefaultCredentials(), expected.getDefaultCredentials());
|
||||||
}
|
}
|
||||||
|
|
||||||
static Location defaultLocation = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1").description(
|
static Location defaultLocation = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1").description(
|
||||||
|
|
|
@ -82,5 +82,32 @@
|
||||||
<blockDeviceMapping/>
|
<blockDeviceMapping/>
|
||||||
<virtualizationType>paravirtual</virtualizationType>
|
<virtualizationType>paravirtual</virtualizationType>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<imageId>ami-85457ff1</imageId>
|
||||||
|
<imageLocation>amazon/NameGivesNoClue_Server-2008-R2_SP1-Language_Packs-64Bit-Base-2012.05.10</imageLocation>
|
||||||
|
<imageState>available</imageState>
|
||||||
|
<imageOwnerId>801119661308</imageOwnerId>
|
||||||
|
<isPublic>true</isPublic>
|
||||||
|
<architecture>x86_64</architecture>
|
||||||
|
<imageType>machine</imageType>
|
||||||
|
<platform>windows</platform>
|
||||||
|
<imageOwnerAlias>amazon</imageOwnerAlias>
|
||||||
|
<name>NameGivesNoClue_Server-2008-R2_SP1-Language_Packs-64Bit-Base-2012.05.10</name>
|
||||||
|
<description>Microsoft Windows Server 2008 R2 SP1 Datacenter 64-bit Multi-language AMI provided by Amazon</description>
|
||||||
|
<rootDeviceType>ebs</rootDeviceType>
|
||||||
|
<rootDeviceName>/dev/sda1</rootDeviceName>
|
||||||
|
<blockDeviceMapping>
|
||||||
|
<item>
|
||||||
|
<deviceName>/dev/sda1</deviceName>
|
||||||
|
<ebs>
|
||||||
|
<snapshotId>snap-84a433ef</snapshotId>
|
||||||
|
<volumeSize>30</volumeSize>
|
||||||
|
<deleteOnTermination>true</deleteOnTermination>
|
||||||
|
</ebs>
|
||||||
|
</item>
|
||||||
|
</blockDeviceMapping>
|
||||||
|
<virtualizationType>hvm</virtualizationType>
|
||||||
|
<hypervisor>xen</hypervisor>
|
||||||
|
</item>
|
||||||
</imagesSet>
|
</imagesSet>
|
||||||
</DescribeImagesResponse>
|
</DescribeImagesResponse>
|
||||||
|
|
Loading…
Reference in New Issue