class Miasma::Models::LoadBalancer::Rackspace

Public Instance Methods

balancer_all(options={}) click to toggle source

Return all load balancers

@param options [Hash] filter @return [Array<Models::LoadBalancer::Balancer>]

# File lib/miasma/contrib/rackspace/load_balancer.rb, line 80
def balancer_all(options={})
  result = request(
    :path => '/loadbalancers',
    :method => :get,
    :expects => 200
  )
  result.fetch(:body, 'loadBalancers', []).map do |lb|
    Balancer.new(
      self,
      :id => lb[:id],
      :name => lb[:name],
      :state => lb[:status] == 'ACTIVE' ? :active : :pending,
      :status => lb[:status],
      :created => lb.get(:created, :time),
      :updated => lb.get(:updated, :time),
      :public_addresses => lb['virtualIps'].map{|addr|
        if(addr[:type] == 'PUBLIC')
          Balancer::Address.new(
            :address => addr[:address],
            :version => addr['ipVersion'].sub('IPV', '').to_i
          )
        end
      }.compact,
      :private_addresses => lb['virtualIps'].map{|addr|
        if(addr[:type] != 'PUBLIC')
          Balancer::Address.new(
            :address => addr[:address],
            :version => addr['ipVersion'].sub('IPV', '').to_i
          )
        end
      }.compact
    ).valid_state
  end
end
balancer_destroy(balancer) click to toggle source

Delete load balancer

@param balancer [Models::LoadBalancer::Balancer] @return [TrueClass, FalseClass]

# File lib/miasma/contrib/rackspace/load_balancer.rb, line 72
def balancer_destroy(balancer)
  raise NotImplementedError
end
balancer_reload(balancer) click to toggle source

Reload the balancer data from the API

@param balancer [Models::LoadBalancer::Balancer] @return [Models::LoadBalancer::Balancer]

# File lib/miasma/contrib/rackspace/load_balancer.rb, line 23
def balancer_reload(balancer)
  if(balancer.persisted?)
    result = request(
      :path => "/loadbalancers/#{balancer.id}",
      :method => :get,
      :expects => 200
    )
    lb = result.get(:body, 'loadBalancer')
    balancer.load_data(
      :name => lb[:name],
      :name => lb[:name],
      :state => lb[:status] == 'ACTIVE' ? :active : :pending,
      :status => lb[:status],
      :created => lb.get(:created, :time),
      :updated => lb.get(:updated, :time),
      :public_addresses => lb['virtualIps'].map{|addr|
        if(addr[:type] == 'PUBLIC')
          Balancer::Address.new(
            :address => addr[:address],
            :version => addr['ipVersion'].sub('IPV', '').to_i
          )
        end
      }.compact,
      :private_addresses => lb['virtualIps'].map{|addr|
        if(addr[:type] != 'PUBLIC')
          Balancer::Address.new(
            :address => addr[:address],
            :version => addr['ipVersion'].sub('IPV', '').to_i
          )
        end
      }.compact,
      :servers => lb.fetch('nodes', []).map{|s|
        srv = self.api_for(:compute).servers.all.detect do |csrv|
          csrv.addresses.map(&:address).include?(s[:address])
        end
        if(srv)
          Balancer::Server.new(self.api_for(:compute), :id => srv.id)
        end
      }.compact
    ).valid_state
  else
    balancer
  end
end
balancer_save(balancer) click to toggle source

Save load balancer

@param balancer [Models::LoadBalancer::Balancer] @return [Models::LoadBalancer::Balancer]

# File lib/miasma/contrib/rackspace/load_balancer.rb, line 15
def balancer_save(balancer)
  raise NotImplementedError
end