Package com.elastisys.scale.cloudadapters.aws.commons.tasks

Source Code of com.elastisys.scale.cloudadapters.aws.commons.tasks.AutoScalingGroupRequester

package com.elastisys.scale.cloudadapters.aws.commons.tasks;

import static com.google.common.collect.Iterables.getOnlyElement;
import static java.lang.String.format;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.amazonaws.services.autoscaling.model.AutoScalingGroup;
import com.amazonaws.services.autoscaling.model.DescribeAutoScalingGroupsRequest;
import com.amazonaws.services.autoscaling.model.DescribeAutoScalingGroupsResult;
import com.elastisys.scale.cloudadapters.aws.commons.client.AutoScalingClient;
import com.elastisys.scale.commons.net.retryable.Requester;
import com.elastisys.scale.commons.net.retryable.RetryableRequest;

/**
* A {@link Requester} that returns details regarding a specific Amazon
* {@link AutoScalingGroup}.
* <p/>
* It can, for example, be used in a {@link RetryableRequest} in concert with
* the {@link RetryUntilScalingGroupSizeReached} to wait for an Auto Scaling
* group to reach a given size.
*
*
*/
public class AutoScalingGroupRequester implements Requester<AutoScalingGroup> {

  static Logger logger = LoggerFactory
      .getLogger(AutoScalingGroupRequester.class);

  /** The API client to use. */
  private final AutoScalingClient client;
  /** The name of the Auto Scaling group. */
  private final String autoScalingGroup;

  /**
   * Constructs a new {@link AutoScalingGroupRequester}.
   *
   * @param autoScalingClient
   *            The API client to use.
   * @param autoScalingGroup
   *            The name of the Auto Scaling group.
   */
  public AutoScalingGroupRequester(AutoScalingClient autoScalingClient,
      String autoScalingGroup) {
    this.client = autoScalingClient;
    this.autoScalingGroup = autoScalingGroup;
  }

  @Override
  public AutoScalingGroup call() throws Exception {
    DescribeAutoScalingGroupsRequest request = new DescribeAutoScalingGroupsRequest()
        .withAutoScalingGroupNames(this.autoScalingGroup);
    DescribeAutoScalingGroupsResult result = this.client.getApi()
        .describeAutoScalingGroups(request);
    List<AutoScalingGroup> autoScalingGroups = result
        .getAutoScalingGroups();
    if (autoScalingGroups.isEmpty()) {
      throw new IllegalArgumentException(format(
          "Auto-scaling group '%s' doesn't exist in region '%s'.",
          this.autoScalingGroup, this.client.getRegion()));
    }
    return getOnlyElement(autoScalingGroups);
  }
}
TOP

Related Classes of com.elastisys.scale.cloudadapters.aws.commons.tasks.AutoScalingGroupRequester

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.