Class: Elasticsearch::Drain::AutoScaling
- Inherits:
-
Object
- Object
- Elasticsearch::Drain::AutoScaling
- Defined in:
- lib/elasticsearch/drain/autoscaling.rb
Instance Attribute Summary collapse
-
#asg ⇒ Object
readonly
EC2 AutoScaling Group name.
-
#ec2_client ⇒ Object
readonly
EC2 Client.
Instance Method Summary collapse
- #describe_instances ⇒ Object
- #detach_instance(instance_id) ⇒ Object
- #find_instances_in_asg ⇒ Object
- #find_private_ips ⇒ Object
-
#initialize(asg, region) ⇒ AutoScaling
constructor
A new instance of AutoScaling.
- #instance(ipaddress) ⇒ Object
- #instances ⇒ Object
-
#min_size(count = 0) ⇒ Struct
Sets the MinSize of an AutoScalingGroup.
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
#asg ⇒ Object (readonly)
EC2 AutoScaling Group name
7 8 9 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 7 def asg @asg end |
#ec2_client ⇒ Object (readonly)
EC2 Client
11 12 13 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 11 def ec2_client @ec2_client end |
Instance Method Details
#describe_instances ⇒ Object
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_asg ⇒ Object
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_ips ⇒ Object
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 |
#instances ⇒ Object
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
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 |