class Kelbim::ELBWrapper::LoadBalancerCollection

Public Class Methods

new(load_balancers, options) click to toggle source
# File lib/kelbim/wrapper/load-balancer-collection.rb, line 6
def initialize(load_balancers, options)
  @load_balancers = load_balancers
  @options = options
end

Public Instance Methods

create(dsl, vpc) click to toggle source
# File lib/kelbim/wrapper/load-balancer-collection.rb, line 17
def create(dsl, vpc)
  log(:info, 'Create LoadBalancer', :cyan, "#{vpc || :classic} > #{dsl.name}")

  if @options.dry_run
    listeners = dsl.listeners

    lb = OpenStruct.new({
      :id           => "<new load balancer name=#{dsl.name}>",
      :name         => dsl.name,
      :vpc_id       => vpc,
      :instances    => [], # instancesはLoadBalancerの処理で更新
      :scheme       => dsl.scheme,
      :health_check => {}, # health_checkはLoadBalancerの処理で更新
      :attributes   => {}, # attributesはLoadBalancerの処理で更新
    })

    lb.listeners = dsl.listeners.map do |lstnr|
      LoadBalancer::ListenerCollection.create_mock_listener(lstnr, lb)
    end

    if vpc
      lb.subnets = dsl.subnets.map {|i| OpenStruct.new(:id => i) }
      sg_names = @options.security_group_names[vpc] || {}
      lb.security_group_ids = dsl.security_groups {|i| sg_names.key(i) || i }
    else
      lb.availability_zones = dsl.availability_zones.map {|i| OpenStruct.new(:name => i) }
    end
  else
    opts = {
      :scheme    => dsl.scheme,
      :listeners => [],
    }

    # instancesはLoadBalancerの処理で更新

    dsl.listeners.each do |lstnr|
      lstnr_opts = LoadBalancer::ListenerCollection.create_listener_options(lstnr, @options.iam)
      opts[:listeners] << lstnr_opts
    end

    if vpc
      opts[:subnets] = dsl.subnets.map {|i| AWS::EC2::Subnet.new(i) }
      sg_names = @options.security_group_names[vpc] || {}

      opts[:security_groups] = dsl.security_groups.map do |i|
        AWS::EC2::SecurityGroup.new(sg_names.key(i) || i)
      end
    else
      opts[:availability_zones] = dsl.availability_zones.map {|i|  AWS::EC2::AvailabilityZone.new(i) }
    end

    # health_check、attributesはLoadBalancerの処理で更新
    lb = @load_balancers.create(dsl.name, opts)
    @options.updated = true
  end

  LoadBalancer.new(lb, @options)
end
each() { |load_balancer| ... } click to toggle source
# File lib/kelbim/wrapper/load-balancer-collection.rb, line 11
def each
  @load_balancers.each do |lb|
    yield(LoadBalancer.new(lb, @options))
  end
end