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.suppliers;
20
21 import static com.google.common.collect.Iterables.find;
22 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMIs;
23 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.c1_medium;
24 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.c1_xlarge;
25 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.cc1_4xlarge;
26 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m1_large;
27 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m1_small32;
28 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m1_xlarge;
29 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m2_2xlarge;
30 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m2_4xlarge;
31 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.m2_xlarge;
32 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t1_micro;
33
34 import java.util.Set;
35
36 import javax.inject.Inject;
37 import javax.inject.Named;
38 import javax.inject.Singleton;
39
40 import org.jclouds.collect.Memoized;
41 import org.jclouds.compute.domain.Hardware;
42 import org.jclouds.domain.Location;
43 import org.jclouds.domain.LocationScope;
44 import org.jclouds.ec2.compute.suppliers.EC2HardwareSupplier;
45 import org.jclouds.location.Provider;
46
47 import com.google.common.base.Predicate;
48 import com.google.common.base.Supplier;
49 import com.google.common.collect.ImmutableSet;
50 import com.google.common.collect.ImmutableSet.Builder;
51
52
53
54
55
56 @Singleton
57 public class AWSEC2HardwareSupplier extends EC2HardwareSupplier {
58
59 private final Supplier<Set<? extends Location>> locations;
60 private final String[] ccAmis;
61
62 @Inject
63 public AWSEC2HardwareSupplier(@Memoized Supplier<Set<? extends Location>> locations, @Provider String providerName,
64 @Named(PROPERTY_EC2_CC_AMIs) String[] ccAmis) {
65 this.locations = locations;
66 this.ccAmis = ccAmis;
67 }
68
69 @Override
70 public Set<? extends Hardware> get() {
71 Builder<Hardware> sizes = ImmutableSet.builder();
72 for (String ccAmi : ccAmis) {
73 final String region = ccAmi.split("/")[0];
74 Location location = find(locations.get(), new Predicate<Location>() {
75
76 @Override
77 public boolean apply(Location input) {
78 return input.getScope() == LocationScope.REGION && input.getId().equals(region);
79 }
80
81 });
82 sizes.add(cc1_4xlarge().location(location).supportsImageIds(ccAmi).build());
83 }
84 sizes.addAll(ImmutableSet.<Hardware> of(t1_micro().build(), c1_medium().build(), c1_xlarge().build(), m1_large()
85 .build(), m1_small32().build(), m1_xlarge().build(), m2_xlarge().build(), m2_2xlarge().build(),
86 m2_4xlarge().build()));
87 return sizes.build();
88 }
89 }