class Kelbim::ELBWrapper::LoadBalancerCollection::LoadBalancer::ListenerCollection

Public Class Methods

create_listener_options(dsl, iam) click to toggle source
# File lib/kelbim/wrapper/listener-collection.rb, line 30
def create_listener_options(dsl, iam)
  lstnr_opts = {
    :protocol          => dsl.protocol,
    :port              => dsl.port,
    :instance_protocol => dsl.instance_protocol,
    :instance_port     => dsl.instance_port,
  }

  if (ss_name = dsl.server_certificate)
    ss = iam.server_certificates[ss_name]

    unless ss
      raise "Can't find ServerCertificate: #{ss_name} in #{load_balancer.vpc_id || :classic} > #{@load_balancer.name}"
    end

    lstnr_opts[:server_certificate] = ss.arn
  end

  if dsl.ssl_certificate_id
    lstnr_opts[:ssl_certificate_id] = dsl.ssl_certificate_id
  end

  return lstnr_opts
end
create_mock_listener(dsl, load_balancer) click to toggle source
# File lib/kelbim/wrapper/listener-collection.rb, line 9
def create_mock_listener(dsl, load_balancer)
  lstnr = OpenStruct.new({
    :protocol          => dsl.protocol,
    :port              => dsl.port,
    :instance_protocol => dsl.instance_protocol,
    :instance_port     => dsl.instance_port,
    :policies          => [], # Listener作成時に同時にPolicyを作成することはできない
    :load_balancer     => load_balancer,
  })

  if dsl.server_certificate
    lstnr.server_certificate = OpenStruct.new(:name => dsl.server_certificate)
  end

  if dsl.ssl_certificate_id
    lstnr.ssl_certificate_id = dsl.ssl_certificate_id
  end

  return lstnr
end
new(listeners, load_balancer, options) click to toggle source
# File lib/kelbim/wrapper/listener-collection.rb, line 56
def initialize(listeners, load_balancer, options)
  @listeners = listeners
  @load_balancer = load_balancer
  @options = options
end

Public Instance Methods

create(dsl) click to toggle source
# File lib/kelbim/wrapper/listener-collection.rb, line 68
def create(dsl)
  log_id = [[dsl.protocol, dsl.port], [dsl.instance_protocol, dsl.instance_port]].map {|i| i.inspect }.join(' => ')
  log_id = "#{@load_balancer.vpc_id || :classic} > #{@load_balancer.name} > #{log_id}"
  log(:info, 'Create Listener', :cyan, log_id)

  lstnr = nil

  if @options.dry_run
    lstnr = self.class.create_mock_listener(dsl, @load_balancer)
  else
    lstnr_opts = self.class.create_listener_options(dsl, @options.iam)

    # lstnr_optsは破壊的に更新される
    lstnr = @listeners.create(lstnr_opts.dup)
    @options.updated = true

    # XXX: 新規作成後、_descriptionはセットされない
    fix_new_listener(lstnr, lstnr_opts)
  end

  Listener.new(lstnr, @options)
end
each() { |listener| ... } click to toggle source
# File lib/kelbim/wrapper/listener-collection.rb, line 62
def each
  @listeners.each do |lstnr|
    yield(Listener.new(lstnr, @options))
  end
end

Private Instance Methods

fix_new_listener(lstnr, lstnr_opts) click to toggle source
# File lib/kelbim/wrapper/listener-collection.rb, line 92
def fix_new_listener(lstnr, lstnr_opts)
  lstnr.instance_variable_set(:@__server_certificate__, lstnr_opts[:server_certificate])

  def lstnr.server_certificate
    if @__server_certificate__
      OpenStruct.new(:name => @__server_certificate__)
    else
      nil
    end
  end

  def lstnr.policy_names; []; end
end