/* * Copyright 2008-2012 Amazon Technologies, Inc. * * 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://aws.amazon.com/apache2.0 * * This file 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 com.amazonaws.eclipse.ec2; import com.amazonaws.services.ec2.model.Image; /** * Represents a type of Amazon EC2 instance, including information on memory, * disk space, architecture, etc. */ public class InstanceType { /** The presentation/display name of this instance type. */ public final String name; /** The EC2 ID for this instance type. */ public final String id; /** The RAM (with units) available on this instance type. */ public final String memoryWithUnits; /** The disk space (with units) available on this instance type. */ public final String diskSpaceWithUnits; /** The number of virtual cores available on this instance type. */ public final int numberOfVirtualCores; /** The architecture type (32, 64, or 32/64) on this instance type. */ public final String architectureBits; /** Whether this instance type supports 32-bit AMIs */ public final boolean supports32Bit; /** Whether this instance type supports 64-bit AMIs */ public final boolean supports64Bit; /** Whether this instance type requires an EBS-backed image */ public final boolean requiresEbsVolume; /** Whether this instance type requires images using hardware virtualization */ public final boolean requiresHvmImage; public InstanceType(String name, String id, String memoryWithUnits, String diskSpaceWithUnits, int virtualCores, String architecture, boolean requiresEbsVolume) { this(name, id, memoryWithUnits, diskSpaceWithUnits, virtualCores, architecture, requiresEbsVolume, false); } public InstanceType(String name, String id, String memoryWithUnits, String diskSpaceWithUnits, int virtualCores, String architecture, boolean requiresEbsVolume, boolean requiresHvmImage) { this.name = name; this.id = id; this.diskSpaceWithUnits = diskSpaceWithUnits; this.memoryWithUnits = memoryWithUnits; this.numberOfVirtualCores = virtualCores; this.architectureBits = architecture; this.requiresEbsVolume = requiresEbsVolume; this.requiresHvmImage = requiresHvmImage; this.supports32Bit = architecture.contains("32"); this.supports64Bit = architecture.contains("64"); } /** * Returns whether a new instance of this type can be launched with * a specified image. */ public boolean canLaunch(Image image) { if ( image == null ) return false; int requiredArchitectureBits = 32; if ( image.getArchitecture().equalsIgnoreCase("x86_64") ) { requiredArchitectureBits = 64; } if ( (requiredArchitectureBits == 64 && !supports64Bit) || (requiredArchitectureBits == 32 && !supports32Bit) ) return false; if ( requiresEbsVolume && !image.getRootDeviceType().equalsIgnoreCase("ebs") ) return false; if ( requiresHvmImage && !image.getVirtualizationType().equalsIgnoreCase("hvm") ) return false; return true; } }