1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.vcloud.compute.internal;
20
21 import static com.google.common.base.Preconditions.checkNotNull;
22
23 import java.net.URI;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.annotation.Nullable;
28 import javax.inject.Singleton;
29
30 import org.jclouds.compute.domain.NodeState;
31 import org.jclouds.vcloud.VCloudExpressClient;
32 import org.jclouds.vcloud.compute.VCloudExpressComputeClient;
33 import org.jclouds.vcloud.domain.Status;
34 import org.jclouds.vcloud.domain.Task;
35 import org.jclouds.vcloud.domain.VCloudExpressVApp;
36 import org.jclouds.vcloud.domain.VCloudExpressVAppTemplate;
37 import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
38
39 import com.google.common.base.Predicate;
40 import com.google.common.collect.ImmutableSet;
41 import com.google.common.collect.Sets;
42 import com.google.inject.Inject;
43
44
45
46
47 @Singleton
48 public class VCloudExpressComputeClientImpl extends
49 CommonVCloudComputeClientImpl<VCloudExpressVAppTemplate, VCloudExpressVApp> implements VCloudExpressComputeClient {
50
51 protected final Map<Status, NodeState> vAppStatusToNodeState;
52
53 @Inject
54 public VCloudExpressComputeClientImpl(VCloudExpressClient client, Predicate<URI> successTester,
55 Map<Status, NodeState> vAppStatusToNodeState) {
56 super(client, successTester);
57 this.vAppStatusToNodeState = vAppStatusToNodeState;
58 }
59
60 @Override
61 protected void deleteVApp(VCloudExpressVApp vApp) {
62 logger.debug(">> deleting vApp(%s)", vApp.getName());
63 Task task = VCloudExpressClient.class.cast(client).deleteVApp(vApp.getHref());
64 if (task != null)
65 if (!taskTester.apply(task.getHref()))
66 throw new RuntimeException(String.format("failed to %s %s: %s", "delete", vApp.getName(), task));
67 }
68
69 @Override
70 public VCloudExpressVApp start(@Nullable URI VDC, URI templateId, String name,
71 InstantiateVAppTemplateOptions options, int... portsToOpen) {
72 checkNotNull(options, "options");
73 logger.debug(">> instantiating vApp vDC(%s) template(%s) name(%s) options(%s) ", VDC, templateId, name, options);
74
75 VCloudExpressVApp vAppResponse = VCloudExpressClient.class.cast(client).instantiateVAppTemplateInVDC(VDC,
76 templateId, name, options);
77 logger.debug("<< instantiated VApp(%s)", vAppResponse.getName());
78 if (options.shouldDeploy()) {
79 logger.debug(">> deploying vApp(%s)", vAppResponse.getName());
80
81 Task task = VCloudExpressClient.class.cast(client).deployVApp(vAppResponse.getHref());
82 if (options.shouldBlock()) {
83 if (!taskTester.apply(task.getHref())) {
84 throw new RuntimeException(String.format("failed to %s %s: %s", "deploy", vAppResponse.getName(), task));
85 }
86 logger.debug("<< deployed vApp(%s)", vAppResponse.getName());
87 if (options.shouldPowerOn()) {
88 logger.debug(">> powering vApp(%s)", vAppResponse.getName());
89 task = VCloudExpressClient.class.cast(client).powerOnVApp(vAppResponse.getHref());
90 if (!taskTester.apply(task.getHref())) {
91 throw new RuntimeException(String.format("failed to %s %s: %s", "powerOn", vAppResponse.getName(),
92 task));
93 }
94 logger.debug("<< on vApp(%s)", vAppResponse.getName());
95 }
96 }
97 }
98 return vAppResponse;
99 }
100
101 @Override
102 public Set<String> getPrivateAddresses(URI id) {
103 return ImmutableSet.of();
104 }
105
106 @Override
107 public Set<String> getPublicAddresses(URI id) {
108 VCloudExpressVApp vApp = refreshVApp(id);
109 return Sets.newHashSet(vApp.getNetworkToAddresses().values());
110 }
111
112 @Override
113 protected Status getStatus(VCloudExpressVApp vApp) {
114 return vApp.getStatus();
115 }
116
117 @Override
118 protected VCloudExpressVApp refreshVApp(URI id) {
119 return VCloudExpressClient.class.cast(client).getVApp(id);
120 }
121
122 @Override
123 protected Task powerOff(VCloudExpressVApp vApp) {
124 return VCloudExpressClient.class.cast(client).powerOffVApp(vApp.getHref());
125 }
126
127 @Override
128 protected Task reset(VCloudExpressVApp vApp) {
129 return VCloudExpressClient.class.cast(client).resetVApp(vApp.getHref());
130 }
131
132 @Override
133 protected Task undeploy(VCloudExpressVApp vApp) {
134 return VCloudExpressClient.class.cast(client).undeployVApp(vApp.getHref());
135 }
136 }