Sha256: 7ad9633002a38a69ac9343e9897b7dbe7a36382f88a7b4f6e53e34010fbeb97f

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true
require 'aws-sdk'
require 'hako'

module Hako
  module Schedulers
    class EcsElb
      def initialize(app_id, elb, elb_config)
        @app_id = app_id
        @elb = elb
        @elb_config = elb_config
      end

      def describe_load_balancer
        @elb.describe_load_balancers(load_balancer_names: [name]).load_balancer_descriptions[0]
      end

      def find_or_create_load_balancer(front_port)
        if @elb_config
          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
            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: @elb_config.fetch('tags', {}).map { |k, v| { key: k, value: v.to_s } },
            )
            Hako.logger.info "Created ELB #{lb.dns_name} with instance_port=#{front_port}"
          end
          name
        end
      end

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

      def exist?
        describe_load_balancer
        true
      rescue Aws::ElasticLoadBalancing::Errors::LoadBalancerNotFound
        false
      end

      def name
        "hako-#{@app_id}"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hako-0.13.3 lib/hako/schedulers/ecs_elb.rb
hako-0.13.2 lib/hako/schedulers/ecs_elb.rb