1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
56
57
58
59
60
61 public AWSRunInstancesOptions inPlacementGroup(String placementGroup) {
62 formParameters.put("Placement.GroupName", checkNotNull(placementGroup, "placementGroup"));
63 return this;
64 }
65
66
67
68
69 public AWSRunInstancesOptions enableMonitoring() {
70 formParameters.put("Monitoring.Enabled", "true");
71 launchSpecificationBuilder.monitoringEnabled(true);
72 return this;
73 }
74
75
76
77
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
88
89 public static AWSRunInstancesOptions inPlacementGroup(String placementGroup) {
90 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
91 return options.inPlacementGroup(placementGroup);
92 }
93
94
95
96
97 public static AWSRunInstancesOptions enableMonitoring() {
98 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
99 return options.enableMonitoring();
100 }
101
102
103
104
105 public static AWSRunInstancesOptions withSubnetId(String subnetId) {
106 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
107 return options.withSubnetId(subnetId);
108 }
109
110
111
112
113 public static AWSRunInstancesOptions withKeyName(String keyName) {
114 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
115 return options.withKeyName(keyName);
116 }
117
118
119
120
121 public static AWSRunInstancesOptions withSecurityGroup(String securityGroup) {
122 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
123 return options.withSecurityGroup(securityGroup);
124 }
125
126
127
128
129 public static AWSRunInstancesOptions withUserData(byte[] unencodedData) {
130 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
131 return options.withUserData(unencodedData);
132 }
133
134
135
136
137 public static AWSRunInstancesOptions asType(String instanceType) {
138 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
139 return options.asType(instanceType);
140 }
141
142
143
144
145 public static AWSRunInstancesOptions withKernelId(String kernelId) {
146 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
147 return options.withKernelId(kernelId);
148 }
149
150
151
152
153 public static AWSRunInstancesOptions withRamdisk(String ramdiskId) {
154 AWSRunInstancesOptions options = new AWSRunInstancesOptions();
155 return options.withRamdisk(ramdiskId);
156 }
157
158
159
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 }