Class: Elasticsearch::Drain::AutoScaling

Inherits:
Object
  • Object
show all
Defined in:
lib/elasticsearch/drain/autoscaling.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(asg, region) ⇒ AutoScaling

Returns a new instance of AutoScaling.



13
14
15
16
17
18
19
# File 'lib/elasticsearch/drain/autoscaling.rb', line 13

def initialize(asg, region)
  @asg = asg
  @asg_client = Aws::AutoScaling::Client.new(region: region)
  @ec2_client = Aws::EC2::Client.new(region: region)
  @instances = nil
  @instance_ids = nil
end

Instance Attribute Details

#asgObject (readonly)

EC2 AutoScaling Group name



7
8
9
# File 'lib/elasticsearch/drain/autoscaling.rb', line 7

def asg
  @asg
end

#ec2_clientObject (readonly)

EC2 Client



11
12
13
# File 'lib/elasticsearch/drain/autoscaling.rb', line 11

def ec2_client
  @ec2_client
end

Instance Method Details

#describe_instancesObject



33
34
35
36
37
38
39
40
41
42
# File 'lib/elasticsearch/drain/autoscaling.rb', line 33

def describe_instances
  instances = []
  find_instances_in_asg if @instance_ids.nil?
  return [] if @instance_ids.empty?
  @ec2_client.describe_instances(instance_ids: @instance_ids).each do |page|
    instances << page.reservations.map(&:instances)
  end
  instances.flatten!
  @instances = instances
end

#detach_instance(instance_id) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/elasticsearch/drain/autoscaling.rb', line 74

def detach_instance(instance_id)
  resp = @asg_client.detach_instances(
    instance_ids: [instance_id],
    auto_scaling_group_name: asg,
    should_decrement_desired_capacity: true
  )
  resp.activities.first.status_code == 'Successful'
end

#find_instances_in_asgObject



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/elasticsearch/drain/autoscaling.rb', line 21

def find_instances_in_asg
  instances = []
  @asg_client.describe_auto_scaling_instances.each do |page|
    instances << page.auto_scaling_instances.map do |i|
      i.instance_id if i.auto_scaling_group_name == asg
    end
  end
  instances.flatten!
  instances.compact!
  @instance_ids = instances
end

#find_private_ipsObject



44
45
46
47
48
49
50
# File 'lib/elasticsearch/drain/autoscaling.rb', line 44

def find_private_ips
  instances = describe_instances.clone
  return [] if instances.nil?
  instances.map!(&:private_ip_address)
  instances.flatten!
  instances
end

#instance(ipaddress) ⇒ Object



57
58
59
60
61
# File 'lib/elasticsearch/drain/autoscaling.rb', line 57

def instance(ipaddress)
  describe_instances if @instances.nil?
  instances = @instances.clone
  instances.find { |i| i.private_ip_address == ipaddress }
end

#instancesObject



52
53
54
55
# File 'lib/elasticsearch/drain/autoscaling.rb', line 52

def instances
  find_instances_in_asg
  find_private_ips
end

#min_size(count = 0) ⇒ Struct

Sets the MinSize of an AutoScalingGroup

Parameters:

  • [FixNum] (Hash)

    a customizable set of options

Returns:

  • (Struct)

    Empty response from the sdk



67
68
69
70
71
72
# File 'lib/elasticsearch/drain/autoscaling.rb', line 67

def min_size(count = 0)
  @asg_client.update_auto_scaling_group(
    auto_scaling_group_name: asg,
    min_size: count
  )
end