class Miasma::Models::Compute::OpenStack

Constants

SERVER_STATE_MAP

@return [Smash] map state to valid internal values

Public Instance Methods

server_all() click to toggle source
# File lib/miasma/contrib/open_stack/compute.rb, line 73
def server_all
  result = request(
    :method => :get,
    :path => '/servers/detail'
  )
  result[:body].fetch(:servers, []).map do |srv|
    Server.new(
      self,
      :id => srv[:id],
      :name => srv[:name],
      :image_id => srv.get(:image, :id),
      :flavor_id => srv.get(:flavor, :id),
      :state => SERVER_STATE_MAP.fetch(srv[:status], :pending),
      :addresses_private => srv.fetch(:addresses, :private, []).map{|a|
        Server::Address.new(
          :version => a[:version].to_i, :address => a[:addr]
        )
      },
      :addresses_public => srv.fetch(:addresses, :public, []).map{|a|
        Server::Address.new(
          :version => a[:version].to_i, :address => a[:addr]
        )
      },
      :status => srv[:status],
      :key_name => srv[:key_name]
    ).valid_state
  end
end
server_change_state(server, state) click to toggle source
# File lib/miasma/contrib/open_stack/compute.rb, line 55
def server_change_state(server, state)
end
server_destroy(server) click to toggle source
# File lib/miasma/contrib/open_stack/compute.rb, line 42
def server_destroy(server)
  if(server.persisted?)
    result = request(
      :expects => 204,
      :method => :delete,
      :path => "/servers/#{server.id}"
    )
    true
  else
    false
  end
end
server_reload(server) click to toggle source
# File lib/miasma/contrib/open_stack/compute.rb, line 58
def server_reload(server)
  res = servers.reload.all
  node = res.detect do |s|
    s.id == server.id
  end
  if(node)
    server.load_data(node.data.dup)
    server.valid_state
  else
    server.data[:state] = :terminated
    server.dirty.clear
    server
  end
end
server_save(server) click to toggle source
# File lib/miasma/contrib/open_stack/compute.rb, line 18
def server_save(server)
  unless(server.persisted?)
    server.load_data(server.attributes)
    result = request(
      :expects => 202,
      :method => :post,
      :path => '/servers',
      :json => {
        :server => {
          :flavorRef => server.flavor_id,
          :name => server.name,
          :imageRef => server.image_id,
          :metadata => server.metadata,
          :personality => server.personality,
          :key_pair => server.key_name
        }
      }
    )
    server.id = result.get(:body, :server, :id)
  else
    raise "WAT DO I DO!?"
  end
end