Class: Ropenstack::Compute

Inherits:
OpenstackService show all
Includes:
Version2
Defined in:
lib/ropenstack/compute.rb

Overview

  • Name: Compute

* Description: Implementation of the Compute API Client in Ruby * Author: Sam ‘Tehsmash’ Betts * Date: 01/15/2013

Defined Under Namespace

Modules: Version2, Version3

Instance Method Summary collapse

Methods included from Version2

#version

Methods included from Version2::Extensions::SecurityGroups

#create_security_group, #create_security_group_rule, #destroy_security_group, #destroy_security_group_rule, #security_groups

Methods included from Version2::Extensions::Keypairs

#create_keypair, #delete_keypair, #keypairs

Methods inherited from OpenstackService

#initialize

Methods inherited from Rest

#build_headers, #build_http, #delete_request, #do_request, #error_manager, #get_request, #post_request, #put_request

Constructor Details

This class inherits a constructor from Ropenstack::OpenstackService

Instance Method Details

#action(id, act, *args) ⇒ Object

Perform an action on a server on Openstack, by passing an id, and an action, some actions require more data.

E.g. action(id, “reboot”, “hard”)



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/ropenstack/compute.rb', line 75

def action(id, act, *args) 
  data = case act
    when "reboot" then {'reboot' =>{"type" => args[0]}}	
    when "vnc" then {'os-getVNCConsole' => { "type" => "novnc" }} 
    when "stop" then {'os-stop' => 'null'}
    when "start" then {'os-start' => 'null'}
    when "pause" then {'pause' => 'null'}
    when "unpause" then {'unpause' => 'null'}
    when "suspend" then {'suspend' => 'null'}
    when "resume" then {'resume' => 'null'}
    when "create_image" then {'createImage' => {'name' => args[0], 'metadata' => args[1]}} 
    else raise "Invalid Action"
    end
  return post_request(address("/servers/" + id + "/action"), data, @token)
end

#create_server(name, image, flavor, networks = nil, keypair = nil, security_group = nil, metadata = nil) ⇒ Object

Creates a server on OpenStack.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ropenstack/compute.rb', line 42

def create_server(name, image, flavor, networks = nil, keypair = nil, security_group = nil,  = nil)
  data = { 
    "server" => { 
      "name" => name,
      "imageRef" => image,
      "flavorRef" => flavor,
    }   
  }
  unless networks.nil?
    data["server"]["networks"] = networks 
  end
  unless keypair.nil?
    data["server"]["key_name"] = keypair
  end
  unless security_group.nil?
    data["server"]["security_group"] = security_group 
  end
  return post_request(address("/servers"), data, @token)
end

#delete_image(id) ⇒ Object

Delete an image stored on Openstack through the nova endpoint



102
103
104
105
# File 'lib/ropenstack/compute.rb', line 102

def delete_image(id)
  uri = URI.parse("http://" + @location.host + ":" + @location.port.to_s + "/v2/images/" + id)
  return delete_request(uri, @token)
end

#delete_metadata(id, key) ⇒ Object



152
153
154
# File 'lib/ropenstack/compute.rb', line 152

def (id, key)
  return delete_request(address("/servers/"+id+"/metadata/" + key), @token)
end

#delete_server(id) ⇒ Object

Deletes a server from Openstack based on an id



65
66
67
# File 'lib/ropenstack/compute.rb', line 65

def delete_server(id)
  return delete_request(address("/servers/" + id), @token)
end

#extensions(ali) ⇒ Object

Get a list of Compute Extensions



124
125
126
127
128
129
130
# File 'lib/ropenstack/compute.rb', line 124

def extensions(ali)
  if ali.nil?
    return get_request(address("/extensions"), @token)
  else 
    return get_request(address("/extensions/"+ ali), @token)
  end
end

#flavorsObject

Get a list of flavors that Servers can be



110
111
112
# File 'lib/ropenstack/compute.rb', line 110

def flavors()
  return get_request(address("/flavors/detail"), @token)	
end

#imagesObject

Retrieve a list of images from Openstack through the nova endpoint



94
95
96
97
# File 'lib/ropenstack/compute.rb', line 94

def images() 
  uri = URI.parse("http://" + @location.host + ":9292/v2/images")
  return get_request(uri, @token)
end

#ips(id, network) ⇒ Object



156
157
158
159
160
161
162
# File 'lib/ropenstack/compute.rb', line 156

def ips(id, network)
  if network.nil?
    return get_request(address("/servers/"+id+"/ips"), @token) 
  else 
    return get_request(address("/servers/"+id+"/ips/" + network), @token) 
  end
end

#limitsObject

Get a tenants compute quotas



117
118
119
# File 'lib/ropenstack/compute.rb', line 117

def limits()
  return get_request(address("/limits"), @token)
end

#metadata(id, key) ⇒ Object



132
133
134
135
136
137
138
# File 'lib/ropenstack/compute.rb', line 132

def (id, key)
  if key.nil?
    return get_request(address("/servers/"+id+"/metadata"), @token)
  else
    return get_request(address("/servers/"+id+"/metadata/" + key), @token)
  end
end

#servers(id) ⇒ Object

Gets a list of servers from OpenStack

:call-seq:

servers(id) => A single server with the id matching the parameter
servers() => All servers visible to the tenant making the request


24
25
26
27
28
29
30
# File 'lib/ropenstack/compute.rb', line 24

def servers(id)
  endpoint = "/servers"
  unless id.nil?
    endpoint = endpoint + "/" + id
  end
  return get_request(address(endpoint), @token)
end

#servers_detailedObject

Gets a more detailed list of servers from openstack.



35
36
37
# File 'lib/ropenstack/compute.rb', line 35

def servers_detailed()
  return get_request(address("/servers/detail"), @token)
end

#set_metadata(id, data, key) ⇒ Object



140
141
142
143
144
145
146
# File 'lib/ropenstack/compute.rb', line 140

def (id, data, key)
  if key.nil?
    return put_request(address("/servers/"+id+"/metadata"), data, @token)
  else
    return put_request(address("/servers/"+id+"/metadata/"+key), data, @token)
  end
end

#update_metadata(id, data) ⇒ Object



148
149
150
# File 'lib/ropenstack/compute.rb', line 148

def (id, data)
  return post_request(address("/servers/"+id+"/metadata"), data, @token)
end