Class: Hako::Schedulers::EcsElb

Inherits:
Object
  • Object
show all
Defined in:
lib/hako/schedulers/ecs_elb.rb

Instance Method Summary collapse

Constructor Details

#initialize(app_id, region, elb_config, dry_run:) ⇒ EcsElb

Returns a new instance of EcsElb.

Parameters:

  • app_id (String)
  • region (String)
  • elb_config (Hash)
  • dry_run (Boolean)


13
14
15
16
17
18
# File 'lib/hako/schedulers/ecs_elb.rb', line 13

def initialize(app_id, region, elb_config, dry_run:)
  @app_id = app_id
  @elb = Aws::ElasticLoadBalancing::Client.new(region: region)
  @elb_config = elb_config
  @dry_run = dry_run
end

Instance Method Details

#describe_load_balancerAws::ElasticLoadBalancing::Types::LoadBalancerDescription

Returns:

  • (Aws::ElasticLoadBalancing::Types::LoadBalancerDescription)


31
32
33
34
35
# File 'lib/hako/schedulers/ecs_elb.rb', line 31

def describe_load_balancer
  @elb.describe_load_balancers(load_balancer_names: [name]).load_balancer_descriptions[0]
rescue Aws::ElasticLoadBalancing::Errors::LoadBalancerNotFound
  nil
end

#destroynil

Returns:

  • (nil)


82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/hako/schedulers/ecs_elb.rb', line 82

def destroy
  if exist?
    if @dry_run
      Hako.logger.info("@elb.delete_load_balancer(load_balancer_name: #{name})")
    else
      @elb.delete_load_balancer(load_balancer_name: name)
      Hako.logger.info "Deleted ELB #{name}"
    end
  else
    Hako.logger.info "ELB #{name} doesn't exist"
  end
end

#exist?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/hako/schedulers/ecs_elb.rb', line 96

def exist?
  describe_load_balancer != nil
end

#find_or_create_load_balancer(front_port) ⇒ Boolean

Parameters:

  • front_port (Fixnum)

Returns:

  • (Boolean)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/hako/schedulers/ecs_elb.rb', line 39

def find_or_create_load_balancer(front_port)
  unless @elb_config
    return false
  end

  unless exist?
    listeners = @elb_config.fetch('listeners').map do |l|
      {
        protocol: l.fetch('protocol'),
        load_balancer_port: l.fetch('load_balancer_port'),
        instance_port: front_port,
        ssl_certificate_id: l.fetch('ssl_certificate_id', nil),
      }
    end
    tags = @elb_config.fetch('tags', {}).map { |k, v| { key: k, value: v.to_s } }
    lb = @elb.create_load_balancer(
      load_balancer_name: name,
      listeners: listeners,
      subnets: @elb_config.fetch('subnets'),
      security_groups: @elb_config.fetch('security_groups'),
      scheme: @elb_config.fetch('scheme', nil),
      tags: tags.empty? ? nil : tags,
    )
    Hako.logger.info "Created ELB #{lb.dns_name} with instance_port=#{front_port}"
  end
  true
end

#load_balancer_params_for_serviceHash

Returns:

  • (Hash)


106
107
108
109
110
111
112
# File 'lib/hako/schedulers/ecs_elb.rb', line 106

def load_balancer_params_for_service
  {
    load_balancer_name: name,
    container_name: @elb_config.fetch('container_name', 'front'),
    container_port: @elb_config.fetch('container_port', 80),
  }
end

#modify_attributesTypes::ModifyLoadBalancerAttributesOutput?

Returns:

  • (Types::ModifyLoadBalancerAttributesOutput, nil)


68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/hako/schedulers/ecs_elb.rb', line 68

def modify_attributes
  if @elb_config.key?('cross_zone_load_balancing')
    @elb.modify_load_balancer_attributes(
      load_balancer_name: name,
      load_balancer_attributes: {
        cross_zone_load_balancing: {
          enabled: @elb_config['cross_zone_load_balancing'],
        }
      }
    )
  end
end

#nameString

Returns:

  • (String)


101
102
103
# File 'lib/hako/schedulers/ecs_elb.rb', line 101

def name
  @elb_config.fetch('load_balancer_name', "hako-#{@app_id}")
end

#show_status(ecs_lb) ⇒ nil

Parameters:

  • ecs_lb (Aws::ECS::Types::LoadBalancer)

Returns:

  • (nil)


22
23
24
25
26
27
28
# File 'lib/hako/schedulers/ecs_elb.rb', line 22

def show_status(ecs_lb)
  lb = describe_load_balancer
  lb.listener_descriptions.each do |ld|
    l = ld.listener
    puts "  #{lb.dns_name}:#{l.load_balancer_port} -> #{ecs_lb.container_name}:#{ecs_lb.container_port}"
  end
end