View Javadoc

1   /**
2    *
3    * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
4    *
5    * ====================================================================
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   * ====================================================================
18   */
19  package org.jclouds.aws.ec2.options;
20  
21  import static com.google.common.base.Preconditions.checkNotNull;
22  
23  import java.util.Set;
24  
25  import org.jclouds.aws.ec2.domain.LaunchSpecification;
26  import org.jclouds.ec2.domain.BlockDeviceMapping;
27  import org.jclouds.ec2.domain.InstanceType;
28  import org.jclouds.ec2.options.RunInstancesOptions;
29  
30  import com.google.common.collect.ImmutableSet;
31  
32  /**
33   * Contains options supported in the Form API for the RunInstances operation. <h2>
34   * Usage</h2> The recommended way to instantiate a RunInstancesOptions object is to statically
35   * import RunInstancesOptions.Builder.* and invoke a static creation method followed by an instance
36   * mutator (if needed):
37   * <p/>
38   * <code>
39   * import static org.jclouds.aws.ec2.options.RunInstancesOptions.Builder.*
40   * <p/>
41   * EC2Client connection = // get connection
42   * Future<ReservationInfo> instances = connection.runInstances(executableBy("123125").imageIds(1000, 1004));
43   * <code>
44   * 
45   * @author Adrian Cole
46   * @see <a href=
47   *      "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-RunInstances.html"
48   *      />
49   */
50  public class AWSRunInstancesOptions extends RunInstancesOptions {
51     private LaunchSpecification.Builder launchSpecificationBuilder = LaunchSpecification.builder();
52     public static final AWSRunInstancesOptions NONE = new AWSRunInstancesOptions();
53  
54     /**
55      * Specifies the name of an existing placement group you want to launch the instance into (for
56      * cluster compute instances).
57      * 
58      * @param placementGroup
59      *           name of an existing placement group
60      */
61     public AWSRunInstancesOptions inPlacementGroup(String placementGroup) {
62        formParameters.put("Placement.GroupName", checkNotNull(placementGroup, "placementGroup"));
63        return this;
64     }
65  
66     /**
67      * Enables monitoring for the instance.
68      */
69     public AWSRunInstancesOptions enableMonitoring() {
70        formParameters.put("Monitoring.Enabled", "true");
71        launchSpecificationBuilder.monitoringEnabled(true);
72        return this;
73     }
74  
75     /**
76      * Specifies the subnet ID within which to launch the instance(s) for Amazon Virtual Private
77      * Cloud.
78      */
79     public AWSRunInstancesOptions withSubnetId(String subnetId) {
80        formParameters.put("SubnetId", checkNotNull(subnetId, "subnetId"));
81        return this;
82     }
83  
84     public static class Builder extends RunInstancesOptions.Builder {
85  
86        /**
87         * @see AWSRunInstancesOptions#inPlacementGroup(String)
88         */
89        public static AWSRunInstancesOptions inPlacementGroup(String placementGroup) {
90           AWSRunInstancesOptions options = new AWSRunInstancesOptions();
91           return options.inPlacementGroup(placementGroup);
92        }
93  
94        /**
95         * @see AWSRunInstancesOptions#enableMonitoring()
96         */
97        public static AWSRunInstancesOptions enableMonitoring() {
98           AWSRunInstancesOptions options = new AWSRunInstancesOptions();
99           return options.enableMonitoring();
100       }
101 
102       /**
103        * @see AWSRunInstancesOptions#withSubnetId(String)
104        */
105       public static AWSRunInstancesOptions withSubnetId(String subnetId) {
106          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
107          return options.withSubnetId(subnetId);
108       }
109 
110       /**
111        * @see AWSRunInstancesOptions#withKeyName(String)
112        */
113       public static AWSRunInstancesOptions withKeyName(String keyName) {
114          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
115          return options.withKeyName(keyName);
116       }
117 
118       /**
119        * @see AWSRunInstancesOptions#withSecurityGroup(String)
120        */
121       public static AWSRunInstancesOptions withSecurityGroup(String securityGroup) {
122          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
123          return options.withSecurityGroup(securityGroup);
124       }
125 
126       /**
127        * @see AWSRunInstancesOptions#withUserData(byte [])
128        */
129       public static AWSRunInstancesOptions withUserData(byte[] unencodedData) {
130          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
131          return options.withUserData(unencodedData);
132       }
133 
134       /**
135        * @see AWSRunInstancesOptions#asType(InstanceType)
136        */
137       public static AWSRunInstancesOptions asType(String instanceType) {
138          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
139          return options.asType(instanceType);
140       }
141 
142       /**
143        * @see AWSRunInstancesOptions#withKernelId(String)
144        */
145       public static AWSRunInstancesOptions withKernelId(String kernelId) {
146          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
147          return options.withKernelId(kernelId);
148       }
149 
150       /**
151        * @see AWSRunInstancesOptions#withRamdisk(String)
152        */
153       public static AWSRunInstancesOptions withRamdisk(String ramdiskId) {
154          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
155          return options.withRamdisk(ramdiskId);
156       }
157 
158       /**
159        * @see AWSRunInstancesOptions#withBlockDeviceMappings(Set<BlockDeviceMapping> mappings)
160        */
161       public static AWSRunInstancesOptions withBlockDeviceMappings(Set<? extends BlockDeviceMapping> mappings) {
162          AWSRunInstancesOptions options = new AWSRunInstancesOptions();
163          return options.withBlockDeviceMappings(mappings);
164       }
165 
166    }
167 
168    @Override
169    public AWSRunInstancesOptions withBlockDeviceMappings(Set<? extends BlockDeviceMapping> mappings) {
170       launchSpecificationBuilder.blockDeviceMappings(mappings);
171       return AWSRunInstancesOptions.class.cast(super.withBlockDeviceMappings(mappings));
172    }
173 
174    @Override
175    public AWSRunInstancesOptions withKernelId(String kernelId) {
176       launchSpecificationBuilder.kernelId(kernelId);
177       return AWSRunInstancesOptions.class.cast(super.withKernelId(kernelId));
178    }
179 
180    @Override
181    public AWSRunInstancesOptions withKeyName(String keyName) {
182       launchSpecificationBuilder.keyName(keyName);
183       return AWSRunInstancesOptions.class.cast(super.withKeyName(keyName));
184    }
185 
186    @Override
187    public AWSRunInstancesOptions withRamdisk(String ramDiskId) {
188       launchSpecificationBuilder.ramdiskId(ramDiskId);
189       return AWSRunInstancesOptions.class.cast(super.withRamdisk(ramDiskId));
190    }
191 
192    @Override
193    public AWSRunInstancesOptions withSecurityGroup(String securityGroup) {
194       launchSpecificationBuilder.groupId(securityGroup);
195       return AWSRunInstancesOptions.class.cast(super.withSecurityGroup(securityGroup));
196    }
197 
198    @Override
199    public AWSRunInstancesOptions withSecurityGroups(Iterable<String> securityGroups) {
200       launchSpecificationBuilder.groupIds(securityGroups);
201       return AWSRunInstancesOptions.class.cast(super.withSecurityGroups(securityGroups));
202    }
203 
204    @Override
205    public AWSRunInstancesOptions withSecurityGroups(String... securityGroups) {
206       launchSpecificationBuilder.groupIds(ImmutableSet.copyOf(securityGroups));
207       return AWSRunInstancesOptions.class.cast(super.withSecurityGroups(securityGroups));
208    }
209 
210    @Override
211    public AWSRunInstancesOptions withUserData(byte[] unencodedData) {
212       launchSpecificationBuilder.userData(unencodedData);
213       return AWSRunInstancesOptions.class.cast(super.withUserData(unencodedData));
214    }
215 
216    @Override
217    public AWSRunInstancesOptions asType(String type) {
218       launchSpecificationBuilder.instanceType(type);
219       return AWSRunInstancesOptions.class.cast(super.asType(type));
220    }
221 
222    public synchronized LaunchSpecification.Builder getLaunchSpecificationBuilder() {
223       try {
224          return launchSpecificationBuilder.imageId("fake").build().toBuilder().imageId(null);
225       } finally {
226          launchSpecificationBuilder.imageId(null);
227       }
228    }
229 }