package com.sequenceiq.samples.web.controller; import com.amazonaws.services.autoscaling.model.AutoScalingGroup; import com.amazonaws.services.autoscaling.model.AutoScalingInstanceDetails; import com.amazonaws.services.autoscaling.model.LaunchConfiguration; import com.amazonaws.services.autoscaling.model.Tag; import com.amazonaws.services.ec2.model.SpotPrice; import com.sequenceiq.samples.core.service.AutoScalingService; import com.sequenceiq.samples.model.AwsLaunchConfiguration; import com.sequenceiq.samples.model.UpdateAutoScalingGroupRequest; import com.sequenceiq.samples.web.transformers.LaunchConfigurationTransformer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; /** * User: doktoric */ @Controller public class AutoScalingController { @Autowired private AwsCredentialsFactory awsCredentialsFactory; @Autowired private AutoScalingService awsec2Service; @Autowired private LaunchConfigurationTransformer transformer; @RequestMapping(value = "/autoscalinggroup", method = RequestMethod.GET) @ResponseBody public List<AutoScalingGroup> listAutoScalingGroups(@RequestParam("accessKey") String accessKey, @RequestParam("secretKey") String secretKey) { return awsec2Service.describeAmazonAutoScalingGroups(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey)); } @RequestMapping(value = "/autoscalinggroup", method = RequestMethod.POST) @ResponseBody public void createAutoScalingGroup(@RequestParam("accessKey") String accessKey, @RequestParam("secretKey") String secretKey, @RequestBody Map<String, String> body) { awsec2Service.createAmazonAutoScalingGroup( awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey), body.get("autoScalingGroupName"), Integer.valueOf(body.get("maxSize")), Integer.valueOf(body.get("minSize")), Integer.valueOf(body.get("defaultCooldown")), body.get("launchConfigurationName"), Collections.<String> emptyList(), Collections.<Tag> emptyList()); } @RequestMapping(value = "/autoscalinggroup", method = RequestMethod.PUT) @ResponseBody public void updateAutoScalingGroup(@RequestParam("accessKey") String accessKey, @RequestParam("secretKey") String secretKey, @RequestBody UpdateAutoScalingGroupRequest updateAutoScalingGroupRequest) { if (updateAutoScalingGroupRequest.getCooldown() != null) { awsec2Service.updateAmazonAutoScalingGroupCoolDown(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey), updateAutoScalingGroupRequest.getAutoScalingGroupName(), updateAutoScalingGroupRequest.getCooldown()); } if (updateAutoScalingGroupRequest.getMinSize() != null) { awsec2Service.updateAmazonAutoScalingGroupMinSize(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey), updateAutoScalingGroupRequest.getAutoScalingGroupName(), updateAutoScalingGroupRequest.getMinSize()); } if (updateAutoScalingGroupRequest.getMaxSize() != null) { awsec2Service.updateAmazonAutoScalingGroupMaxSize(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey), updateAutoScalingGroupRequest.getAutoScalingGroupName(), updateAutoScalingGroupRequest.getMaxSize()); } } @RequestMapping(value = "/autoscalinginstance", method = RequestMethod.GET) @ResponseBody public List<AutoScalingInstanceDetails> listAutoScalingInstances(@RequestParam("accessKey") String accessKey, @RequestParam("secretKey") String secretKey) { return awsec2Service.describeAmazonAutoScalingInstances(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey)); } @RequestMapping(value = "/spotprice/list", method = RequestMethod.GET) @ResponseBody public List<SpotPrice> listSpotPriceHistory(@RequestParam("accessKey") String accessKey, @RequestParam("secretKey") String secretKey) { return awsec2Service.describeSpotPriceHistory(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey)); } @RequestMapping(value = "/launchconfig", method = RequestMethod.GET) @ResponseBody public List<AwsLaunchConfiguration> listLaunchConfigurations(@RequestParam("accessKey") String accessKey, @RequestParam("secretKey") String secretKey) { List<AwsLaunchConfiguration> list = new ArrayList<>(); for (LaunchConfiguration item : awsec2Service .describeAmazonLaunchConfigurations(awsCredentialsFactory.createSimpleAWSCredentials(accessKey, secretKey))) { list.add(transformer.transform(item)); } return list; } }