ropenstack 1.2.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +2 -1
- data/doc/Ropenstack.html +151 -0
- data/doc/Ropenstack/Cinder.html +197 -0
- data/doc/Ropenstack/Glance.html +292 -0
- data/doc/Ropenstack/Keystone.html +737 -0
- data/doc/Ropenstack/MalformedRequestError.html +142 -0
- data/doc/Ropenstack/NotFoundError.html +142 -0
- data/doc/Ropenstack/Nova.html +562 -0
- data/doc/Ropenstack/OpenstackService.html +199 -0
- data/doc/Ropenstack/Quantum.html +830 -0
- data/doc/Ropenstack/Rest.html +483 -0
- data/doc/Ropenstack/RopenstackError.html +143 -0
- data/doc/Ropenstack/TimeoutError.html +142 -0
- data/doc/Ropenstack/UnauthorisedError.html +142 -0
- data/doc/created.rid +10 -0
- data/doc/images/add.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +93 -0
- data/doc/js/darkfish.js +153 -0
- data/doc/js/jquery.js +18 -0
- data/doc/js/navigation.js +142 -0
- data/doc/js/search.js +94 -0
- data/doc/js/search_index.js +1 -0
- data/doc/js/searcher.js +228 -0
- data/doc/rdoc.css +543 -0
- data/doc/table_of_contents.html +200 -0
- data/lib/ropenstack.rb +18 -0
- data/lib/ropenstack/blockStorage.rb +25 -0
- data/lib/ropenstack/blockStorage/v1.rb +67 -0
- data/lib/ropenstack/blockStorage/v2.rb +11 -0
- data/lib/ropenstack/common/error.rb +12 -0
- data/lib/ropenstack/common/openstackservice.rb +28 -0
- data/lib/ropenstack/common/rest.rb +138 -0
- data/lib/ropenstack/compute.rb +164 -0
- data/lib/ropenstack/compute/v2.rb +11 -0
- data/lib/ropenstack/compute/v2/extensions.rb +14 -0
- data/lib/ropenstack/compute/v2/extensions/admin.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/agents.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/aggregates.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/certificates.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/cloudpipe.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/console.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/coverage.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/defaultsecuritygroup.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/diagnostics.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/extraspecs.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/fixedips.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/flavors.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/hosts.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/hypervisors.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/images.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/instanceactions.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/interfaces.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/keypairs.rb +20 -0
- data/lib/ropenstack/compute/v2/extensions/limits.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/migrations.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/networks.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/quotasets.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/securitygroups.rb +40 -0
- data/lib/ropenstack/compute/v2/extensions/servergroups.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/serverpassword.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/services.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/shelvedservers.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/usage.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/virtualinterfaces.rb +0 -0
- data/lib/ropenstack/compute/v2/extensions/volumes.rb +20 -0
- data/lib/ropenstack/compute/v3.rb +5 -0
- data/lib/ropenstack/database.rb +24 -0
- data/lib/ropenstack/database/v1.rb +113 -0
- data/lib/ropenstack/identity.rb +28 -0
- data/lib/ropenstack/identity/v2.rb +178 -0
- data/lib/ropenstack/identity/v3.rb +13 -0
- data/lib/ropenstack/image.rb +25 -0
- data/lib/ropenstack/image/v1.rb +107 -0
- data/lib/ropenstack/image/v2.rb +134 -0
- data/lib/ropenstack/networking.rb +160 -0
- data/lib/ropenstack/networking/v2.rb +5 -0
- data/lib/ropenstack/networking/v2/extensions.rb +9 -0
- data/lib/ropenstack/networking/v2/extensions/l3.rb +111 -0
- data/lib/ropenstack/networking/v2/extensions/lbaas.rb +5 -0
- data/lib/ropenstack/networking/v2/extensions/metering.rb +5 -0
- data/lib/ropenstack/networking/v2/extensions/quotas.rb +5 -0
- data/lib/ropenstack/networking/v2/extensions/securitygroups.rb +5 -0
- data/lib/ropenstack/objectStorage.rb +60 -0
- data/lib/ropenstack/orchestration.rb +23 -0
- data/lib/ropenstack/orchestration/v1.rb +162 -0
- data/lib/ropenstack/telemetry.rb +23 -0
- data/lib/ropenstack/telemetry/v2.rb +68 -0
- data/ropenstack.gemspec +13 -0
- metadata +112 -1
@@ -0,0 +1,200 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
|
6
|
+
|
7
|
+
<title>Table of Contents - RDoc Documentation</title>
|
8
|
+
|
9
|
+
<link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">
|
10
|
+
|
11
|
+
<script type="text/javascript">
|
12
|
+
var rdoc_rel_prefix = "./";
|
13
|
+
</script>
|
14
|
+
|
15
|
+
<script type="text/javascript" charset="utf-8" src="./js/jquery.js"></script>
|
16
|
+
<script type="text/javascript" charset="utf-8" src="./js/navigation.js"></script>
|
17
|
+
<script type="text/javascript" charset="utf-8" src="./js/search_index.js"></script>
|
18
|
+
<script type="text/javascript" charset="utf-8" src="./js/search.js"></script>
|
19
|
+
<script type="text/javascript" charset="utf-8" src="./js/searcher.js"></script>
|
20
|
+
<script type="text/javascript" charset="utf-8" src="./js/darkfish.js"></script>
|
21
|
+
|
22
|
+
|
23
|
+
<body class="indexpage">
|
24
|
+
<h1>Table of Contents - RDoc Documentation</h1>
|
25
|
+
|
26
|
+
|
27
|
+
<h2 id="classes">Classes/Modules</h2>
|
28
|
+
<ul>
|
29
|
+
<li class="module">
|
30
|
+
<a href="Ropenstack.html">Ropenstack</a>
|
31
|
+
</li>
|
32
|
+
<li class="class">
|
33
|
+
<a href="Ropenstack/Cinder.html">Ropenstack::Cinder</a>
|
34
|
+
</li>
|
35
|
+
<li class="class">
|
36
|
+
<a href="Ropenstack/Glance.html">Ropenstack::Glance</a>
|
37
|
+
</li>
|
38
|
+
<li class="class">
|
39
|
+
<a href="Ropenstack/Keystone.html">Ropenstack::Keystone</a>
|
40
|
+
</li>
|
41
|
+
<li class="class">
|
42
|
+
<a href="Ropenstack/MalformedRequestError.html">Ropenstack::MalformedRequestError</a>
|
43
|
+
</li>
|
44
|
+
<li class="class">
|
45
|
+
<a href="Ropenstack/NotFoundError.html">Ropenstack::NotFoundError</a>
|
46
|
+
</li>
|
47
|
+
<li class="class">
|
48
|
+
<a href="Ropenstack/Nova.html">Ropenstack::Nova</a>
|
49
|
+
</li>
|
50
|
+
<li class="class">
|
51
|
+
<a href="Ropenstack/OpenstackService.html">Ropenstack::OpenstackService</a>
|
52
|
+
</li>
|
53
|
+
<li class="class">
|
54
|
+
<a href="Ropenstack/Quantum.html">Ropenstack::Quantum</a>
|
55
|
+
</li>
|
56
|
+
<li class="class">
|
57
|
+
<a href="Ropenstack/Rest.html">Ropenstack::Rest</a>
|
58
|
+
</li>
|
59
|
+
<li class="class">
|
60
|
+
<a href="Ropenstack/RopenstackError.html">Ropenstack::RopenstackError</a>
|
61
|
+
</li>
|
62
|
+
<li class="class">
|
63
|
+
<a href="Ropenstack/TimeoutError.html">Ropenstack::TimeoutError</a>
|
64
|
+
</li>
|
65
|
+
<li class="class">
|
66
|
+
<a href="Ropenstack/UnauthorisedError.html">Ropenstack::UnauthorisedError</a>
|
67
|
+
</li>
|
68
|
+
|
69
|
+
</ul>
|
70
|
+
|
71
|
+
<h2 id="methods">Methods</h2>
|
72
|
+
<ul>
|
73
|
+
|
74
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-c-new">::new — Ropenstack::Keystone</a>
|
75
|
+
|
76
|
+
<li class="method"><a href="Ropenstack/OpenstackService.html#method-c-new">::new — Ropenstack::OpenstackService</a>
|
77
|
+
|
78
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-action">#action — Ropenstack::Nova</a>
|
79
|
+
|
80
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-addEndpoint">#addEndpoint — Ropenstack::Keystone</a>
|
81
|
+
|
82
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-addToServices">#addToServices — Ropenstack::Keystone</a>
|
83
|
+
|
84
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-add_router_gateway">#add_router_gateway — Ropenstack::Quantum</a>
|
85
|
+
|
86
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-add_router_interface">#add_router_interface — Ropenstack::Quantum</a>
|
87
|
+
|
88
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-admin">#admin — Ropenstack::Keystone</a>
|
89
|
+
|
90
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-attach_volume">#attach_volume — Ropenstack::Nova</a>
|
91
|
+
|
92
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-authenticate">#authenticate — Ropenstack::Keystone</a>
|
93
|
+
|
94
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-build_headers">#build_headers — Ropenstack::Rest</a>
|
95
|
+
|
96
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-build_http">#build_http — Ropenstack::Rest</a>
|
97
|
+
|
98
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-create_network">#create_network — Ropenstack::Quantum</a>
|
99
|
+
|
100
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-create_port">#create_port — Ropenstack::Quantum</a>
|
101
|
+
|
102
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-create_router">#create_router — Ropenstack::Quantum</a>
|
103
|
+
|
104
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-create_server">#create_server — Ropenstack::Nova</a>
|
105
|
+
|
106
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-create_subnet">#create_subnet — Ropenstack::Quantum</a>
|
107
|
+
|
108
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-delete_image">#delete_image — Ropenstack::Nova</a>
|
109
|
+
|
110
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-delete_network">#delete_network — Ropenstack::Quantum</a>
|
111
|
+
|
112
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-delete_port">#delete_port — Ropenstack::Quantum</a>
|
113
|
+
|
114
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-delete_request">#delete_request — Ropenstack::Rest</a>
|
115
|
+
|
116
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-delete_router">#delete_router — Ropenstack::Quantum</a>
|
117
|
+
|
118
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-delete_router_gateway">#delete_router_gateway — Ropenstack::Quantum</a>
|
119
|
+
|
120
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-delete_router_interface">#delete_router_interface — Ropenstack::Quantum</a>
|
121
|
+
|
122
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-delete_server">#delete_server — Ropenstack::Nova</a>
|
123
|
+
|
124
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-delete_subnet">#delete_subnet — Ropenstack::Quantum</a>
|
125
|
+
|
126
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-detach_volume">#detach_volume — Ropenstack::Nova</a>
|
127
|
+
|
128
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-device_ports">#device_ports — Ropenstack::Quantum</a>
|
129
|
+
|
130
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-do_request">#do_request — Ropenstack::Rest</a>
|
131
|
+
|
132
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-error_manager">#error_manager — Ropenstack::Rest</a>
|
133
|
+
|
134
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-flavors">#flavors — Ropenstack::Nova</a>
|
135
|
+
|
136
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-getEndpoints">#getEndpoints — Ropenstack::Keystone</a>
|
137
|
+
|
138
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-getServices">#getServices — Ropenstack::Keystone</a>
|
139
|
+
|
140
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-get_request">#get_request — Ropenstack::Rest</a>
|
141
|
+
|
142
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-images">#images — Ropenstack::Nova</a>
|
143
|
+
|
144
|
+
<li class="method"><a href="Ropenstack/Glance.html#method-i-images">#images — Ropenstack::Glance</a>
|
145
|
+
|
146
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-move_port_to_subnets">#move_port_to_subnets — Ropenstack::Quantum</a>
|
147
|
+
|
148
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-networks">#networks — Ropenstack::Quantum</a>
|
149
|
+
|
150
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-ports">#ports — Ropenstack::Quantum</a>
|
151
|
+
|
152
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-post_request">#post_request — Ropenstack::Rest</a>
|
153
|
+
|
154
|
+
<li class="method"><a href="Ropenstack/Glance.html#method-i-put_octect">#put_octect — Ropenstack::Glance</a>
|
155
|
+
|
156
|
+
<li class="method"><a href="Ropenstack/Rest.html#method-i-put_request">#put_request — Ropenstack::Rest</a>
|
157
|
+
|
158
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-quotas">#quotas — Ropenstack::Nova</a>
|
159
|
+
|
160
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-raw">#raw — Ropenstack::Keystone</a>
|
161
|
+
|
162
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-routers">#routers — Ropenstack::Quantum</a>
|
163
|
+
|
164
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-scope_token">#scope_token — Ropenstack::Keystone</a>
|
165
|
+
|
166
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-servers">#servers — Ropenstack::Nova</a>
|
167
|
+
|
168
|
+
<li class="method"><a href="Ropenstack/Nova.html#method-i-servers_detailed">#servers_detailed — Ropenstack::Nova</a>
|
169
|
+
|
170
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-services">#services — Ropenstack::Keystone</a>
|
171
|
+
|
172
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-subnets">#subnets — Ropenstack::Quantum</a>
|
173
|
+
|
174
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-tenant_id">#tenant_id — Ropenstack::Keystone</a>
|
175
|
+
|
176
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-tenant_list">#tenant_list — Ropenstack::Keystone</a>
|
177
|
+
|
178
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-tenant_name">#tenant_name — Ropenstack::Keystone</a>
|
179
|
+
|
180
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-token">#token — Ropenstack::Keystone</a>
|
181
|
+
|
182
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-token_metadata">#token_metadata — Ropenstack::Keystone</a>
|
183
|
+
|
184
|
+
<li class="method"><a href="Ropenstack/Quantum.html#method-i-update_port">#update_port — Ropenstack::Quantum</a>
|
185
|
+
|
186
|
+
<li class="method"><a href="Ropenstack/Glance.html#method-i-upload_image_from_file">#upload_image_from_file — Ropenstack::Glance</a>
|
187
|
+
|
188
|
+
<li class="method"><a href="Ropenstack/Keystone.html#method-i-user">#user — Ropenstack::Keystone</a>
|
189
|
+
|
190
|
+
<li class="method"><a href="Ropenstack/Cinder.html#method-i-volumes">#volumes — Ropenstack::Cinder</a>
|
191
|
+
|
192
|
+
</ul>
|
193
|
+
|
194
|
+
|
195
|
+
<footer id="validator-badges">
|
196
|
+
<p><a href="http://validator.w3.org/check/referer">[Validate]</a>
|
197
|
+
<p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.
|
198
|
+
<p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
|
199
|
+
</footer>
|
200
|
+
|
data/lib/ropenstack.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
=begin
|
2
|
+
* Name: Ropenstack
|
3
|
+
* Description: Module used to wrap all Openstack service classes.
|
4
|
+
* Author: Sam 'Tehsmash' Betts
|
5
|
+
* Date: 01/15/2013
|
6
|
+
=end
|
7
|
+
module Ropenstack
|
8
|
+
require 'ropenstack/blockStorage'
|
9
|
+
require 'ropenstack/compute'
|
10
|
+
require 'ropenstack/database'
|
11
|
+
require 'ropenstack/identity'
|
12
|
+
require 'ropenstack/image'
|
13
|
+
require 'ropenstack/networking'
|
14
|
+
require 'ropenstack/objectStorage'
|
15
|
+
require 'ropenstack/orchestration'
|
16
|
+
require 'ropenstack/telemetry'
|
17
|
+
require 'ropenstack/common/error'
|
18
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'ropenstack/common/rest'
|
2
|
+
require 'ropenstack/common/openstackservice'
|
3
|
+
|
4
|
+
module Ropenstack
|
5
|
+
##
|
6
|
+
# * Name: BlockStorage
|
7
|
+
# * Description: Implementation of the Block Storage API Client in Ruby.
|
8
|
+
# * Author: Sam 'Tehsmash' Betts
|
9
|
+
# * Date: 01/15/2013
|
10
|
+
##
|
11
|
+
class BlockStorage < OpenstackService
|
12
|
+
require 'ropenstack/blockStorage/v1'
|
13
|
+
require 'ropenstack/blockStorage/v2'
|
14
|
+
|
15
|
+
def initialize(location, token, type)
|
16
|
+
super(location, token)
|
17
|
+
case type
|
18
|
+
when "volume" then extend Version1
|
19
|
+
when "volumev2" then extend Version2
|
20
|
+
else
|
21
|
+
raise Ropenstack::RopenstackError, "Invalid Type Passed to BlockStorage"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
=begin
|
2
|
+
* Name: Version1
|
3
|
+
* Description: Module used to contain the version 1 methods.
|
4
|
+
* Author: Sam 'Tehsmash' Betts
|
5
|
+
* Date: 01/15/2013
|
6
|
+
=end
|
7
|
+
module Ropenstack::BlockStorage::Version1
|
8
|
+
##
|
9
|
+
# Gets the volumes from cinder, and provides them in a ruby hash
|
10
|
+
# with all information about them.
|
11
|
+
##
|
12
|
+
def volumes(id = nil)
|
13
|
+
endpoint = "/volumes"
|
14
|
+
endpoint = "#{endpoint}/#{id}" unless id.nil?
|
15
|
+
return get_request(address(endpoint), @token)
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Gets the detailed list of volumes from cinder.
|
20
|
+
##
|
21
|
+
def volumes_detailed()
|
22
|
+
return get_request(address("/volumes/detail"), @token)
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# Gets the list of volume types from cinder.
|
27
|
+
##
|
28
|
+
def types(id = nil)
|
29
|
+
endpoint = "/types"
|
30
|
+
endpoint = "#{endpoint}/#{id}" unless id.nil?
|
31
|
+
return get_request(address(endpoint), @token)
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Create a new volume given size, volume_type and a name
|
36
|
+
# Optional parameters include:
|
37
|
+
# * :description -> string
|
38
|
+
# * :metadata -> array
|
39
|
+
# * :zone -> string
|
40
|
+
##
|
41
|
+
def create_volume(display_name, size, volume_type, options = {})
|
42
|
+
data = {
|
43
|
+
"volume" => {
|
44
|
+
"display_name" => display_name,
|
45
|
+
"size" => size,
|
46
|
+
"volume_type" => volume_type
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
data["volume"]["display_description"] = options[:description] unless options[:description].nil?
|
51
|
+
data["volume"]["metadata"] = options[:metadata] unless options[:metadata].nil?
|
52
|
+
data["volume"]["availability_zone"] = options[:zone] unless options[:zone].nil?
|
53
|
+
|
54
|
+
return post_request(address("/volumes"), data, @token)
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Delete a volume given an ID.
|
59
|
+
##
|
60
|
+
def delete(id)
|
61
|
+
return delete_request(address("/volumes/#{id}"), @token)
|
62
|
+
end
|
63
|
+
|
64
|
+
def version
|
65
|
+
"V1"
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Ropenstack
|
2
|
+
## A wrapper class for Standard Error for Ropenstack Errors
|
3
|
+
class RopenstackError < StandardError; end
|
4
|
+
## Error fired if openstack returns a Bad Request error
|
5
|
+
class MalformedRequestError < RopenstackError; end
|
6
|
+
## Error fired if 403 Error returns from openstack
|
7
|
+
class UnauthorisedError < RopenstackError; end
|
8
|
+
## Error fired if the connection to openstack times out
|
9
|
+
class TimeoutError < RopenstackError; end
|
10
|
+
## Error fired if a 404 error comes back from openstack
|
11
|
+
class NotFoundError < RopenstackError; end
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'ropenstack/common/rest'
|
2
|
+
|
3
|
+
module Ropenstack
|
4
|
+
=begin
|
5
|
+
* Name: OpenstackService
|
6
|
+
* Description: A parent class for all the openstack service classes, with functions
|
7
|
+
which are generic across all services.
|
8
|
+
* Author: Sam 'Tehsmash' Betts
|
9
|
+
* Date: 01/15/2013
|
10
|
+
=end
|
11
|
+
class OpenstackService < Rest
|
12
|
+
def initialize(location, token)
|
13
|
+
@location = location
|
14
|
+
@token = token
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
##
|
20
|
+
# Take the location URI parsed in on creation and append
|
21
|
+
# an endpoint. Returns a new URI
|
22
|
+
##
|
23
|
+
def address(endpoint)
|
24
|
+
uri = URI.parse(@location.to_s + endpoint)
|
25
|
+
return uri
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
module Ropenstack
|
6
|
+
=begin
|
7
|
+
* Name: Rest
|
8
|
+
* Description: A generic wrapper for basic rest functions with JSON data which return ruby hashes.
|
9
|
+
* Author: Sam "Tehsmash" Betts
|
10
|
+
* Date: 12/18/2012
|
11
|
+
=end
|
12
|
+
class Rest
|
13
|
+
##
|
14
|
+
# Build a HTTP object having been given a timeout and a URI object
|
15
|
+
# Returns Net::HTTP object.
|
16
|
+
##
|
17
|
+
def build_http(uri, timeout)
|
18
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
19
|
+
if(timeout > 0)
|
20
|
+
http.open_timeout = timeout
|
21
|
+
http.read_timeout = timeout
|
22
|
+
end
|
23
|
+
return http
|
24
|
+
end
|
25
|
+
|
26
|
+
##
|
27
|
+
# All responses from openstack where any errors need to be caught are passed through
|
28
|
+
# this function. Unless a successful response is passed it will throw a Ropenstack
|
29
|
+
# error.
|
30
|
+
# If successful returns a hash of response body, unless response body is nil then it
|
31
|
+
# returns an empty hash.
|
32
|
+
##
|
33
|
+
def error_manager(uri, response)
|
34
|
+
case response
|
35
|
+
when Net::HTTPSuccess then
|
36
|
+
# This covers cases where the response may not validate as JSON.
|
37
|
+
begin
|
38
|
+
data = JSON.parse(response.body)
|
39
|
+
rescue
|
40
|
+
data = {}
|
41
|
+
end
|
42
|
+
## Get the Headers out of the response object
|
43
|
+
data['headers'] = response.to_hash()
|
44
|
+
return data
|
45
|
+
when Net::HTTPBadRequest
|
46
|
+
raise Ropenstack::MalformedRequestError, response.body
|
47
|
+
when Net::HTTPNotFound
|
48
|
+
raise Ropenstack::NotFoundError, "URI: #{uri} \n" + response.body
|
49
|
+
when Net::HTTPUnauthorized
|
50
|
+
raise Ropenstack::UnauthorisedError, response.body
|
51
|
+
else
|
52
|
+
raise Ropenstack::RopenstackError, response.body
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Builds headers for requests which send JSON data, if a keystone token is supplied
|
58
|
+
# it adds the X-Auth-Token field with the keystone token.
|
59
|
+
# Returns a hash which represents the http headers in a format accepted by Net::HTTP.
|
60
|
+
##
|
61
|
+
def build_headers(token)
|
62
|
+
headers = {'Content-Type' =>'application/json'}
|
63
|
+
unless token.nil?
|
64
|
+
headers['X-Auth-Token'] = token
|
65
|
+
end
|
66
|
+
return headers
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# The function which you call to perform a http request
|
71
|
+
# using the request object given in the parameters. By
|
72
|
+
# default manage errors is true, so all responses are passed
|
73
|
+
# through the error manager which converts the into Ropenstack errors.
|
74
|
+
##
|
75
|
+
def do_request(uri, request, manage_errors = true, timeout = 10)
|
76
|
+
begin
|
77
|
+
http = build_http(uri, timeout)
|
78
|
+
if(manage_errors)
|
79
|
+
return error_manager(uri, http.request(request))
|
80
|
+
else
|
81
|
+
http.request(request)
|
82
|
+
return { "Success" => true }
|
83
|
+
end
|
84
|
+
rescue Timeout::Error
|
85
|
+
raise Ropenstack::TimeoutError, "It took longer than #{timeout} to connect to #{uri.to_s}"
|
86
|
+
rescue Errno::ECONNREFUSED
|
87
|
+
raise Ropenstack::TimeoutError, "It took longer than #{timeout} to connect to #{uri.to_s}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
##
|
92
|
+
# Wrapper function for a get request, just provide a uri
|
93
|
+
# and it will return you a hash with the result data.
|
94
|
+
# For authenticated transactions a token can be provided.
|
95
|
+
# Implemented using the do_request method.
|
96
|
+
##
|
97
|
+
def get_request(uri, token = nil, manage_errors = true)
|
98
|
+
request = Net::HTTP::Get.new(uri.request_uri, initheader = build_headers(token))
|
99
|
+
return do_request(uri, request, manage_errors)
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Wrapper function for delete requests, just provide a uri
|
104
|
+
# and it will return you a hash with the result data.
|
105
|
+
# For authenticated transactions a token can be provided.
|
106
|
+
# Implemented using the do_request method.
|
107
|
+
##
|
108
|
+
def delete_request(uri, token = nil, manage_errors = true)
|
109
|
+
request = Net::HTTP::Delete.new(uri.request_uri, initheader = build_headers(token))
|
110
|
+
return do_request(uri, request, manage_errors)
|
111
|
+
end
|
112
|
+
|
113
|
+
##
|
114
|
+
# Wrapper function for a put request, just provide a uri
|
115
|
+
# and a hash of the data to send, then it will return you a hash
|
116
|
+
# with the result data.
|
117
|
+
# For authenticated transactions a token can be provided.
|
118
|
+
# Implemented using the do_request method
|
119
|
+
##
|
120
|
+
def put_request(uri, body, token = nil, manage_errors = true)
|
121
|
+
request = Net::HTTP::Put.new(uri.request_uri, initheader = build_headers(token))
|
122
|
+
request.body = body.to_json
|
123
|
+
return do_request(uri, request, manage_errors)
|
124
|
+
end
|
125
|
+
|
126
|
+
##
|
127
|
+
# Wrapper function for a put request, just provide a uri
|
128
|
+
# and a hash of the data to send, then it will return you a hash
|
129
|
+
# with the result data.
|
130
|
+
# For authenticated transactions a token can be provided.
|
131
|
+
##
|
132
|
+
def post_request(uri, body, token = nil, manage_errors = true)
|
133
|
+
request = Net::HTTP::Post.new(uri.request_uri, initheader = build_headers(token))
|
134
|
+
request.body = body.to_json
|
135
|
+
return do_request(uri, request, manage_errors)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|