Package com.elastisys.scale.cloudadapters.aws.autoscaling.scalinggroup.client

Source Code of com.elastisys.scale.cloudadapters.aws.autoscaling.scalinggroup.client.AwsAutoScalingClient

package com.elastisys.scale.cloudadapters.aws.autoscaling.scalinggroup.client;

import static com.google.common.base.Preconditions.checkArgument;

import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.autoscaling.model.AutoScalingGroup;
import com.amazonaws.services.ec2.model.Instance;
import com.elastisys.scale.cloudadapters.aws.autoscaling.scalinggroup.AwsAsScalingGroupConfig;
import com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling.GetAutoScalingGroup;
import com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling.GetAutoScalingGroupInstances;
import com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling.SetDesiredAutoScalingGroupSize;
import com.elastisys.scale.cloudadapters.aws.commons.requests.autoscaling.TerminateAutoScalingGroupInstance;
import com.elastisys.scale.cloudadapters.aws.commons.requests.ec2.GetEc2Instance;
import com.google.common.util.concurrent.Atomics;

/**
* Standard implementation of the {@link AutoScalingClient} interface.
*
*
*
*/
public class AwsAutoScalingClient implements AutoScalingClient {
  private final AtomicReference<AwsAsScalingGroupConfig> config;

  public AwsAutoScalingClient() {
    this.config = Atomics.newReference();
  }

  @Override
  public void configure(AwsAsScalingGroupConfig configuration) {
    checkArgument(configuration != null, "null configuration");
    this.config.set(configuration);
  }

  @Override
  public AutoScalingGroup getAutoScalingGroup(String autoScalingGroupName) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    return new GetAutoScalingGroup(awsCredentials(), region(),
        autoScalingGroupName).call();
  }

  @Override
  public List<Instance> getAutoScalingGroupMembers(String autoScalingGroupName) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    return new GetAutoScalingGroupInstances(awsCredentials(), region(),
        autoScalingGroupName).call();
  }

  @Override
  public Instance getInstanceMetadata(String instanceId) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    return new GetEc2Instance(awsCredentials(), region(), instanceId)
        .call();
  }

  @Override
  public void setDesiredSize(String autoScalingGroupName, int desiredSize) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    new SetDesiredAutoScalingGroupSize(awsCredentials(), config()
        .getRegion(), autoScalingGroupName, desiredSize).call();
  }

  @Override
  public void terminateInstance(String autoScalingGroupName, String instanceId) {
    checkArgument(isConfigured(), "can't use client before it's configured");

    new TerminateAutoScalingGroupInstance(awsCredentials(), region(),
        autoScalingGroupName, instanceId).call();
  }

  private boolean isConfigured() {
    return this.config.get() != null;
  }

  private AwsAsScalingGroupConfig config() {
    return this.config.get();
  }

  private AWSCredentials awsCredentials() {
    return new BasicAWSCredentials(config().getAwsAccessKeyId(), config()
        .getAwsSecretAccessKey());
  }

  private String region() {
    return config().getRegion();
  }
}
TOP

Related Classes of com.elastisys.scale.cloudadapters.aws.autoscaling.scalinggroup.client.AwsAutoScalingClient

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.