class Miasma::Models::AutoScale::Aws

AWS autoscaling API

Constants

API_SERVICE

Service name of the API

API_VERSION

Supported version of the AutoScaling API

Public Instance Methods

group_all(options = {}) click to toggle source

Return all auto scale groups

@param options [Hash] filter @return [Array<Models::AutoScale::Group>]

# File lib/miasma/contrib/aws/auto_scale.rb, line 84
def group_all(options = {})
  load_group_data
end
group_destroy(group) click to toggle source

Delete auto scale group

@param group [Models::AutoScale::Group] @return [TrueClass, FalseClass]

# File lib/miasma/contrib/aws/auto_scale.rb, line 40
def group_destroy(group)
  raise NotImplemented
end
group_reload(group) click to toggle source

Reload the group data from the API

@param group [Models::AutoScale::Group] @return [Models::AutoScale::Group]

# File lib/miasma/contrib/aws/auto_scale.rb, line 29
def group_reload(group)
  if group.id || group.name
    load_group_data(group)
  end
  group
end
group_save(group) click to toggle source

Save auto scale group

@param group [Models::AutoScale::Group] @return [Models::AutoScale::Group]

# File lib/miasma/contrib/aws/auto_scale.rb, line 21
def group_save(group)
  raise NotImplementedError
end
load_group_data(group = nil) click to toggle source

Fetch groups or update provided group data

@param group [Models::AutoScale::Group] @return [Array<Models::AutoScale::Group>]

# File lib/miasma/contrib/aws/auto_scale.rb, line 48
def load_group_data(group = nil)
  params = Smash.new("Action" => "DescribeAutoScalingGroups")
  if group
    params.merge("AutoScalingGroupNames.member.1" => group.id || group.name)
  end
  result = all_result_pages(nil, :body,
                            "DescribeAutoScalingGroupsResponse", "DescribeAutoScalingGroupsResult",
                            "AutoScalingGroups", "member") do |options|
    request(
      :method => :post,
      :path => "/",
      :form => options.merge(params),
    )
  end.map do |grp|
    (group || Group.new(self)).load_data(
      :id => grp["AutoScalingGroupName"],
      :name => grp["AutoScalingGroupName"],
      :servers => [grp.get("Instances", "member")].flatten(1).compact.map { |i|
        Group::Server.new(self, :id => i["InstanceId"])
      },
      :minimum_size => grp["MinSize"],
      :maximum_size => grp["MaxSize"],
      :status => grp["Status"],
      :load_balancers => [
        grp.get("LoadBalancerNames", "member"),
      ].flatten(1).compact.map { |i|
        Group::Balancer.new(self, :id => i, :name => i)
      },
    ).valid_state
  end
end