View Javadoc
1   /**
2    * Copyright 2004-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.common.aws.ec2.util;
17  
18  import java.util.ArrayList;
19  import java.util.Collections;
20  import java.util.List;
21  import java.util.Map;
22  
23  import org.kuali.common.aws.ec2.model.EC2ServiceContext;
24  import org.kuali.common.aws.ec2.model.LaunchInstanceContext;
25  import org.kuali.common.aws.ec2.model.Regions;
26  import org.kuali.common.aws.ec2.model.security.KualiSecurityGroup;
27  import org.kuali.common.util.Assert;
28  import org.kuali.common.util.CollectionUtils;
29  import org.kuali.common.util.execute.Executable;
30  import org.slf4j.Logger;
31  import org.slf4j.LoggerFactory;
32  
33  import com.google.common.base.Optional;
34  import com.google.common.collect.ImmutableList;
35  
36  public class ShowLaunchConfig implements Executable {
37  
38  	private static final Logger logger = LoggerFactory.getLogger(ShowLaunchConfig.class);
39  
40  	private final EC2ServiceContext serviceContext;
41  	private final LaunchInstanceContext instanceContext;
42  	private final boolean skip;
43  
44  	public ShowLaunchConfig(EC2ServiceContext serviceContext, LaunchInstanceContext instanceContext) {
45  		this(serviceContext, instanceContext, false);
46  	}
47  
48  	public ShowLaunchConfig(EC2ServiceContext serviceContext, LaunchInstanceContext instanceContext, boolean skip) {
49  		Assert.noNulls(serviceContext, instanceContext);
50  		this.serviceContext = serviceContext;
51  		this.instanceContext = instanceContext;
52  		this.skip = skip;
53  	}
54  
55  	@Override
56  	public void execute() {
57  		if (skip) {
58  			return;
59  		}
60  		String accessKey = serviceContext.getCredentials().getAWSAccessKeyId();
61  		String regionName = getRegionName(serviceContext);
62  		String regionLocation = getRegionLocation(serviceContext);
63  		String availabilityZone = getAvailabilityZone(instanceContext);
64  
65  		logger.info("---------- Launching EC2 Instance ----------");
66  		logger.info("AWS Access Key: {}", accessKey);
67  		logger.info("Location: {}", regionLocation);
68  		logger.info("Region: {}", regionName);
69  		logger.info("Zone: {}", availabilityZone);
70  		logger.info("AMI: {}", instanceContext.getAmi());
71  		logger.info("Type: {}", instanceContext.getType().toString());
72  		logger.info("Key: {}", instanceContext.getPublicKey().getName());
73  		logger.info("Security Groups: {}", CollectionUtils.asCSV(getSecurityGroups(instanceContext)));
74  		logger.info("--------------------------------------------");
75  	}
76  
77  	protected List<String> getSecurityGroups(LaunchInstanceContext context) {
78  		List<String> names = new ArrayList<String>();
79  		for (KualiSecurityGroup group : context.getSecurityGroups()) {
80  			names.add(group.getName());
81  		}
82  		Collections.sort(names);
83  		return ImmutableList.copyOf(names);
84  	}
85  
86  	protected String getAvailabilityZone(LaunchInstanceContext context) {
87  		Optional<String> zone = context.getAvailabilityZone();
88  		if (!zone.isPresent()) {
89  			return "no preference";
90  		} else {
91  			return zone.get();
92  		}
93  	}
94  
95  	protected String getRegionLocation(EC2ServiceContext context) {
96  		Map<String, Regions> map = Regions.asMap();
97  		Regions region = map.get(context.getRegion());
98  		if (region == null) {
99  			// They've supplied a region we don't know about
100 			return "unknown";
101 		} else {
102 			return region.getLocation();
103 		}
104 	}
105 
106 	protected String getRegionName(EC2ServiceContext context) {
107 		return context.getRegion();
108 	}
109 
110 	public EC2ServiceContext getServiceContext() {
111 		return serviceContext;
112 	}
113 
114 	public LaunchInstanceContext getInstanceContext() {
115 		return instanceContext;
116 	}
117 
118 	public boolean isSkip() {
119 		return skip;
120 	}
121 
122 }