ropenstack 1.2.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|