Package com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling

Source Code of com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling.CreateLaunchConfiguration

package com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.Callable;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.services.autoscaling.model.CreateLaunchConfigurationRequest;
import com.amazonaws.services.autoscaling.model.InstanceMonitoring;
import com.elastisys.scale.cloudadapters.aws.commons.client.AmazonApiUtils;
import com.elastisys.scale.commons.util.io.IoUtils;
import com.google.common.base.Charsets;

/**
* A {@link Callable} task that, when executed, requests the creation of an AWS
* Launch Configuration.
*
*
*
*/
public class CreateLaunchConfiguration extends AmazonAutoScalingRequest<Void> {
  /** The name of the auto-scaling launch configuration create. */
  private final String launchConfigurationName;

  /**
   * The AWS security group(s) to use for instances created from the launch
   * configuration.
   */
  private final List<String> securityGroups;
  /**
   * The EC2 key pair to use for instances created from the launch
   * configuration.
   */
  private final String keyPair;

  /**
   * The EC2 instance type to use for instances created from the launch
   * configuration.
   */
  private final String instanceType;
  /**
   * The AMI (amazon machine image) id to use for instances created from the
   * launch configuration.
   */
  private final String imageId;

  /**
   * The user data boot script to use for instances created from the launch
   * configuration.
   */
  private final String bootScript;

  /**
   * <code>true</code> for detailed (one-minute) CloudWatch monitoring,
   * <code>false</code> for basic (five-minute) monitoring.
   */
  private final boolean detailedMonitoring;

  /**
   * Constructs a new {@link CreateLaunchConfiguration} task with boot script
   * passed as a {@link String}.
   *
   * @param awsCredentials
   * @param region
   * @param launchConfigurationName
   * @param securityGroups
   * @param keyPair
   * @param instanceType
   * @param imageId
   * @param bootScript
   * @param detailedMonitoring
   */
  public CreateLaunchConfiguration(AWSCredentials awsCredentials,
      String region, String launchConfigurationName,
      List<String> securityGroups, String keyPair, String instanceType,
      String imageId, String bootScript, boolean detailedMonitoring) {
    super(awsCredentials, region);
    this.launchConfigurationName = launchConfigurationName;
    this.securityGroups = securityGroups;
    this.keyPair = keyPair;
    this.instanceType = instanceType;
    this.imageId = imageId;
    this.bootScript = bootScript;
    this.detailedMonitoring = detailedMonitoring;
  }

  /**
   * Constructs a new {@link CreateLaunchConfiguration} task with boot script
   * passed as a {@link File} reference.
   *
   * @param awsCredentials
   * @param region
   * @param launchConfigurationName
   * @param securityGroups
   * @param keyPair
   * @param instanceType
   * @param imageId
   * @param bootScriptFile
   * @param detailedMonitoring
   *
   * @throws FileNotFoundException
   * @throws IOException
   */
  public CreateLaunchConfiguration(AWSCredentials awsCredentials,
      String region, String launchConfigurationName,
      List<String> securityGroups, String keyPair, String instanceType,
      String imageId, File bootScriptFile, boolean detailedMonitoring)
      throws FileNotFoundException, IOException {
    this(awsCredentials, region, launchConfigurationName, securityGroups,
        keyPair, instanceType, imageId, IoUtils.toString(
            new FileInputStream(bootScriptFile), Charsets.UTF_8),
        detailedMonitoring);
  }

  @Override
  public Void call() {
    CreateLaunchConfigurationRequest request = new CreateLaunchConfigurationRequest()
        .withLaunchConfigurationName(this.launchConfigurationName)
        .withImageId(this.imageId)
        .withInstanceType(this.instanceType)
        .withUserData(AmazonApiUtils.base64Encode(this.bootScript))
        .withSecurityGroups(this.securityGroups)
        .withKeyName(this.keyPair)
        .withInstanceMonitoring(
            new InstanceMonitoring()
                .withEnabled(this.detailedMonitoring));
    getClient().getApi().createLaunchConfiguration(request);
    return null;
  }

}
TOP

Related Classes of com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling.CreateLaunchConfiguration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.