fog-openstack 0.1.19 → 0.1.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/docs/orchestration.md +23 -0
  3. data/examples/event/basics.rb +22 -0
  4. data/gemfiles/Gemfile-1.9 +1 -0
  5. data/lib/fog/compute/openstack.rb +28 -2
  6. data/lib/fog/compute/openstack/models/os_interface.rb +15 -0
  7. data/lib/fog/compute/openstack/models/os_interfaces.rb +28 -0
  8. data/lib/fog/compute/openstack/models/server.rb +5 -0
  9. data/lib/fog/compute/openstack/requests/create_os_interface.rb +42 -0
  10. data/lib/fog/compute/openstack/requests/delete_key_pair.rb +1 -1
  11. data/lib/fog/compute/openstack/requests/delete_os_interface.rb +24 -0
  12. data/lib/fog/compute/openstack/requests/get_hypervisor.rb +64 -0
  13. data/lib/fog/compute/openstack/requests/get_key_pair.rb +1 -1
  14. data/lib/fog/compute/openstack/requests/get_os_interface.rb +24 -0
  15. data/lib/fog/compute/openstack/requests/list_hypervisor_servers.rb +42 -0
  16. data/lib/fog/compute/openstack/requests/list_hypervisors.rb +27 -0
  17. data/lib/fog/compute/openstack/requests/list_hypervisors_detail.rb +71 -0
  18. data/lib/fog/compute/openstack/requests/list_os_interfaces.rb +24 -0
  19. data/lib/fog/dns/openstack/v2/requests/create_zone.rb +1 -1
  20. data/lib/fog/event/openstack.rb +120 -0
  21. data/lib/fog/event/openstack/models/event.rb +16 -0
  22. data/lib/fog/event/openstack/models/events.rb +23 -0
  23. data/lib/fog/event/openstack/requests/get_event.rb +27 -0
  24. data/lib/fog/event/openstack/requests/list_events.rb +42 -0
  25. data/lib/fog/identity/openstack/v3/models/domains.rb +23 -11
  26. data/lib/fog/key_manager/openstack.rb +1 -1
  27. data/lib/fog/metering/openstack.rb +1 -0
  28. data/lib/fog/network/openstack.rb +10 -0
  29. data/lib/fog/network/openstack/models/subnet_pool.rb +47 -0
  30. data/lib/fog/network/openstack/models/subnet_pools.rb +33 -0
  31. data/lib/fog/network/openstack/requests/create_subnet_pool.rb +56 -0
  32. data/lib/fog/network/openstack/requests/delete_subnet_pool.rb +28 -0
  33. data/lib/fog/network/openstack/requests/get_subnet_pool.rb +29 -0
  34. data/lib/fog/network/openstack/requests/list_subnet_pools.rb +25 -0
  35. data/lib/fog/network/openstack/requests/update_subnet_pool.rb +46 -0
  36. data/lib/fog/openstack.rb +90 -68
  37. data/lib/fog/openstack/core.rb +53 -7
  38. data/lib/fog/openstack/version.rb +1 -1
  39. data/lib/fog/shared_file_system/openstack.rb +51 -8
  40. data/lib/fog/shared_file_system/openstack/models/share.rb +28 -0
  41. data/lib/fog/shared_file_system/openstack/models/share_access_rule.rb +35 -0
  42. data/lib/fog/shared_file_system/openstack/models/share_access_rules.rb +30 -0
  43. data/lib/fog/shared_file_system/openstack/requests/extend_share.rb +24 -0
  44. data/lib/fog/shared_file_system/openstack/requests/get_limits.rb +45 -0
  45. data/lib/fog/shared_file_system/openstack/requests/get_quota.rb +26 -0
  46. data/lib/fog/shared_file_system/openstack/requests/grant_share_access.rb +34 -0
  47. data/lib/fog/shared_file_system/openstack/requests/list_share_access_rules.rb +29 -0
  48. data/lib/fog/shared_file_system/openstack/requests/revoke_share_access.rb +24 -0
  49. data/lib/fog/shared_file_system/openstack/requests/share_action.rb +16 -0
  50. data/lib/fog/shared_file_system/openstack/requests/shrink_share.rb +24 -0
  51. data/lib/fog/shared_file_system/openstack/requests/update_quota.rb +30 -0
  52. metadata +36 -2
