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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 import static com.google.common.collect.Iterables.concat;
40 import static com.google.common.collect.Maps.newLinkedHashMap;
41 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMIs;
42 import static org.jclouds.ec2.options.DescribeImagesOptions.Builder.imageIds;
43 import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
44
45 import java.util.Map;
46 import java.util.Set;
47 import java.util.Map.Entry;
48
49 import javax.inject.Inject;
50 import javax.inject.Named;
51 import javax.inject.Singleton;
52
53 import org.jclouds.compute.domain.Image;
54 import org.jclouds.ec2.compute.domain.RegionAndName;
55 import org.jclouds.ec2.compute.functions.EC2ImageParser;
56 import org.jclouds.ec2.compute.strategy.DescribeImagesParallel;
57 import org.jclouds.ec2.compute.suppliers.RegionAndNameToImageSupplier;
58 import org.jclouds.ec2.options.DescribeImagesOptions;
59 import org.jclouds.location.Region;
60
61
62
63
64
65 @Singleton
66 public class AWSRegionAndNameToImageSupplier extends RegionAndNameToImageSupplier {
67
68 private final String[] ccAmis;
69
70 @Inject
71 AWSRegionAndNameToImageSupplier(@Region Set<String> regions, DescribeImagesParallel describer,
72 @Named(PROPERTY_EC2_CC_AMIs) String[] ccAmis, @Named(PROPERTY_EC2_AMI_OWNERS) String[] amiOwners,
73 EC2ImageParser parser, Map<RegionAndName, Image> images) {
74 super(regions, describer, amiOwners, parser, images);
75 this.ccAmis = ccAmis;
76 }
77
78 public Iterable<Entry<String, DescribeImagesOptions>> getDescribeQueriesForOwnersInRegions(Set<String> regions,
79 String[] amiOwners) {
80 return concat(super.getDescribeQueriesForOwnersInRegions(regions, amiOwners), ccAmisToDescribeQueries(ccAmis)
81 .entrySet());
82 }
83
84 static Map<String, DescribeImagesOptions> ccAmisToDescribeQueries(String[] ccAmis) {
85 Map<String, DescribeImagesOptions> queries = newLinkedHashMap();
86 for (String from : ccAmis) {
87 queries.put(from.split("/")[0], imageIds(from.split("/")[1]));
88 }
89 return queries;
90 }
91
92 }