Class: Miasma::Models::LoadBalancer::Rackspace

Inherits:
Miasma::Models::LoadBalancer show all
Includes:
Contrib::OpenStackApiCore::ApiCommon, Contrib::RackspaceApiCore::ApiCommon
Defined in:
lib/miasma/contrib/rackspace/load_balancer.rb

Instance Method Summary collapse

Methods included from Contrib::RackspaceApiCore::ApiCommon

included

Methods included from Contrib::OpenStackApiCore::ApiCommon

#connection, #endpoint, included, #open_stack_api, #token

Methods inherited from Miasma::Models::LoadBalancer

#balancers

Methods inherited from Types::Api

#api_for, #connect, #connection, #endpoint, #format_response, #initialize, #make_request, #provider, #request

Methods included from Utils::Memoization

#_memo, #clear_memoizations!, #memoize, #unmemoize

Methods included from Utils::Lazy

included

Constructor Details

This class inherits a constructor from Miasma::Types::Api

Instance Method Details

#balancer_all(options = {}) ⇒ Array<Models::LoadBalancer::Balancer>

Return all load balancers

Parameters:

  • options (Hash) (defaults to: {})

    filter

Returns:



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# 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) ⇒ TrueClass, FalseClass

Delete load balancer

Parameters:

Returns:

  • (TrueClass, FalseClass)

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/miasma/contrib/rackspace/load_balancer.rb', line 72

def balancer_destroy(balancer)
  raise NotImplementedError
end

#balancer_reload(balancer) ⇒ Models::LoadBalancer::Balancer

Reload the balancer data from the API



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 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) ⇒ Models::LoadBalancer::Balancer

Save load balancer

Parameters:

Returns:

Raises:

  • (NotImplementedError)


15
16
17
# File 'lib/miasma/contrib/rackspace/load_balancer.rb', line 15

def balancer_save(balancer)
  raise NotImplementedError
end