@@ -1,6 +1,6 @@
1
1
  module Fog
2
2
  module Openstack
3
- VERSION = "0.1.19"
3
+ VERSION = "0.1.20"
4
4
 
5
5
  def self.included(base)
6
6
  if RUBY_VERSION < "2"
@@ -2,6 +2,7 @@ module Fog
2
2
  module SharedFileSystem
3
3
  class OpenStack < Fog::Service
4
4
  SUPPORTED_VERSIONS = /v2(\.0)*/
5
+ SUPPORTED_MICROVERSION = '2.15'.freeze
5
6
 
6
7
  requires :openstack_auth_url
7
8
  recognizes :openstack_auth_token, :openstack_management_url,
@@ -13,7 +14,7 @@ module Fog
13
14
  :openstack_project_name, :openstack_project_id,
14
15
  :openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
15
16
  :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id,
16
- :openstack_identity_prefix
17
+ :openstack_identity_prefix, :openstack_shared_file_system_microversion
17
18
 
18
19
  model_path 'fog/shared_file_system/openstack/models'
19
20
  model :network
@@ -22,6 +23,8 @@ module Fog
22
23
  collection :shares
23
24
  model :snapshot
24
25
  collection :snapshots
26
+ model :share_access_rule
27
+ collection :share_access_rules
25
28
 
26
29
  request_path 'fog/shared_file_system/openstack/requests'
27
30
  # share networks
@@ -39,6 +42,12 @@ module Fog
39
42
  request :create_share
40
43
  request :update_share
41
44
  request :delete_share
45
+ request :share_action
46
+ request :grant_share_access
47
+ request :revoke_share_access
48
+ request :list_share_access_rules
49
+ request :extend_share
50
+ request :shrink_share
42
51
 
43
52
  # snapshots
44
53
  request :list_snapshots
@@ -48,6 +57,11 @@ module Fog
48
57
  request :update_snapshot
49
58
  request :delete_snapshot
50
59
 
60
+ # quota + limits
61
+ request :get_limits
62
+ request :get_quota
63
+ request :update_quota
64
+
51
65
  # rubocop:disable LineLength, Metrics/MethodLength, Metrics/ClassLength, Metrics/AbcSize
52
66
  class Mock
53
67
  def self.data
@@ -189,7 +203,27 @@ module Fog
189
203
  "id" => "086a1aa6-c425-4ecd-9612-391a3b1b9375",
190
204
  "size" => 1
191
205
  }
192
- ]
206
+ ],
207
+ :access_rules => [
208
+ {
209
+ "share_id" => "406ea93b-32e9-4907-a117-148b3945749f",
210
+ "created_at" => "2015-09-07T09:14:48.000000",
211
+ "updated_at" => '',
212
+ "access_type" => "ip",
213
+ "access_to" => "0.0.0.0/0",
214
+ "access_level" => "rw",
215
+ "access_key" => '',
216
+ "id" => "a25b2df3-90bd-4add-afa6-5f0dbbd50452"
217
+ }
218
+ ],
219
+ :quota => {
220
+ "gigabytes" => 1000,
221
+ "shares" => 50,
222
+ "snapshot_gigabytes" => 1000,
223
+ "snapshots" => 50,
224
+ "share_networks" => 10,
225
+ "id" => "16e1ab15c35a457e9c2b2aa189f544e1"
226
+ }
193
227
  }
194
228
  end
195
229
  end
@@ -250,28 +284,37 @@ module Fog
250
284
  end
251
285
 
252
286
  def initialize(options = {})
253
- initialize_identity options
287
+ @supported_versions = SUPPORTED_VERSIONS
288
+ @supported_microversion = SUPPORTED_MICROVERSION
289
+ @fixed_microversion = options[:openstack_shared_file_system_microversion]
290
+ @microversion_key = 'X-Openstack-Manila-Api-Version'.freeze
254
291
 
