1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.trmk.vcloud_0_8;
20
21 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.CATALOGITEMCUSTOMIZATIONPARAMETERS_XML;
22 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.CATALOGITEM_XML;
23 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.CATALOG_XML;
24 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.INTERNETSERVICESLIST_XML;
25 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.INTERNETSERVICE_XML;
26 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.NETWORK_XML;
27 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.NODESERVICE_XML;
28 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.ORG_XML;
29 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.PUBLICIPSLIST_XML;
30 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.PUBLICIP_XML;
31 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.TASKSLIST_XML;
32 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.TASK_XML;
33 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.VAPPTEMPLATE_XML;
34 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.VAPP_XML;
35 import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.VDC_XML;
36
37 import java.net.URI;
38 import java.util.Map;
39 import java.util.Set;
40
41 import org.jclouds.javax.annotation.Nullable;
42 import javax.ws.rs.Consumes;
43 import javax.ws.rs.DELETE;
44 import javax.ws.rs.GET;
45 import javax.ws.rs.POST;
46 import javax.ws.rs.PUT;
47 import javax.ws.rs.Path;
48 import javax.ws.rs.Produces;
49
50 import org.jclouds.predicates.validators.DnsNameValidator;
51 import org.jclouds.rest.annotations.EndpointParam;
52 import org.jclouds.rest.annotations.ExceptionParser;
53 import org.jclouds.rest.annotations.MapBinder;
54 import org.jclouds.rest.annotations.ParamValidators;
55 import org.jclouds.rest.annotations.PayloadParam;
56 import org.jclouds.rest.annotations.RequestFilters;
57 import org.jclouds.rest.annotations.ResponseParser;
58 import org.jclouds.rest.annotations.XMLResponseParser;
59 import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
60 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
61 import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
62 import org.jclouds.trmk.vcloud_0_8.binders.BindCloneVAppParamsToXmlPayload;
63 import org.jclouds.trmk.vcloud_0_8.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
64 import org.jclouds.trmk.vcloud_0_8.binders.BindNodeConfigurationToXmlPayload;
65 import org.jclouds.trmk.vcloud_0_8.binders.BindVAppConfigurationToXmlPayload;
66 import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
67 import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
68 import org.jclouds.trmk.vcloud_0_8.domain.CustomizationParameters;
69 import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
70 import org.jclouds.trmk.vcloud_0_8.domain.Network;
71 import org.jclouds.trmk.vcloud_0_8.domain.Node;
72 import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
73 import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
74 import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
75 import org.jclouds.trmk.vcloud_0_8.domain.Task;
76 import org.jclouds.trmk.vcloud_0_8.domain.TasksList;
77 import org.jclouds.trmk.vcloud_0_8.domain.VApp;
78 import org.jclouds.trmk.vcloud_0_8.domain.VAppConfiguration;
79 import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
80 import org.jclouds.trmk.vcloud_0_8.domain.VDC;
81 import org.jclouds.trmk.vcloud_0_8.endpoints.Org;
82 import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
83 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameAndCatalogNameToEndpoint;
84 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameAndTasksListNameToEndpoint;
85 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameAndVDCNameToEndpoint;
86 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameCatalogNameItemNameToEndpoint;
87 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
88 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameToEndpoint;
89 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameVDCNameNetworkNameToEndpoint;
90 import org.jclouds.trmk.vcloud_0_8.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
91 import org.jclouds.trmk.vcloud_0_8.functions.ParseTaskFromLocationHeader;
92 import org.jclouds.trmk.vcloud_0_8.functions.ReturnVoidOnDeleteDefaultIp;
93 import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToInternetServicesEndpoint;
94 import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToPublicIPsEndpoint;
95 import org.jclouds.trmk.vcloud_0_8.options.AddInternetServiceOptions;
96 import org.jclouds.trmk.vcloud_0_8.options.AddNodeOptions;
97 import org.jclouds.trmk.vcloud_0_8.options.CloneVAppOptions;
98 import org.jclouds.trmk.vcloud_0_8.options.InstantiateVAppTemplateOptions;
99 import org.jclouds.trmk.vcloud_0_8.xml.CatalogHandler;
100 import org.jclouds.trmk.vcloud_0_8.xml.CatalogItemHandler;
101 import org.jclouds.trmk.vcloud_0_8.xml.CustomizationParametersHandler;
102 import org.jclouds.trmk.vcloud_0_8.xml.InternetServiceHandler;
103 import org.jclouds.trmk.vcloud_0_8.xml.InternetServicesHandler;
104 import org.jclouds.trmk.vcloud_0_8.xml.NetworkHandler;
105 import org.jclouds.trmk.vcloud_0_8.xml.NodeHandler;
106 import org.jclouds.trmk.vcloud_0_8.xml.NodesHandler;
107 import org.jclouds.trmk.vcloud_0_8.xml.OrgHandler;
108 import org.jclouds.trmk.vcloud_0_8.xml.PublicIpAddressesHandler;
109 import org.jclouds.trmk.vcloud_0_8.xml.TaskHandler;
110 import org.jclouds.trmk.vcloud_0_8.xml.TasksListHandler;
111 import org.jclouds.trmk.vcloud_0_8.xml.VAppHandler;
112 import org.jclouds.trmk.vcloud_0_8.xml.VAppTemplateHandler;
113 import org.jclouds.trmk.vcloud_0_8.xml.VDCHandler;
114
115 import com.google.common.util.concurrent.ListenableFuture;
116 import com.google.inject.Provides;
117
118
119
120
121
122
123
124
125
126
127 @RequestFilters(SetVCloudTokenCookie.class)
128 public interface TerremarkVCloudAsyncClient {
129
130
131
132
133 @GET
134 @Consumes(CATALOGITEM_XML)
135 @XMLResponseParser(CatalogItemHandler.class)
136 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
137 ListenableFuture<? extends CatalogItem> findCatalogItemInOrgCatalogNamed(
138 @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName,
139 @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName,
140 @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName);
141
142
143
144
145 @GET
146 @Consumes(CATALOGITEM_XML)
147 @XMLResponseParser(CatalogItemHandler.class)
148 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
149 ListenableFuture<? extends CatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
150
151
152
153
154 @GET
155 @Consumes(TASKSLIST_XML)
156 @XMLResponseParser(TasksListHandler.class)
157 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
158 ListenableFuture<? extends TasksList> getTasksList(@EndpointParam URI tasksListId);
159
160
161
162
163 @GET
164 @XMLResponseParser(TasksListHandler.class)
165 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
166 @Consumes(TASKSLIST_XML)
167 ListenableFuture<? extends TasksList> findTasksListInOrgNamed(
168 @Nullable @EndpointParam(parser = OrgNameAndTasksListNameToEndpoint.class) String orgName,
169 @Nullable @EndpointParam(parser = OrgNameAndTasksListNameToEndpoint.class) String tasksListName);
170
171
172
173
174 @GET
175 @Consumes(TASK_XML)
176 @XMLResponseParser(TaskHandler.class)
177 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
178 ListenableFuture<? extends Task> getTask(@EndpointParam URI taskId);
179
180
181
182
183 @POST
184 @Path("/action/cancel")
185 ListenableFuture<Void> cancelTask(@EndpointParam URI taskId);
186
187
188
189
190
191 @Provides
192 @Org
193 Map<String, ReferenceType> listOrgs();
194
195
196
197
198 @GET
199 @XMLResponseParser(CatalogHandler.class)
200 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
201 @Consumes(CATALOG_XML)
202 ListenableFuture<? extends Catalog> findCatalogInOrgNamed(
203 @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName,
204 @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName);
205
206
207
208
209 @GET
210 @Consumes(VAPPTEMPLATE_XML)
211 @XMLResponseParser(VAppTemplateHandler.class)
212 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
213 ListenableFuture<? extends VAppTemplate> getVAppTemplate(@EndpointParam URI vAppTemplate);
214
215
216
217
218 @GET
219 @Consumes(VAPPTEMPLATE_XML)
220 @XMLResponseParser(VAppTemplateHandler.class)
221 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
222 ListenableFuture<? extends VAppTemplate> findVAppTemplateInOrgCatalogNamed(
223 @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String orgName,
224 @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String catalogName,
225 @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String itemName);
226
227
228
229
230 @GET
231 @Consumes(NETWORK_XML)
232 @XMLResponseParser(NetworkHandler.class)
233 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
234 ListenableFuture<? extends Network> findNetworkInOrgVDCNamed(
235 @Nullable @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String orgName,
236 @Nullable @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String catalogName,
237 @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String networkName);
238
239
240
241
242 @GET
243 @Consumes(NETWORK_XML)
244 @XMLResponseParser(NetworkHandler.class)
245 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
246 ListenableFuture<? extends Network> getNetwork(@EndpointParam URI network);
247
248
249
250
251 @POST
252 @Path("/action/cloneVApp")
253 @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
254 @Consumes(TASK_XML)
255 @XMLResponseParser(TaskHandler.class)
256 @MapBinder(BindCloneVAppParamsToXmlPayload.class)
257 ListenableFuture<? extends Task> cloneVAppInVDC(@EndpointParam URI vdc, @PayloadParam("vApp") URI toClone,
258 @PayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName, CloneVAppOptions... options);
259
260
261
262
263 @GET
264 @Consumes(VAPP_XML)
265 @XMLResponseParser(VAppHandler.class)
266 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
267 ListenableFuture<? extends VApp> findVAppInOrgVDCNamed(
268 @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
269 @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
270 @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String vAppName);
271
272
273
274
275 @GET
276 @Consumes(VAPP_XML)
277 @XMLResponseParser(VAppHandler.class)
278 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
279 ListenableFuture<? extends VApp> getVApp(@EndpointParam URI vApp);
280
281
282
283
284 @POST
285 @Consumes(TASK_XML)
286 @Path("/action/deploy")
287 @XMLResponseParser(TaskHandler.class)
288 ListenableFuture<? extends Task> deployVApp(@EndpointParam URI vAppId);
289
290
291
292
293 @POST
294 @Consumes(TASK_XML)
295 @Path("/action/undeploy")
296 @XMLResponseParser(TaskHandler.class)
297 ListenableFuture<? extends Task> undeployVApp(@EndpointParam URI vAppId);
298
299
300
301
302 @POST
303 @Consumes(TASK_XML)
304 @Path("/power/action/powerOn")
305 @XMLResponseParser(TaskHandler.class)
306 ListenableFuture<? extends Task> powerOnVApp(@EndpointParam URI vAppId);
307
308
309
310
311 @POST
312 @Consumes(TASK_XML)
313 @Path("/power/action/powerOff")
314 @XMLResponseParser(TaskHandler.class)
315 ListenableFuture<? extends Task> powerOffVApp(@EndpointParam URI vAppId);
316
317
318
319
320 @POST
321 @Path("/power/action/shutdown")
322 ListenableFuture<Void> shutdownVApp(@EndpointParam URI vAppId);
323
324
325
326
327 @POST
328 @Consumes(TASK_XML)
329 @Path("/power/action/reset")
330 @XMLResponseParser(TaskHandler.class)
331 ListenableFuture<? extends Task> resetVApp(@EndpointParam URI vAppId);
332
333
334
335
336 @POST
337 @Consumes(TASK_XML)
338 @Path("/power/action/suspend")
339 @XMLResponseParser(TaskHandler.class)
340 ListenableFuture<? extends Task> suspendVApp(@EndpointParam URI vAppId);
341
342
343
344
345 @DELETE
346 @ResponseParser(ParseTaskFromLocationHeader.class)
347 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
348 ListenableFuture<Task> deleteVApp(@EndpointParam URI vAppId);
349
350 @GET
351 @XMLResponseParser(OrgHandler.class)
352 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
353 @Consumes(ORG_XML)
354 ListenableFuture<? extends org.jclouds.trmk.vcloud_0_8.domain.Org> getOrg(@EndpointParam URI orgId);
355
356
357
358
359 @GET
360 @XMLResponseParser(OrgHandler.class)
361 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
362 @Consumes(ORG_XML)
363 ListenableFuture<? extends org.jclouds.trmk.vcloud_0_8.domain.Org> findOrgNamed(
364 @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
365
366
367
368
369 @GET
370 @XMLResponseParser(CatalogHandler.class)
371 @Consumes(CATALOG_XML)
372 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
373 ListenableFuture<? extends Catalog> getCatalog(@EndpointParam URI catalogId);
374
375
376
377
378 @GET
379 @XMLResponseParser(VDCHandler.class)
380 @Consumes(VDC_XML)
381 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
382 ListenableFuture<? extends VDC> getVDC(@EndpointParam URI vdc);
383
384
385
386
387 @GET
388 @XMLResponseParser(VDCHandler.class)
389 @Consumes(VDC_XML)
390 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
391 ListenableFuture<? extends VDC> findVDCInOrgNamed(
392 @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName,
393 @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName);
394
395
396
397
398 @POST
399 @Path("/action/instantiateVAppTemplate")
400 @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
401 @Consumes(VAPP_XML)
402 @XMLResponseParser(VAppHandler.class)
403 @MapBinder(BindInstantiateVAppTemplateParamsToXmlPayload.class)
404 ListenableFuture<? extends VApp> instantiateVAppTemplateInVDC(@EndpointParam URI vdc,
405 @PayloadParam("template") URI template,
406 @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
407 InstantiateVAppTemplateOptions... options);
408
409
410
411
412 @GET
413 @Consumes(INTERNETSERVICESLIST_XML)
414 @XMLResponseParser(InternetServicesHandler.class)
415 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
416 ListenableFuture<? extends Set<InternetService>> getAllInternetServicesInVDC(
417 @EndpointParam(parser = VDCURIToInternetServicesEndpoint.class) URI vDCId);
418
419
420
421
422 @POST
423 @Path("/internetServices")
424 @Produces(INTERNETSERVICE_XML)
425 @Consumes(INTERNETSERVICE_XML)
426 @XMLResponseParser(InternetServiceHandler.class)
427 @MapBinder(AddInternetServiceOptions.class)
428 ListenableFuture<? extends InternetService> addInternetServiceToExistingIp(@EndpointParam URI publicIpId,
429 @PayloadParam("name") String serviceName, @PayloadParam("protocol") Protocol protocol,
430 @PayloadParam("port") int port, AddInternetServiceOptions... options);
431
432
433
434
435 @DELETE
436 @ExceptionParser(ReturnVoidOnDeleteDefaultIp.class)
437 ListenableFuture<Void> deletePublicIp(@EndpointParam URI ipId);
438
439
440
441
442 @GET
443 @Path("/internetServices")
444 @Consumes(INTERNETSERVICESLIST_XML)
445 @XMLResponseParser(InternetServicesHandler.class)
446 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
447 ListenableFuture<? extends Set<InternetService>> getInternetServicesOnPublicIp(@EndpointParam URI ipId);
448
449
450
451
452 @GET
453 @Consumes(PUBLICIP_XML)
454 @XMLResponseParser(InternetServicesHandler.class)
455 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
456 ListenableFuture<? extends Set<InternetService>> getPublicIp(@EndpointParam URI ipId);
457
458
459
460
461 @GET
462 @Consumes(PUBLICIPSLIST_XML)
463 @XMLResponseParser(PublicIpAddressesHandler.class)
464 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
465 ListenableFuture<? extends Set<PublicIpAddress>> getPublicIpsAssociatedWithVDC(
466 @EndpointParam(parser = VDCURIToPublicIPsEndpoint.class) URI vDCId);
467
468
469
470
471 @DELETE
472 @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
473 ListenableFuture<Void> deleteInternetService(@EndpointParam URI internetServiceId);
474
475
476
477
478 @GET
479 @Consumes(INTERNETSERVICESLIST_XML)
480 @XMLResponseParser(InternetServiceHandler.class)
481 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
482 ListenableFuture<? extends InternetService> getInternetService(@EndpointParam URI internetServiceId);
483
484
485
486
487 @POST
488 @Path("/nodeServices")
489 @Produces(NODESERVICE_XML)
490 @Consumes(NODESERVICE_XML)
491 @XMLResponseParser(NodeHandler.class)
492 @MapBinder(AddNodeOptions.class)
493 ListenableFuture<? extends Node> addNode(@EndpointParam URI internetServiceId,
494 @PayloadParam("ipAddress") String ipAddress, @PayloadParam("name") String name,
495 @PayloadParam("port") int port, AddNodeOptions... options);
496
497
498
499
500 @GET
501 @Path("/nodeServices")
502 @XMLResponseParser(NodesHandler.class)
503 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
504 @Consumes(NODESERVICE_XML)
505 ListenableFuture<? extends Set<Node>> getNodes(@EndpointParam URI internetServiceId);
506
507
508
509
510 @GET
511 @XMLResponseParser(NodeHandler.class)
512 @Consumes(NODESERVICE_XML)
513 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
514 ListenableFuture<? extends Node> getNode(@EndpointParam URI nodeId);
515
516
517
518
519 @PUT
520 @Produces(NODESERVICE_XML)
521 @Consumes(NODESERVICE_XML)
522 @XMLResponseParser(NodeHandler.class)
523 @MapBinder(BindNodeConfigurationToXmlPayload.class)
524 ListenableFuture<? extends Node> configureNode(@EndpointParam URI nodeId, @PayloadParam("name") String name,
525 @PayloadParam("enabled") boolean enabled, @Nullable @PayloadParam("description") String description);
526
527
528
529
530 @DELETE
531 @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
532 ListenableFuture<Void> deleteNode(@EndpointParam URI nodeId);
533
534
535
536
537 @PUT
538 @Produces(VAPP_XML)
539 @Consumes(VAPP_XML)
540 @MapBinder(BindVAppConfigurationToXmlPayload.class)
541 @ResponseParser(ParseTaskFromLocationHeader.class)
542 ListenableFuture<? extends Task> configureVApp(
543 @EndpointParam(parser = BindVAppConfigurationToXmlPayload.class) VApp vApp, VAppConfiguration configuration);
544
545
546
547
548 @GET
549 @XMLResponseParser(CustomizationParametersHandler.class)
550 @Consumes(CATALOGITEMCUSTOMIZATIONPARAMETERS_XML)
551 ListenableFuture<? extends CustomizationParameters> getCustomizationOptions(@EndpointParam URI customization);
552
553 }