1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.aws.ec2.compute.strategy;
20
21 import static com.google.common.base.Preconditions.checkNotNull;
22 import static com.google.common.collect.Iterables.getOnlyElement;
23
24 import java.util.Map;
25 import java.util.NoSuchElementException;
26
27 import javax.inject.Inject;
28 import javax.inject.Singleton;
29
30 import org.jclouds.aws.ec2.AWSEC2Client;
31 import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
32 import org.jclouds.domain.Credentials;
33 import org.jclouds.ec2.compute.strategy.EC2DestroyNodeStrategy;
34
35 import com.google.common.collect.Iterables;
36
37
38
39
40
41 @Singleton
42 public class AWSEC2DestroyNodeStrategy extends EC2DestroyNodeStrategy {
43
44 protected final AWSEC2Client client;
45 protected final Map<String, Credentials> credentialStore;
46
47 @Inject
48 protected AWSEC2DestroyNodeStrategy(AWSEC2Client client, GetNodeMetadataStrategy getNode,
49 Map<String, Credentials> credentialStore) {
50 super(client, getNode);
51 this.client = checkNotNull(client, "client");
52 this.credentialStore = checkNotNull(credentialStore, "credentialStore");
53 }
54
55 @Override
56 protected void destroyInstanceInRegion(String region, String id) {
57 String spotId = id;
58 if (id.indexOf("sir-") != 0) {
59 try {
60 spotId = getOnlyElement(
61 Iterables.concat(client.getInstanceServices().describeInstancesInRegion(region, id)))
62 .getSpotInstanceRequestId();
63 credentialStore.remove("node#" + region + "/" + spotId);
64 } catch (NoSuchElementException e) {
65 }
66 super.destroyInstanceInRegion(region, id);
67 } else {
68 client.getSpotInstanceServices().cancelSpotInstanceRequestsInRegion(region, spotId);
69 credentialStore.remove("node#" + region + "/" + id);
70 }
71
72 }
73 }