class BuildCloud::LoadBalancer

Public Class Methods

new( fog_interfaces, log, options = {} ) click to toggle source
# File lib/build-cloud/loadbalancer.rb, line 7
def initialize ( fog_interfaces, log, options = {} )

    @elb     = fog_interfaces[:elb]
    @log     = log
    @options = options

    @log.debug( options.inspect )

    required_options(:id, :listeners)
    require_one_of(:security_groups, :security_group_names)
    require_one_of(:subnet_ids, :subnet_names)
    require_one_of(:vpc_id, :vpc_name)

end

Public Instance Methods

create() click to toggle source
# File lib/build-cloud/loadbalancer.rb, line 22
def create
    
    return if exists?

    @log.info( "Creating load balancer #{@options[:id]}" )

    options = @options.dup

    unless options[:security_groups]

        options[:security_groups] = []

        options[:security_group_names].each do |sg|
            options[:security_groups] << BuildCloud::SecurityGroup.get_id_by_name( sg )
        end

        options.delete(:security_group_names)

    end

    unless options[:subnet_ids]

        options[:subnet_ids] = []

        options[:subnet_names].each do |sn|
            options[:subnet_ids] << BuildCloud::Subnet.get_id_by_name( sn )
        end

        options.delete(:subnet_names)

    end

    unless options[:vpc_id]

        options[:vpc_id] = BuildCloud::VPC.get_id_by_name( options[:vpc_name] )
        options.delete(:vpc_name)

    end

    options.delete(:listeners)

    elb = @elb.load_balancers.new( options )
    elb.save

    # Remove first port 80 listener - we can add it back if we need
    elb.listeners.select { |l| l.instance_port == 80 }.first.destroy

    @options[:listeners].each do |listener_options|

        [:instance_port, :instance_protocol, :lb_port, :protocol].each do |o|
            raise "Listeners need #{o.to_s}" unless listener_options.has_key?(o)
        end

        elb.listeners.new( listener_options ).save

    end 

    unless @options[:instance_names].nil?

        options[:instance_ids] = []

        options[:instance_names].each do |i|
            options[:instance_ids] << BuildCloud::Instance.get_id_by_name( i )
        end

        @log.info( options[:instance_ids] )
        @log.info( "#{options[:instance_ids].inspect}" )

        options.delete(options[:instance_names])

        elb.register_instances(options[:instance_ids])

    end

    @elb.configure_health_check( elb.id, options[:health_check] )

    @log.debug( elb.inspect )

end
delete() click to toggle source
# File lib/build-cloud/loadbalancer.rb, line 108
def delete

    return unless exists?

    @log.info( "Deleting load balancer #{@options[:id]}" )

    fog_object.destroy

end
fog_object()
Alias for: read
read() click to toggle source
# File lib/build-cloud/loadbalancer.rb, line 102
def read
    @elb.load_balancers.select { |l| l.id == @options[:id] }.first
end
Also aliased as: fog_object