Class: Elasticsearch::Drain::AutoScaling
- Inherits:
-
Object
- Object
- Elasticsearch::Drain::AutoScaling
- Includes:
- Util
- Defined in:
- lib/elasticsearch/drain/autoscaling.rb
Instance Attribute Summary collapse
-
#asg ⇒ Object
readonly
EC2 AutoScaling Group name.
-
#region ⇒ Object
readonly
AWS region.
Instance Method Summary collapse
- #asg_client ⇒ Object
-
#describe_autoscaling_group ⇒ Struct
Describe an AutoScaling Group.
-
#describe_instances ⇒ Array<Aws::EC2::Types::Instance>
Get instances in an AutoScaling Group.
-
#desired_capacity ⇒ Integer
Gets the DesiredCapacity of an AutoScalingGroup.
- #detach_instance(instance_id) ⇒ Object
- #ec2_client ⇒ 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 ⇒ Integer
Gets the MinSize of an AutoScalingGroup.
-
#min_size=(count = 0) ⇒ Struct
Sets the MinSize of an AutoScalingGroup.
Methods included from Util
Constructor Details
#initialize(asg, region) ⇒ AutoScaling
Returns a new instance of AutoScaling.
14 15 16 17 18 19 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 14 def initialize(asg, region) @asg = asg @region = region @instances = nil @instance_ids = nil end |
Instance Attribute Details
#asg ⇒ Object (readonly)
EC2 AutoScaling Group name
8 9 10 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 8 def asg @asg end |
#region ⇒ Object (readonly)
AWS region
12 13 14 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 12 def region @region end |
Instance Method Details
#asg_client ⇒ Object
21 22 23 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 21 def asg_client Aws::AutoScaling::Client.new(region: region) end |
#describe_autoscaling_group ⇒ Struct
Describe an AutoScaling Group
58 59 60 61 62 63 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 58 def describe_autoscaling_group groups = asg_client.describe_auto_scaling_groups( auto_scaling_group_names: [asg] ) groups.auto_scaling_groups.first end |
#describe_instances ⇒ Array<Aws::EC2::Types::Instance>
Get instances in an AutoScaling Group
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 44 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 |
#desired_capacity ⇒ Integer
Gets the DesiredCapacity of an AutoScalingGroup
111 112 113 114 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 111 def desired_capacity group = describe_autoscaling_group group.desired_capacity end |
#detach_instance(instance_id) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 116 def detach_instance(instance_id) current_desired_capacity = desired_capacity asg_client.detach_instances( instance_ids: [instance_id], auto_scaling_group_name: asg, should_decrement_desired_capacity: true ) wait_until(current_desired_capacity - 1) do desired_capacity end end |
#ec2_client ⇒ Object
25 26 27 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 25 def ec2_client Aws::EC2::Client.new(region: region) end |
#find_instances_in_asg ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 29 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
65 66 67 68 69 70 71 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 65 def find_private_ips instances = describe_instances.clone return [] if instances.nil? instances.map!(&:private_ip_address) instances.flatten! instances end |
#instance(ipaddress) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 78 def instance(ipaddress) describe_instances if @instances.nil? instances = @instances.clone instance = instances.find { |i| i.private_ip_address == ipaddress } fail Errors::NodeNotFound if instance.nil? instance end |
#instances ⇒ Object
73 74 75 76 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 73 def instances find_instances_in_asg find_private_ips end |
#min_size ⇒ Integer
Gets the MinSize of an AutoScalingGroup
103 104 105 106 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 103 def min_size group = describe_autoscaling_group group.min_size end |
#min_size=(count = 0) ⇒ Struct
Sets the MinSize of an AutoScalingGroup
90 91 92 93 94 95 96 97 98 |
# File 'lib/elasticsearch/drain/autoscaling.rb', line 90 def min_size=(count = 0) asg_client.update_auto_scaling_group( auto_scaling_group_name: asg, min_size: count ) wait_until(count) do min_size end end |