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 |