255
- @openstack_service_type = options[:openstack_service_type] || ['sharev2']
256
- @openstack_service_name = options[:openstack_service_name]
292
+ initialize_identity options
257
293
 
258
- @connection_options = options[:connection_options] || {}
294
+ @openstack_service_type = options[:openstack_service_type] || ['sharev2']
295
+ @openstack_service_name = options[:openstack_service_name]
296
+ @connection_options = options[:connection_options] || {}
259
297
 
260
298
  authenticate
261
299
  set_api_path
300
+ set_microversion
262
301
 
263
302
  @persistent = options[:persistent] || false
264
303
  @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
265
304
  end
266
305
 
267
306
  def set_api_path
268
- unless @path.match(SUPPORTED_VERSIONS)
269
- @path = Fog::OpenStack.get_supported_version_path(SUPPORTED_VERSIONS,
307
+ unless @path.match(@supported_versions)
308
+ @path = Fog::OpenStack.get_supported_version_path(@supported_versions,
270
309
  @openstack_management_uri,
271
310
  @auth_token,
272
311
  @connection_options)
273
312
  end
274
313
  end
314
+
315
+ def action_prefix
316
+ microversion_newer_than?('2.6') ? '' : 'os-'
317
+ end
275
318
  end
276
319
  end
277
320
  end
@@ -57,6 +57,34 @@ module Fog
57
57
  def ready?
58
58
  status == 'available'
59
59
  end
60
+
61
+ def extend(size)
62
+ requires :id
63
+ service.extend_share(id, size)
64
+ true
65
+ end
66
+
67
+ def shrink(size)
68
+ requires :id
69
+ service.shrink_share(id, size)
70
+ true
71
+ end
72
+
73
+ def grant_access(access_to, access_type, access_level)
74
+ requires :id
75
+ service.grant_share_access(id, access_to, access_type, access_level)
76
+ true
77
+ end
78
+
79
+ def revoke_access(access_id)
80
+ requires :id
81
+ service.revoke_share_access(id, access_id)
82
+ true
83
+ end
84
+
85
+ def access_rules
86
+ service.share_access_rules(:share => self)
87
+ end
60
88
  end
61
89
  end
62
90
  end
@@ -0,0 +1,35 @@
1
+ require 'fog/openstack/models/model'
2
+
3
+ module Fog
4
+ module SharedFileSystem
5
+ class OpenStack
6
+ class ShareAccessRule < Fog::OpenStack::Model
7
+ attr_accessor :share
8
+
9
+ identity :id
10
+
11
+ attribute :access_level
12
+ attribute :access_type
13
+ attribute :access_to
14
+ attribute :state
15
+
16
+ def save
17
+ requires :share, :access_level, :access_type, :access_to
18
+ raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted?
19
+ merge_attributes(service.grant_share_access(@share.id, access_to, access_type, access_level).body['access'])
20
+ true
21
+ end
22
+
23
+ def destroy
24
+ requires :id, :share
25
+ service.revoke_share_access(@share.id, id)
26
+ true
27
+ end
28
+
29
+ def ready?
30
+ state == 'active'
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ require 'fog/openstack/models/collection'
2
+ require 'fog/shared_file_system/openstack/models/share_access_rule'
3
+
4
+ module Fog
5
+ module SharedFileSystem
6
+ class OpenStack
7
+ class ShareAccessRules < Fog::OpenStack::Collection
8
+ model Fog::SharedFileSystem::OpenStack::ShareAccessRule
9
+
10
+ attr_accessor :share
11
+
12
+ def all
13
+ requires :share
14
+ load_response(service.list_share_access_rules(@share.id), 'access_list')
15
+ end
16
+
17
+ def find_by_id(id)
18
+ all.find { |rule| rule.id == id }
19
+ end
20
+
21
+ alias get find_by_id
22
+
23
+ def new(attributes = {})
24
+ requires :share
25
+ super({:share => @share}.merge!(attributes))
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def extend_share(share_id, new_size)
6
+ action = {
7
+ "#{action_prefix}extend" => {
8
+ 'new_size' => new_size
9
+ }
10
+ }
11
+ share_action(share_id, action)
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def extend_share(_share_id, _new_size)
17
+ response = Excon::Response.new
18
+ response.status = 202
19
+ response
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def get_limits
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => 'limits'
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_limits
16
+ absolute_limits = {
17
+ # Max
18
+ 'maxTotalShareGigabytes' => 1000,
19
+ 'maxTotalShareNetworks' => 10,
20
+ 'maxTotalShares' => 50,
21
+ 'maxTotalSnapshotGigabytes' => 1000,
22
+ 'maxTotalShareSnapshots' => 50,
23
+
24
+ # Used
25
+ 'totalShareNetworksUsed' => 0,
26
+ 'totalSharesUsed' => 0,
27
+ 'totalShareGigabytesUsed' => 0,
28
+ 'totalShareSnapshotsUsed' => 0,
29
+ 'totalSnapshotGigabytesUsed' => 0
30
+ }
31
+
32
+ Excon::Response.new(
33
+ :status => 200,
34
+ :body => {
35
+ 'limits' => {
36
+ 'rate' => [],
37
+ 'absolute' => absolute_limits
38
+ }
39
+ }
40
+ )
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def get_quota(project_id)
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "#{action_prefix}quota-sets/#{project_id}"
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_quota(project_id)
16
+ response = Excon::Response.new
17
+ response.status = 200
18
+ quota_data = data[:quota_updated] || data[:quota]
19
+ quota_data['id'] = project_id
20
+ response.body = {'quota_set' => quota_data}
21
+ response
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def grant_share_access(share_id, access_to = '0.0.0.0/0', access_type = 'ip', access_level = 'rw')
6
+ action = {
7
+ "#{action_prefix}allow_access" => {
8
+ 'access_to' => access_to,
9
+ 'access_type' => access_type,
10
+ 'access_level' => access_level
11
+ }
12
+ }
13
+ share_action(share_id, action, 200)
14
+ end
15
+ end
16
+
17
+ class Mock
18
+ def grant_share_access(share_id, access_to, access_type, access_level)
19
+ response = Excon::Response.new
20
+ response.status = 200
21
+
22
+ access = data[:access_rules].first
23
+ access[:share_id] = share_id
24
+ access[:access_level] = access_level
25
+ access[:access_type] = access_type
26
+ access[:access_to] = access_to
27
+
28
+ response.body = {'access' => access}
29
+ response
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def list_share_access_rules(share_id)
6
+ action = {
7
+ "#{action_prefix}access_list" => nil
8
+ }
9
+ share_action(share_id, action, 200)
10
+ end
11
+ end
12
+
13
+ class Mock
14
+ def list_share_access_rules(share_id)
15
+ response = Excon::Response.new
16
+ response.status = 200
17
+
18
+ rules = data[:access_rules]
19
+ rules.each do |rule|
20
+ rule[:share_id] = share_id
21
+ end
22
+
23
+ response.body = {'access_list' => rules}
24
+ response
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def revoke_share_access(share_id, access_id)
6
+ action = {
7
+ "#{action_prefix}deny_access" => {
8
+ 'access_id' => access_id
9
+ }
10
+ }
11
+ share_action(share_id, action)
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def revoke_share_access(_share_id, _access_id)
17
+ response = Excon::Response.new
18
+ response.status = 202
19
+ response
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def share_action(id, options = {}, expects_status = 202)
6
+ request(
7
+ :body => Fog::JSON.encode(options),
8
+ :expects => expects_status,
9
+ :method => 'POST',
10
+ :path => "shares/#{id}/action"
11
+ )
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module SharedFileSystem
3
+ class OpenStack
4
+ class Real
5
+ def shrink_share(share_id, new_size)
6
+ action = {
7
+ "#{action_prefix}shrink" => {
8
+ 'new_size' => new_size
9
+ }
10
+ }
11
+ share_action(share_id, action)
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def shrink_share(_share_id, _new_size)
17
+ response = Excon::Response.new
18
+ response.status = 202
19
+ response
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end