@Override public boolean apply(Image image) { return image.getImageType() == ImageType.MACHINE; } }));
/** * 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; } }
@Override public Image apply(final org.jclouds.ec2.domain.Image from) { if (from.getImageType() != ImageType.MACHINE) { return null; builder.providerId(from.getId()); builder.id(from.getRegion() + "/" + from.getId()); builder.name(from.getName()); builder.description(from.getDescription() != null ? from.getDescription() : from.getImageLocation()); builder.userMetadata(ImmutableMap.<String, String> builder().put("owner", from.getImageOwnerId()).put( "rootDeviceType", from.getRootDeviceType().value()).put("virtualizationType", from.getVirtualizationType().value()).put("hypervisor", from.getHypervisor().value()).build()); osBuilder.is64Bit(from.getArchitecture() == Architecture.X86_64); OsFamily family = parseOsFamily(from); osBuilder.family(family); osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, from.getImageLocation(), osVersionMap)); osBuilder.description(from.getImageLocation()); osBuilder.arch(from.getVirtualizationType().value()); logger.error("unknown region %s for image %s; not in %s", from.getRegion(), from.getId(), locations); builder.location(new LocationBuilder().scope(LocationScope.REGION).id(from.getRegion()).description( from.getRegion()).parent(defaultLocation.get()).build()); builder.status(toPortableImageStatus.get(from.getImageState())); builder.backendStatus(from.getRawState()); return builder.build();
@Test public void testCreateAndListEBSBackedImage() throws Exception { Snapshot snapshot = createSnapshot(); // List of images before... int sizeBefore = client.describeImagesInRegion(regionId).size(); // Register a new image... ebsBackedImageId = client.registerUnixImageBackedByEbsInRegion(regionId, ebsBackedImageName, snapshot.getId(), addNewBlockDevice("/dev/sda2", "myvirtual", 1).withDescription("adrian")); imagesToDeregister.add(ebsBackedImageId); final Image ebsBackedImage = getOnlyElement(client.describeImagesInRegion(regionId, imageIds(ebsBackedImageId))); assertEquals(ebsBackedImage.getName(), ebsBackedImageName); assertEquals(ebsBackedImage.getImageType(), ImageType.MACHINE); assertEquals(ebsBackedImage.getRootDeviceType(), RootDeviceType.EBS); assertEquals(ebsBackedImage.getRootDeviceName(), "/dev/sda1"); assertEquals(ebsBackedImage.getDescription(), "adrian"); assertEquals( ebsBackedImage.getEbsBlockDevices().entrySet(), ImmutableMap.of("/dev/sda1", new Image.EbsBlockDevice(snapshot.getId(), snapshot.getVolumeSize(), true), "/dev/sda2", new Image.EbsBlockDevice(null, 1, false)).entrySet()); // List of images after - should be one larger than before int after = client.describeImagesInRegion(regionId).size(); assertEquals(after, sizeBefore + 1); }
public void testDiabloWithIncorrectDisplayNameField() { Set<Image> contents = ImmutableSet.of(new Image("us-east-1", Architecture.X86_64, "CentOS 6.2 Server 64-bit 20120125", "", "ami-0000054e", "local (CentOS 6.2 Server 64-bit 20120125)", "", ImageState.AVAILABLE, "available", ImageType.MACHINE, true, Sets.<String> newHashSet(), "aki-0000054c", null, "ari-0000054d", RootDeviceType.INSTANCE_STORE, "/dev/sda1", ImmutableMap.<String, EbsBlockDevice> of(), VirtualizationType.PARAVIRTUAL, Hypervisor.XEN)); Set<Image> result = parseImages("/describe_images_nova.xml"); assertEquals(result.toString(), contents.toString()); assertEquals(get(result, 0).getImageState(), ImageState.AVAILABLE); assertEquals(get(result, 0).getRawState(), "available"); }
@Override public void reviseParsedImage(org.jclouds.ec2.domain.Image from, ImageBuilder builder, OsFamily family, OperatingSystem.Builder osBuilder) { Image image = Image.builder().id(from.getId()).name(from.getName()).build(); OperatingSystem os = imageToOs.apply(image); osBuilder.description(os.getDescription()); osBuilder.family(os.getFamily()); osBuilder.name(os.getName()); osBuilder.is64Bit(os.is64Bit()); osBuilder.version(os.getVersion()); // arch is accurate already } }
private void verifyImage() { assertEquals(ebsImage.getImageType(), ImageType.MACHINE); assertEquals(ebsImage.getRootDeviceType(), RootDeviceType.EBS); assertEquals(ebsImage.getRootDeviceName(), "/dev/sda1"); assertEquals(ebsImage.getEbsBlockDevices().entrySet(), ImmutableMap.of("/dev/sda1", new Image.EbsBlockDevice(snapshot.getId(), VOLUME_SIZE, true)).entrySet()); }
Image image = Iterables.getOnlyElement(client.getAMIApi().get().describeImagesInRegion(snapshot.getRegion(), imageIds(IMAGE_ID))); String description = image.getDescription() == null ? "jclouds" : image.getDescription(); "ebsboot-" + image.getId(), snapshot.getId(), withKernelId(image.getKernelId()).withRamdisk(image.getRamdiskId()).withDescription(description) .asArchitecture(Architecture.I386)); try {
public void testTags() { Set<Image> contents = ImmutableSet.of(new Image("us-east-1", Architecture.I386, null, null, "ami-be3adfd7", "ec2-public-images/fedora-8-i386-base-v1.04.manifest.xml", "206029621532", ImageState.AVAILABLE, "available", ImageType.MACHINE, false, Sets.<String> newHashSet("9961934F"), "aki-4438dd2d", null, "ari-4538dd2c", RootDeviceType.INSTANCE_STORE, null, ImmutableMap.<String, EbsBlockDevice> of(), ImmutableMap.<String, String> of("Name", "Some machine name", "Second", "Second value"), VirtualizationType.PARAVIRTUAL, Hypervisor.XEN)); Set<Image> result = parseImages("/describe_images_tags.xml"); assertEquals(result.toString(), contents.toString()); assertEquals(get(result, 0).getImageState(), ImageState.AVAILABLE); assertEquals(get(result, 0).getRawState(), "available"); assertEquals(get(result, 0).getTags().get("Name"), "Some machine name"); assertEquals(get(result, 0).getTags().get("Second"), "Second value"); }
public void testEBS() { Set<Image> contents = ImmutableSet.of(new Image("us-east-1", Architecture.I386, "websrv_2009-12-10", "Web Server AMI", "ami-246f8d4d", "706093390852/websrv_2009-12-10", "706093390852", ImageState.AVAILABLE, "available", ImageType.MACHINE, true, Sets.<String> newHashSet(), null, "windows", null, RootDeviceType.EBS, "/dev/sda1", ImmutableMap.<String, EbsBlockDevice> of("/dev/sda1", new EbsBlockDevice("snap-d01272b9", 30, true, "standard", null, false), "xvdf", new EbsBlockDevice("snap-d31272ba", 250, false, "standard", null, false)), ImmutableMap.<String, String> of(), VirtualizationType.HVM, Hypervisor.XEN)); Set<Image> result = parseImages("/describe_images_ebs.xml"); assertEquals(result.toString(), contents.toString()); assertEquals(get(result, 0).getImageState(), ImageState.AVAILABLE); assertEquals(get(result, 0).getRawState(), "available"); assertEquals(get(result, 0).getEbsBlockDevices().get("/dev/sda1").getVolumeType(), "standard"); assertEquals(get(result, 0).getEbsBlockDevices().get("/dev/sda1").isEncrypted(), false); assertNull(get(result, 0).getEbsBlockDevices().get("/dev/sda1").getIops()); }
@Override public LoginCredentials apply(Object resourceToAuthenticate) { if (creds != null) return creds; Builder credentials = LoginCredentials.builder().user("root"); if (resourceToAuthenticate != null) { String owner = null; String name = null; if (resourceToAuthenticate instanceof Image) { owner = Image.class.cast(resourceToAuthenticate).getImageOwnerId(); name = Image.class.cast(resourceToAuthenticate).getName(); } else if (resourceToAuthenticate instanceof org.jclouds.compute.domain.Image) { owner = org.jclouds.compute.domain.Image.class.cast(resourceToAuthenticate).getUserMetadata().get("owner"); name = org.jclouds.compute.domain.Image.class.cast(resourceToAuthenticate).getUserMetadata().get("name"); } checkArgument(owner != null, "Resource must be an image (for EC2)"); // canonical/alestic images use the ubuntu user to login if (owner.matches("063491364108|099720109477")) { credentials.user("ubuntu"); // http://typepad.com/2010/09/introducing-amazon-linux-ami.html } else if (owner.equals("137112412989")) { credentials.user("ec2-user"); } else if (owner.equals("679593333241") && name != null && name.startsWith("CentOS")) { credentials.user("centos"); } } return credentials.build(); } }
private static Image newImage(String imageOwnerId, String imageName) { String region = "us-east-1"; Image.Architecture architecture = Image.Architecture.X86_64; String description = ""; String imageId = ""; Image.ImageState imageState = Image.ImageState.AVAILABLE; Image.ImageType imageType = Image.ImageType.MACHINE; boolean isPublic = true; Iterable<String> productCodes = ImmutableSet.of(); String kernelId = ""; String platform = ""; String ramdiskId = ""; RootDeviceType rootDeviceType = RootDeviceType.EBS; String rootDeviceName = ""; Map<String, Image.EbsBlockDevice> ebsBlockDevices = ImmutableMap.of(); Map<String, String> tags = ImmutableMap.of(); VirtualizationType virtualizationType = VirtualizationType.HVM; Hypervisor hypervisor = Hypervisor.XEN; Image from = new Image(region, architecture, imageName, description, imageId, imageOwnerId + "/" + imageName, imageOwnerId, imageState, "available", imageType, isPublic, productCodes, kernelId, platform, ramdiskId, rootDeviceType, rootDeviceName, ebsBlockDevices, tags, virtualizationType, hypervisor); return from; } }
@Override public void reviseParsedImage(org.jclouds.ec2.domain.Image from, ImageBuilder builder, OsFamily family, OperatingSystem.Builder osBuilder) { try { if (from.getImageLocation().startsWith("windows")) { family = OsFamily.WINDOWS; osBuilder.family(family); Matcher matcher = WINDOWS.matcher(from.getImageLocation()); if (matcher.find()) { osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, matcher.group(1).replace( '-', ' ').replace('s', 'S'), osVersionMap)); } } else { Matcher matcher = PATTERN.matcher(from.getImageLocation()); if (matcher.find()) { family = OsFamily.fromValue(matcher.group(1)); osBuilder.family(family); osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, matcher.group(2), osVersionMap)); } } } catch (IllegalArgumentException e) { logger.debug("<< didn't match os(%s)", from.getImageLocation()); } catch (NoSuchElementException e) { logger.debug("<< didn't match at all(%s)", from.getImageLocation()); } } }
@Override public boolean apply(Location input) { return input.getId().equals(from.getRegion()); }
@Override public Image apply(final org.jclouds.ec2.domain.Image from) { if (from.getImageType() != ImageType.MACHINE) { return null; builder.providerId(from.getId()); builder.id(from.getRegion() + "/" + from.getId()); builder.name(from.getName()); builder.description(from.getDescription() != null ? from.getDescription() : from.getImageLocation()); builder.userMetadata(ImmutableMap.<String, String> builder().put("owner", from.getImageOwnerId()).put( "rootDeviceType", from.getRootDeviceType().value()).put("virtualizationType", from.getVirtualizationType().value()).put("hypervisor", from.getHypervisor().value()).build()); osBuilder.is64Bit(from.getArchitecture() == Architecture.X86_64); OsFamily family = parseOsFamily(from); osBuilder.family(family); osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, from.getImageLocation(), osVersionMap)); osBuilder.description(from.getImageLocation()); osBuilder.arch(from.getVirtualizationType().value()); logger.error("unknown region %s for image %s; not in %s", from.getRegion(), from.getId(), locations); builder.location(new LocationBuilder().scope(LocationScope.REGION).id(from.getRegion()).description( from.getRegion()).parent(defaultLocation.get()).build()); builder.status(toPortableImageStatus.get(from.getImageState())); builder.backendStatus(from.getRawState()); return builder.build();
imagesToDeregister.add(ebsBackedImageId); final Image ebsBackedImage = getOnlyElement(client.describeImagesInRegion(regionId, imageIds(ebsBackedImageId))); assertEquals(ebsBackedImage.getName(), ebsBackedImageName); assertEquals(ebsBackedImage.getImageType(), ImageType.MACHINE); assertEquals(ebsBackedImage.getRootDeviceType(), RootDeviceType.EBS); assertEquals(ebsBackedImage.getRootDeviceName(), "/dev/sda1"); assertEquals(ebsBackedImage.getDescription(), "adrian"); assertEquals( ebsBackedImage.getEbsBlockDevices().entrySet(), ImmutableMap.of("/dev/sda1", new Image.EbsBlockDevice(snapshot.getId(), snapshot.getVolumeSize(), true, null, null, false), "/dev/sda2", newBlockDeviceInfo()).entrySet());
public void testWindows() { Set<Image> contents = ImmutableSet.of(new Image("us-east-1", Architecture.X86_64, null, null, "ami-02eb086b", "aws-solutions-amis/SqlSvrStd2003r2-x86_64-Win_SFWBasic5.1-v1.0.manifest.xml", "771350841976", ImageState.AVAILABLE, "available", ImageType.MACHINE, true, Sets.<String> newHashSet("5771E9A6"), null, "windows", null, RootDeviceType.INSTANCE_STORE, null, ImmutableMap.<String, EbsBlockDevice> of(), VirtualizationType.PARAVIRTUAL, Hypervisor.XEN)); Set<Image> result = parseImages("/describe_images_windows.xml"); assertEquals(result.toString(), contents.toString()); assertEquals(get(result, 0).getImageState(), ImageState.AVAILABLE); assertEquals(get(result, 0).getRawState(), "available"); }
@Override public void reviseParsedImage(org.jclouds.ec2.domain.Image from, ImageBuilder builder, OsFamily family, OperatingSystem.Builder osBuilder) { Image image = Image.builder().id(from.getId()).name(from.getName()).build(); OperatingSystem os = imageToOs.apply(image); osBuilder.description(os.getDescription()); osBuilder.family(os.getFamily()); osBuilder.name(os.getName()); osBuilder.is64Bit(os.is64Bit()); osBuilder.version(os.getVersion()); // arch is accurate already } }