View Javadoc

1   package org.kuali.maven.ec2;
2   
3   import java.util.ArrayList;
4   import java.util.Collections;
5   import java.util.List;
6   
7   import org.apache.commons.lang.StringUtils;
8   import org.apache.maven.plugin.MojoExecutionException;
9   import org.kuali.maven.ec2.pojo.Column;
10  import org.kuali.maven.ec2.pojo.Row;
11  import org.kuali.maven.ec2.pojo.RowComparator;
12  import org.kuali.maven.ec2.pojo.Table;
13  
14  import com.amazonaws.services.ec2.AmazonEC2;
15  import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
16  import com.amazonaws.services.ec2.model.DescribeInstancesResult;
17  import com.amazonaws.services.ec2.model.GroupIdentifier;
18  import com.amazonaws.services.ec2.model.Instance;
19  import com.amazonaws.services.ec2.model.Reservation;
20  
21  /**
22   * Connect to EC2 and list instances associated with this account
23   *
24   * @goal describeinstances
25   */
26  public class DescribeInstancesMojo extends AbstractEC2Mojo {
27  
28      /**
29       * The tag to display for each instance.
30       *
31       * @parameter expression="${ec2.tag}" default-value="Name"
32       */
33      private String tag;
34  
35      /**
36       * A list of instance id's to display information about
37       *
38       * @parameter
39       */
40      private List<String> instanceIds;
41  
42      @Override
43      public void execute() throws MojoExecutionException {
44          AmazonEC2 client = getEC2Client();
45          DescribeInstancesRequest request = new DescribeInstancesRequest();
46          request.setInstanceIds(instanceIds);
47          DescribeInstancesResult result = client.describeInstances(request);
48          List<Instance> instances = getInstances(result.getReservations());
49          Table table = getTable(instances);
50          getLog().info(getDisplay(table.getColumns()));
51          for (Row row : table.getRows()) {
52              getLog().info(getDisplay(table, row));
53          }
54      }
55  
56      protected String getDisplay(List<Column> columns) {
57          StringBuilder sb = new StringBuilder();
58          for (Column c : columns) {
59              sb.append(StringUtils.rightPad(c.getTitle(), c.getWidth(), " ") + "  ");
60          }
61          return sb.toString();
62      }
63  
64      protected String getDisplay(Table table, Row row) {
65          StringBuilder sb = new StringBuilder();
66          List<String> elements = row.getElements();
67          for (int i = 0; i < elements.size(); i++) {
68              int width = table.getColumns().get(i).getWidth();
69              sb.append(StringUtils.rightPad(elements.get(i), width, " ") + "  ");
70          }
71          return sb.toString();
72      }
73  
74      protected String getSecurityGroupsDisplay(Instance i) {
75          List<GroupIdentifier> groups = i.getSecurityGroups();
76          StringBuilder sb = new StringBuilder();
77          for (int j = 0; j < groups.size(); j++) {
78              if (j != 0) {
79                  sb.append(",");
80              }
81              GroupIdentifier group = groups.get(j);
82              sb.append(group.getGroupName());
83          }
84          return sb.toString();
85      }
86  
87      protected List<Row> getRows(List<Instance> instances) {
88          List<Row> rows = new ArrayList<Row>();
89          for (Instance i : instances) {
90              Row row = new Row();
91              List<String> elements = new ArrayList<String>();
92              elements.add(getTagValue(i, tag));
93              elements.add(i.getInstanceId());
94              elements.add(i.getImageId());
95              elements.add(i.getPlacement().getAvailabilityZone());
96              elements.add(i.getInstanceType());
97              elements.add(i.getState().getName());
98              elements.add(getSecurityGroupsDisplay(i));
99              elements.add(i.getKeyName());
100             row.setElements(elements);
101             rows.add(row);
102         }
103         Collections.sort(rows, new RowComparator());
104         Collections.reverse(rows);
105         return rows;
106     }
107 
108     protected List<Column> getColumns(List<Row> rows) {
109         List<Column> columns = new ArrayList<Column>();
110         columns.add(new Column(tag));
111         columns.add(new Column("Instance"));
112         columns.add(new Column("AMI"));
113         columns.add(new Column("Availability Zone"));
114         columns.add(new Column("Type"));
115         columns.add(new Column("State"));
116         columns.add(new Column("Security Groups"));
117         columns.add(new Column("Key Pair"));
118         setWidths(columns, rows);
119         return columns;
120     }
121 
122     protected void setWidths(List<Column> columns, List<Row> rows) {
123         for (int i = 0; i < rows.size(); i++) {
124             List<String> elements = rows.get(i).getElements();
125             for (int j = 0; j < elements.size(); j++) {
126                 Column c = columns.get(j);
127                 c.setWidth(Math.max(c.getWidth(), elements.get(j).length()));
128             }
129         }
130     }
131 
132     protected Table getTable(List<Instance> instances) {
133         Table table = new Table();
134         table.setRows(getRows(instances));
135         table.setColumns(getColumns(table.getRows()));
136         return table;
137     }
138 
139     protected List<Instance> getInstances(List<Reservation> reservations) {
140         List<Instance> instances = new ArrayList<Instance>();
141         for (Reservation r : reservations) {
142             instances.addAll(r.getInstances());
143         }
144         return instances;
145     }
146 
147     public String getTag() {
148         return tag;
149     }
150 
151     public void setTag(String displayTag) {
152         this.tag = displayTag;
153     }
154 
155 }