| /** |
| * Licensed to jclouds, Inc. (jclouds) under one or more |
| * contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. jclouds licenses this file |
| * to you 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.aws.ec2.options; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| |
| import java.util.Set; |
| |
| import org.jclouds.aws.ec2.domain.LaunchSpecification; |
| import org.jclouds.ec2.domain.BlockDeviceMapping; |
| import org.jclouds.ec2.domain.InstanceType; |
| import org.jclouds.ec2.options.RunInstancesOptions; |
| import org.jclouds.rest.annotations.SinceApiVersion; |
| |
| import com.google.common.collect.ImmutableSet; |
| |
| /** |
| * Contains options supported in the Form API for the RunInstances operation. <h2> |
| * Usage</h2> The recommended way to instantiate a RunInstancesOptions object is to statically |
| * import RunInstancesOptions.Builder.* and invoke a static creation method followed by an instance |
| * mutator (if needed): |
| * <p/> |
| * <code> |
| * import static org.jclouds.aws.ec2.options.RunInstancesOptions.Builder.* |
| * <p/> |
| * EC2Client connection = // get connection |
| * Future<ReservationInfo> instances = connection.runInstances(executableBy("123125").imageIds(1000, 1004)); |
| * <code> |
| * |
| * @author Adrian Cole |
| * @see <a href= |
| * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-RunInstances.html" |
| * /> |
| */ |
| public class AWSRunInstancesOptions extends RunInstancesOptions { |
| private LaunchSpecification.Builder launchSpecificationBuilder = LaunchSpecification.builder(); |
| public static final AWSRunInstancesOptions NONE = new AWSRunInstancesOptions(); |
| |
| /** |
| * Specifies the name of an existing placement group you want to launch the instance into (for |
| * cluster compute instances). |
| * |
| * @param placementGroup |
| * name of an existing placement group |
| */ |
| public AWSRunInstancesOptions inPlacementGroup(String placementGroup) { |
| formParameters.put("Placement.GroupName", checkNotNull(placementGroup, "placementGroup")); |
| return this; |
| } |
| |
| /** |
| * Enables monitoring for the instance. |
| */ |
| public AWSRunInstancesOptions enableMonitoring() { |
| formParameters.put("Monitoring.Enabled", "true"); |
| launchSpecificationBuilder.monitoringEnabled(true); |
| return this; |
| } |
| |
| /** |
| * Specifies the subnet ID within which to launch the instance(s) for Amazon Virtual Private |
| * Cloud. |
| */ |
| public AWSRunInstancesOptions withSubnetId(String subnetId) { |
| formParameters.put("SubnetId", checkNotNull(subnetId, "subnetId")); |
| return this; |
| } |
| |
| public AWSRunInstancesOptions withSecurityGroupId(String securityGroup) { |
| return withSecurityGroupIds(securityGroup); |
| } |
| |
| public AWSRunInstancesOptions withSecurityGroupIds(Iterable<String> securityGroupIds) { |
| launchSpecificationBuilder.securityGroupIds(securityGroupIds); |
| indexFormValuesWithPrefix("SecurityGroupId", securityGroupIds); |
| return this; |
| } |
| |
| public AWSRunInstancesOptions withSecurityGroupIds(String... securityGroupIds) { |
| return withSecurityGroupIds(ImmutableSet.copyOf(securityGroupIds)); |
| } |
| |
| /** |
| * Amazon resource name (ARN) of the IAM Instance Profile (IIP) to associate with the instances. |
| * |
| * @see org.jclouds.aws.ec2.domain.AWSRunningInstance#getIAMInstanceProfile() |
| */ |
| @SinceApiVersion("2012-06-01") |
| public AWSRunInstancesOptions withIAMInstanceProfileArn(String arn) { |
| formParameters.put("IamInstanceProfile.Arn", checkNotNull(arn, "arn")); |
| return this; |
| } |
| |
| /** |
| * The name of the IAM Instance Profile (IIP) to associate with the instances. |
| * |
| * @see org.jclouds.aws.ec2.domain.AWSRunningInstance#getIAMInstanceProfile() |
| */ |
| @SinceApiVersion("2012-06-01") |
| public AWSRunInstancesOptions withIAMInstanceProfileName(String name) { |
| formParameters.put("IamInstanceProfile.Name", checkNotNull(name, "name")); |
| return this; |
| } |
| |
| public static class Builder extends RunInstancesOptions.Builder { |
| |
| /** |
| * @see AWSRunInstancesOptions#withSecurityGroupId(String) |
| */ |
| public static AWSRunInstancesOptions withSecurityGroupId(String securityGroup) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withSecurityGroupId(securityGroup); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#inPlacementGroup(String) |
| */ |
| public static AWSRunInstancesOptions inPlacementGroup(String placementGroup) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.inPlacementGroup(placementGroup); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#enableMonitoring() |
| */ |
| public static AWSRunInstancesOptions enableMonitoring() { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.enableMonitoring(); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withSubnetId(String) |
| */ |
| public static AWSRunInstancesOptions withSubnetId(String subnetId) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withSubnetId(subnetId); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withIAMInstanceProfileArn(String) |
| */ |
| public static AWSRunInstancesOptions withIAMInstanceProfileArn(String arn) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withIAMInstanceProfileArn(arn); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withIAMInstanceProfileName(String) |
| */ |
| public static AWSRunInstancesOptions withIAMInstanceProfileName(String id) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withIAMInstanceProfileName(id); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withKeyName(String) |
| */ |
| public static AWSRunInstancesOptions withKeyName(String keyName) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withKeyName(keyName); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withSecurityGroup(String) |
| */ |
| public static AWSRunInstancesOptions withSecurityGroup(String securityGroup) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withSecurityGroup(securityGroup); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withUserData(byte []) |
| */ |
| public static AWSRunInstancesOptions withUserData(byte[] unencodedData) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withUserData(unencodedData); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#asType(InstanceType) |
| */ |
| public static AWSRunInstancesOptions asType(String instanceType) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.asType(instanceType); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withKernelId(String) |
| */ |
| public static AWSRunInstancesOptions withKernelId(String kernelId) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withKernelId(kernelId); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withRamdisk(String) |
| */ |
| public static AWSRunInstancesOptions withRamdisk(String ramdiskId) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withRamdisk(ramdiskId); |
| } |
| |
| /** |
| * @see AWSRunInstancesOptions#withBlockDeviceMappings(Set<BlockDeviceMapping> mappings) |
| */ |
| public static AWSRunInstancesOptions withBlockDeviceMappings(Set<? extends BlockDeviceMapping> mappings) { |
| AWSRunInstancesOptions options = new AWSRunInstancesOptions(); |
| return options.withBlockDeviceMappings(mappings); |
| } |
| |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withBlockDeviceMappings(Set<? extends BlockDeviceMapping> mappings) { |
| launchSpecificationBuilder.blockDeviceMappings(mappings); |
| return AWSRunInstancesOptions.class.cast(super.withBlockDeviceMappings(mappings)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withKernelId(String kernelId) { |
| launchSpecificationBuilder.kernelId(kernelId); |
| return AWSRunInstancesOptions.class.cast(super.withKernelId(kernelId)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withKeyName(String keyName) { |
| launchSpecificationBuilder.keyName(keyName); |
| return AWSRunInstancesOptions.class.cast(super.withKeyName(keyName)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withRamdisk(String ramDiskId) { |
| launchSpecificationBuilder.ramdiskId(ramDiskId); |
| return AWSRunInstancesOptions.class.cast(super.withRamdisk(ramDiskId)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withSecurityGroup(String securityGroup) { |
| launchSpecificationBuilder.securityGroupName(securityGroup); |
| return AWSRunInstancesOptions.class.cast(super.withSecurityGroup(securityGroup)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withSecurityGroups(Iterable<String> securityGroups) { |
| launchSpecificationBuilder.securityGroupNames(securityGroups); |
| return AWSRunInstancesOptions.class.cast(super.withSecurityGroups(securityGroups)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withSecurityGroups(String... securityGroups) { |
| launchSpecificationBuilder.securityGroupNames(ImmutableSet.copyOf(securityGroups)); |
| return AWSRunInstancesOptions.class.cast(super.withSecurityGroups(securityGroups)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions withUserData(byte[] unencodedData) { |
| launchSpecificationBuilder.userData(unencodedData); |
| return AWSRunInstancesOptions.class.cast(super.withUserData(unencodedData)); |
| } |
| |
| @Override |
| public AWSRunInstancesOptions asType(String type) { |
| launchSpecificationBuilder.instanceType(type); |
| return AWSRunInstancesOptions.class.cast(super.asType(type)); |
| } |
| |
| public synchronized LaunchSpecification.Builder getLaunchSpecificationBuilder() { |
| try { |
| return launchSpecificationBuilder.imageId("fake").build().toBuilder().imageId(null); |
| } finally { |
| launchSpecificationBuilder.imageId(null); |
| } |
| } |
| } |