openstack 3.3.1 → 3.3.2
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/openstack/compute/connection.rb +49 -0
- data/lib/openstack/compute/server.rb +13 -5
- data/lib/openstack/volume/connection.rb +4 -3
- data/lib/openstack/volume/volume.rb +29 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17681562cf42cf5718e2a958b88b9506b122b8f1
|
4
|
+
data.tar.gz: 0cbe0dee7b6bc35079a2d7292a95640f8db18c77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d6e9528a0fb31296cf2680d7d5168e0f9c271163b9d448b09ba6504cb60abe910ae007c0ed4bd7b921c72d259eec7ad406bc0eb7127d225a982d259b9973219
|
7
|
+
data.tar.gz: 3ba91eab865e7e3bbb8cb002b0e7bb02ef57f5170fa03c24bd37964a7598c3e5c8559cef43d627068f9d967b9ff8efd0fc53adf3ed4657d5eaa198b298c3e673
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.3.
|
1
|
+
3.3.2
|
@@ -221,6 +221,55 @@ module Compute
|
|
221
221
|
JSON.parse(response.body)
|
222
222
|
end
|
223
223
|
|
224
|
+
# Lists, creates, deletes, and updates the extra-specs or keys for a flavor.
|
225
|
+
|
226
|
+
# Creates extra specs for a flavor, by ID
|
227
|
+
#
|
228
|
+
# create_flavor_extra_specs('999aca87-5c8a-4862-92fe-deb8bb024b6b', { 'quota:disk_total_iops_sec' => 1000 })
|
229
|
+
# => { 'quota:disk_total_iops_sec' => 1000 }
|
230
|
+
def create_flavor_extra_specs(flavor_id, options)
|
231
|
+
data = JSON.generate(extra_specs: options)
|
232
|
+
response = @connection.req('POST', "/flavors/#{flavor_id}/os-extra_specs", data: data)
|
233
|
+
JSON.parse(response.body)['extra_specs']
|
234
|
+
end
|
235
|
+
|
236
|
+
# Lists all extra specs for a flavor, by ID.
|
237
|
+
#
|
238
|
+
# flavor_extra_specs('999aca87-5c8a-4862-92fe-deb8bb024b6b')
|
239
|
+
# => { 'quota:disk_total_iops_sec' => 1000 }
|
240
|
+
def flavor_extra_specs(flavor_id)
|
241
|
+
response = @connection.req('GET', "/flavors/#{flavor_id}/os-extra_specs")
|
242
|
+
JSON.parse(response.body)['extra_specs']
|
243
|
+
end
|
244
|
+
|
245
|
+
# Shows an extra spec, by key, for a flavor, by ID.
|
246
|
+
#
|
247
|
+
# flavor_extra_spec('999aca87-5c8a-4862-92fe-deb8bb024b6b', 'quota:disk_total_iops_sec')
|
248
|
+
# => { 'quota:disk_total_iops_sec' => 1000 }
|
249
|
+
def flavor_extra_spec(flavor_id, flavor_extra_spec_key)
|
250
|
+
response = @connection.req('GET', "/flavors/#{flavor_id}/os-extra_specs/#{flavor_extra_spec_key}")
|
251
|
+
JSON.parse(response.body)
|
252
|
+
end
|
253
|
+
|
254
|
+
# Updates an extra spec, by key, for a flavor, by ID.
|
255
|
+
#
|
256
|
+
# update_flavor_extra_spec('999aca87-5c8a-4862-92fe-deb8bb024b6b', 'quota:disk_total_iops_sec', 2000)
|
257
|
+
# => { 'quota:disk_total_iops_sec' => 2000 }
|
258
|
+
def update_flavor_extra_spec(flavor_id, flavor_extra_spec_key, new_value)
|
259
|
+
data = JSON.generate(flavor_extra_spec_key => new_value)
|
260
|
+
response = @connection.req('PUT', "/flavors/#{flavor_id}/os-extra_specs/#{flavor_extra_spec_key}", data: data)
|
261
|
+
JSON.parse(response.body)
|
262
|
+
end
|
263
|
+
|
264
|
+
# Deletes an extra spec, by key, for a flavor, by ID.
|
265
|
+
#
|
266
|
+
# delete_flavor_extra_spec('999aca87-5c8a-4862-92fe-deb8bb024b6b', 'quota:disk_total_iops_sec')
|
267
|
+
# => true
|
268
|
+
def delete_flavor_extra_spec(flavor_id, flavor_extra_spec_key)
|
269
|
+
@connection.req('DELETE', "/flavors/#{flavor_id}/os-extra_specs/#{flavor_extra_spec_key}")
|
270
|
+
true
|
271
|
+
end
|
272
|
+
|
224
273
|
# Returns the current state of the programatic API limits. Each account has certain limits on the number of resources
|
225
274
|
# allowed in the account, and a rate of API operations.
|
226
275
|
#
|
@@ -102,9 +102,7 @@ module Compute
|
|
102
102
|
# >> server.stop()
|
103
103
|
# => true
|
104
104
|
def stop()
|
105
|
-
data = JSON.generate(
|
106
|
-
puts data
|
107
|
-
pp "About to post ACTION"
|
105
|
+
data = JSON.generate('os-stop' => nil)
|
108
106
|
response = @compute.connection.csreq("POST",@svrmgmthost,"#{@svrmgmtpath}/servers/#{URI.encode(self.id.to_s)}/action",@svrmgmtport,@svrmgmtscheme,{'content-type' => 'application/json'},data)
|
109
107
|
OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
|
110
108
|
true
|
@@ -116,8 +114,8 @@ module Compute
|
|
116
114
|
#
|
117
115
|
# >> server.start()
|
118
116
|
# => true
|
119
|
-
def start
|
120
|
-
data = JSON.generate(
|
117
|
+
def start
|
118
|
+
data = JSON.generate('os-start' => nil)
|
121
119
|
response = @compute.connection.csreq("POST",@svrmgmthost,"#{@svrmgmtpath}/servers/#{URI.encode(self.id.to_s)}/action",@svrmgmtport,@svrmgmtscheme,{'content-type' => 'application/json'},data)
|
122
120
|
OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
|
123
121
|
true
|
@@ -390,6 +388,16 @@ module Compute
|
|
390
388
|
true
|
391
389
|
end
|
392
390
|
|
391
|
+
# List volume attachments for an instance
|
392
|
+
#
|
393
|
+
# >> server.get_volume_attachments
|
394
|
+
# => array
|
395
|
+
def get_volume_attachments
|
396
|
+
response = @compute.connection.req('GET', "/servers/#{@id}/os-volume_attachments")
|
397
|
+
OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
|
398
|
+
JSON.parse(response.body)['volumeAttachments']
|
399
|
+
end
|
400
|
+
|
393
401
|
end
|
394
402
|
end
|
395
403
|
end
|
@@ -5,6 +5,7 @@ module Volume
|
|
5
5
|
|
6
6
|
attr_accessor :connection
|
7
7
|
attr_reader :volumes_native
|
8
|
+
attr_reader :volume_path
|
8
9
|
|
9
10
|
def initialize(connection)
|
10
11
|
@connection = connection
|
@@ -30,7 +31,7 @@ module Volume
|
|
30
31
|
response = @connection.csreq("POST",@connection.service_host,"#{@connection.service_path}/#{@volume_path}",@connection.service_port,@connection.service_scheme,{'content-type' => 'application/json'},data)
|
31
32
|
OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
|
32
33
|
volume_info = JSON.parse(response.body)["volume"]
|
33
|
-
volume = OpenStack::Volume::Volume.new(volume_info)
|
34
|
+
volume = OpenStack::Volume::Volume.new(self, volume_info)
|
34
35
|
end
|
35
36
|
|
36
37
|
#no options documented in API at Nov 2012
|
@@ -38,7 +39,7 @@ module Volume
|
|
38
39
|
def list_volumes
|
39
40
|
response = @connection.req("GET", "/#{@volume_path}")
|
40
41
|
volumes_hash = JSON.parse(response.body)["volumes"]
|
41
|
-
volumes_hash.inject([]){|res, current| res << OpenStack::Volume::Volume.new(current); res}
|
42
|
+
volumes_hash.inject([]){|res, current| res << OpenStack::Volume::Volume.new(self, current); res}
|
42
43
|
end
|
43
44
|
alias :volumes :list_volumes
|
44
45
|
|
@@ -46,7 +47,7 @@ module Volume
|
|
46
47
|
def get_volume(vol_id)
|
47
48
|
response = @connection.req("GET", "/#{@volume_path}/#{vol_id}")
|
48
49
|
volume_hash = JSON.parse(response.body)["volume"]
|
49
|
-
OpenStack::Volume::Volume.new(volume_hash)
|
50
|
+
OpenStack::Volume::Volume.new(self, volume_hash)
|
50
51
|
end
|
51
52
|
alias :volume :get_volume
|
52
53
|
|
@@ -3,6 +3,7 @@ module OpenStack
|
|
3
3
|
class Volume
|
4
4
|
|
5
5
|
attr_reader :id
|
6
|
+
attr_reader :connection
|
6
7
|
attr_reader :display_name
|
7
8
|
attr_reader :display_description
|
8
9
|
attr_reader :size
|
@@ -14,7 +15,18 @@ module OpenStack
|
|
14
15
|
attr_reader :created_at
|
15
16
|
attr_reader :status
|
16
17
|
|
17
|
-
def initialize(volume_info)
|
18
|
+
def initialize(connection, volume_info)
|
19
|
+
@connection = connection.connection
|
20
|
+
@volume_path = connection.volume_path
|
21
|
+
self.populate(volume_info)
|
22
|
+
end
|
23
|
+
|
24
|
+
def populate(volume_info = nil)
|
25
|
+
if not volume_info and @id
|
26
|
+
response = @connection.req("GET", "/#{@volume_path}/#{@id}")
|
27
|
+
volume_info = JSON.parse(response.body)["volume"]
|
28
|
+
end
|
29
|
+
|
18
30
|
@id = volume_info["id"]
|
19
31
|
@display_name = volume_info["display_name"] || volume_info["displayName"]
|
20
32
|
@display_description = volume_info["display_description"] || volume_info["displayDescription"]
|
@@ -28,6 +40,22 @@ module OpenStack
|
|
28
40
|
@status = volume_info["status"]
|
29
41
|
end
|
30
42
|
|
43
|
+
def extend!(size)
|
44
|
+
data = JSON.generate({'os-extend' => {'new_size' => size}})
|
45
|
+
response = @connection.req('POST', "/#{@volume_path}/#{@id}/action", {:data => data})
|
46
|
+
OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
|
47
|
+
self.populate
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
def status!(status)
|
52
|
+
data = JSON.generate({'os-reset_status' => {'status' => status}})
|
53
|
+
response = @connection.req('POST', "/#{@volume_path}/#{@id}/action", {:data => data})
|
54
|
+
OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
|
55
|
+
self.populate
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
31
59
|
end
|
32
60
|
end
|
33
61
|
end
|