1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package br.com.ingenieux.mojo.beanstalk.env;
18
19 import com.amazonaws.services.ec2.AmazonEC2;
20 import com.amazonaws.services.ec2.AmazonEC2Client;
21 import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
22 import com.amazonaws.services.ec2.model.DescribeInstancesResult;
23 import com.amazonaws.services.ec2.model.Reservation;
24 import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentResourcesRequest;
25 import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentResourcesResult;
26 import com.amazonaws.services.elasticbeanstalk.model.Instance;
27
28 import org.apache.commons.lang.StringUtils;
29 import org.apache.maven.plugins.annotations.Mojo;
30 import org.apache.maven.plugins.annotations.Parameter;
31
32 import java.io.File;
33 import java.io.PrintStream;
34 import java.util.ArrayList;
35 import java.util.List;
36
37 import br.com.ingenieux.mojo.beanstalk.AbstractNeedsEnvironmentMojo;
38
39
40
41
42
43
44
45
46
47
48 @Mojo(name = "dump-instances", requiresDirectInvocation = true)
49 public class DumpInstancesMojo extends AbstractNeedsEnvironmentMojo {
50
51
52
53
54 @Parameter(property = "beanstalk.outputFile")
55 private File outputFile;
56
57
58
59
60 @Parameter(property = "beanstalk.dumpPrivateAddresses", defaultValue = "false")
61 private boolean dumpPrivateAddresses;
62
63 @Override
64 protected Object executeInternal() throws Exception {
65 AmazonEC2 ec2 = clientFactory.getService(AmazonEC2Client.class);
66
67 DescribeEnvironmentResourcesResult envResources =
68 getService()
69 .describeEnvironmentResources(
70 new DescribeEnvironmentResourcesRequest().withEnvironmentId(curEnv.getEnvironmentId()).withEnvironmentName(curEnv.getEnvironmentName()));
71 List<String> instanceIds = new ArrayList<String>();
72
73 for (Instance i : envResources.getEnvironmentResources().getInstances()) {
74 instanceIds.add(i.getId());
75 }
76
77 DescribeInstancesResult ec2Instances = ec2.describeInstances(new DescribeInstancesRequest().withInstanceIds(instanceIds));
78
79 PrintStream printStream = null;
80
81 if (null != outputFile) {
82 printStream = new PrintStream(outputFile);
83 }
84
85 for (Reservation r : ec2Instances.getReservations()) {
86 for (com.amazonaws.services.ec2.model.Instance i : r.getInstances()) {
87 String ipAddress = dumpPrivateAddresses ? i.getPrivateIpAddress() : StringUtils.defaultString(i.getPublicIpAddress(), i.getPrivateDnsName());
88 String instanceId = i.getInstanceId();
89
90 if (null != printStream) {
91 printStream.println(ipAddress + " # " + instanceId);
92 } else {
93 getLog().info(" * " + instanceId + ": " + ipAddress);
94 }
95 }
96 }
97
98 if (null != printStream) {
99 printStream.close();
100 }
101
102 return null;
103 }
104 }