/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.ow2.choreos.ee.nodes.cloudprovider; import java.util.Iterator; import java.util.Properties; import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.options.TemplateOptions; import org.jclouds.ec2.domain.InstanceType; import org.ow2.choreos.ee.config.CloudConfiguration; import org.ow2.choreos.ee.config.DeploymentManagerConfiguration; import org.ow2.choreos.nodes.NodeNotCreatedException; import org.ow2.choreos.nodes.NodeNotDestroyed; import org.ow2.choreos.nodes.datamodel.CloudNode; import org.ow2.choreos.nodes.datamodel.NodeSpec; public class AWSCloudProvider extends JCloudsCloudProvider { private static final Properties PROPERTIES = new Properties(); private static final String DEFAULT_USER = "ubuntu"; private static final String PROVIDER = "aws-ec2"; private static final String DEFAULT_IMAGE = "us-east-1/ami-3b4ff252"; // Ubuntu // 12.04 private static final String DEFAULT_INSTANCE_TYPE = InstanceType.M1_SMALL; private static final int TIME_BETWEEN_REQUESTS_MILLIS = 2000; private static final DelayedRequestEnforcer delayedRequestsEnforcer = new DelayedRequestEnforcer( TIME_BETWEEN_REQUESTS_MILLIS); private String defaultPrivateKey; private CloudConfiguration cloudConfiguration; public String getCloudProviderName() { return PROVIDER; } @Override public CloudNode createNode(NodeSpec nodeSpec) throws NodeNotCreatedException { delayedRequestsEnforcer.enforceRule(); return super.createNode(nodeSpec); } @Override public void destroyNode(String nodeId) throws NodeNotDestroyed { delayedRequestsEnforcer.enforceRule(); super.destroyNode(nodeId); } @Override protected String getDefaultImageId() { String imageId = DeploymentManagerConfiguration.get("AMAZON_IMAGE_ID"); ; if (imageId == null || imageId.trim().isEmpty()) imageId = DEFAULT_IMAGE; return imageId; } @Override protected String getHardwareId() { String instanceType = DeploymentManagerConfiguration.get("AMAZON_INSTANCE_TYPE"); if (instanceType == null || instanceType.isEmpty()) instanceType = DEFAULT_INSTANCE_TYPE; return instanceType; } @Override protected String getUserName() { return DEFAULT_USER; } @Override protected String getUserPrivateKey() { return defaultPrivateKey; } @Override protected String getNodeIp(NodeMetadata nodeMetadata) { Iterator<String> publicAddresses = nodeMetadata.getPublicAddresses().iterator(); if (publicAddresses != null && publicAddresses.hasNext()) { return publicAddresses.next(); } else { return null; } } @Override protected void configureTemplateOptions(TemplateOptions templateOptions) { AWSEC2TemplateOptions options = templateOptions.as(AWSEC2TemplateOptions.class); options.securityGroups("default"); options.keyPair(cloudConfiguration.get("AMAZON_KEY_PAIR")); } @Override public void setCloudConfiguration(CloudConfiguration cloudConfiguration) { this.cloudConfiguration = cloudConfiguration; defaultPrivateKey = cloudConfiguration.get("AMAZON_PRIVATE_SSH_KEY"); super.identity = cloudConfiguration.get("AMAZON_ACCESS_KEY_ID"); super.credential = cloudConfiguration.get("AMAZON_SECRET_KEY"); super.provider = PROVIDER; super.properties = PROPERTIES; } }