1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.aws.ec2;
20
21 import static org.jclouds.Constants.PROPERTY_ENDPOINT;
22 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_AMI_QUERY;
23 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY;
24 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMIs;
25 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_REGIONS;
26 import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_NODE_SUSPENDED;
27 import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
28
29 import java.util.Properties;
30 import java.util.logging.Logger;
31
32 import org.jclouds.aws.domain.Region;
33
34
35
36
37
38
39 public class AWSEC2PropertiesBuilder extends org.jclouds.ec2.EC2PropertiesBuilder {
40 @Override
41 protected Properties defaultProperties() {
42 Properties properties = super.defaultProperties();
43
44
45
46 properties.setProperty(PROPERTY_TIMEOUT_NODE_SUSPENDED, 120 * 1000 + "");
47
48
49 properties.setProperty("jclouds.ssh.max-retries", "7");
50 properties.setProperty("jclouds.ssh.retry-auth", "true");
51 properties.setProperty(PROPERTY_ENDPOINT, "https://ec2.us-east-1.amazonaws.com");
52 properties.putAll(Region.regionProperties());
53 properties.remove(PROPERTY_EC2_AMI_OWNERS);
54
55 properties.setProperty(PROPERTY_EC2_AMI_QUERY,
56 "owner-id=137112412989,063491364108,099720109477,411009282317;state=available;image-type=machine");
57
58 properties.setProperty(PROPERTY_EC2_CC_REGIONS, Region.US_EAST_1);
59 properties
60 .setProperty(
61 PROPERTY_EC2_CC_AMI_QUERY,
62 "virtualization-type=hvm;architecture=x86_64;owner-id=137112412989,099720109477;hypervisor=xen;state=available;image-type=machine;root-device-type=ebs");
63 return properties;
64 }
65
66 public AWSEC2PropertiesBuilder() {
67 super();
68 }
69
70 public AWSEC2PropertiesBuilder(Properties properties) {
71 super(properties);
72 }
73
74 @Override
75 public Properties build() {
76 Properties props = super.build();
77 warnAndReplaceIfUsingOldImageKey(props);
78 warnAndReplaceIfUsingOldCCImageKey(props);
79 return props;
80 }
81
82 protected void warnAndReplaceIfUsingOldImageKey(Properties props) {
83 if (props.containsKey(PROPERTY_EC2_AMI_OWNERS)) {
84 StringBuilder query = new StringBuilder();
85 String owners = properties.remove(PROPERTY_EC2_AMI_OWNERS).toString();
86 if (!"*".equals(owners) && !"".equals(owners))
87 query.append("owner-id=").append(owners).append(';');
88 if (!"".equals(owners))
89 query.append("state=available;image-type=machine");
90 props.setProperty(PROPERTY_EC2_AMI_QUERY, query.toString());
91 Logger.getAnonymousLogger().warning(
92 String.format("Property %s is deprecated, please use new syntax: %s=%s", PROPERTY_EC2_AMI_OWNERS,
93 PROPERTY_EC2_AMI_QUERY, query.toString()));
94 }
95 }
96
97 protected void warnAndReplaceIfUsingOldCCImageKey(Properties props) {
98 if (props.containsKey(PROPERTY_EC2_CC_AMIs)) {
99 String amis = properties.remove(PROPERTY_EC2_CC_AMIs).toString();
100 String value = "image-id=" + amis.replace("us-east-1/", "");
101 props.setProperty(PROPERTY_EC2_CC_AMI_QUERY, value);
102 Logger.getAnonymousLogger().warning(
103 String.format("Property %s is deprecated, please use new syntax: %s=%s", PROPERTY_EC2_CC_AMIs,
104 PROPERTY_EC2_CC_AMI_QUERY, value));
105 }
106 }
107
108 }