fog-openstack 0.1.19 → 0.1.20

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.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc6df6714fdc0919e30d872748400f21dd6a1b76
4
- data.tar.gz: 3d057c3aad27a48d1ee8901f71b4b85fe7e03de2
3
+ metadata.gz: 50563e6b22ba89f6fa72a25141b465c03a062362
4
+ data.tar.gz: 1fe391d2160e4030614e710cf97763ed44caf90b
5
5
  SHA512:
6
- metadata.gz: 36bfe27a022057590ce817e20089d3bfe7ff00e42be16173d9077cb3b1dd314047486d359ad5f65dd0d3d489804315506031d014ba8b2cfe02f88f195d10ead1
7
- data.tar.gz: bc82e6dee769885e863f2f0e9dd822d4210e1fb2628fa8daec888c08f29dca37c6c1be55e7b626b601a0f8e7e24df6b0ef6c9a4f897668d84f1158afdd18379d
6
+ metadata.gz: f31a8b75f9508e32dfeffffa991e8ef74389454acabe7b0bca5f1bc9117d33dc310c089b16cef778b909461d24cc44eefd1fb67ad82c1fbc294f9507b2a47697
7
+ data.tar.gz: f5e1ccdc99e2be0ac021c0cc40202b3e6fbf30641328abae2b6879c95c63c72d06ba6f087eaba7fe7a1ef06d999ae166e31fc070cc80582fdd4b0aec9a476f15
@@ -116,6 +116,29 @@ It can be also obtained through the details method of a simple stack object
116
116
  stack.details
117
117
  ```
118
118
 
119
+ To update a stack while manipulating a Stack object from the Stack Collection:
120
+
121
+ ```ruby
122
+ heat_template = { "template": { "description": "Updated description" } }
123
+ stack.save(heat_template)
124
+ ```
125
+
126
+ `save` uses the `update_stack` request method, although it expects a Stack object as well:
127
+
128
+ ```ruby
129
+ heat_template = { "template": { "description": "Updated description" } }
130
+ service.update_stack(stack, heat_template)
131
+ ```
132
+
133
+ Alternatively a request only approach can be used, providing a stack id and name:
134
+
135
+ ```ruby
136
+ id = "49b83314-d341-468a-aef4-44bbccce251e"
137
+ name = "stack_name"
138
+ heat_template = { "template": { "description": "Other update description" } }
139
+ service.update_stack(id, name, heat_template)
140
+ ```
141
+
119
142
  A stack knows about related `events`:
120
143
 
121
144
  ```ruby
@@ -0,0 +1,22 @@
1
+ require 'fog/openstack'
2
+ require 'time'
3
+
4
+ auth_url = "http://10.0.0.101:5000/v2.0/tokens"
5
+ username = 'admin'
6
+ password = 'D78JVyRnzJG8j7Mb6fgpeUMp7'
7
+
8
+ @connection_params = {
9
+ :openstack_auth_url => auth_url,
10
+ :openstack_username => username,
11
+ :openstack_api_key => password,
12
+ }
13
+
14
+ puts "### SERVICE CONNECTION ###"
15
+
16
+ event_service = Fog::Event::OpenStack.new(@connection_params)
17
+
18
+ p event_service
19
+
20
+ puts "### LIST EVENTS ###"
21
+
22
+ p event_service.events.all
@@ -7,6 +7,7 @@ group :development, :test do
7
7
  gem "ipaddress", ">= 0.8"
8
8
  gem "bundler", "~> 1.6"
9
9
  gem "mime-types", "2.6.2"
10
+ gem "nokogiri", "< 1.7.0"
10
11
  gem "rake", "~> 10.0"
11
12
  gem "rubocop", "< 0.42"
12
13
  gem "rubyzip", "~> 0.9.9"
@@ -54,6 +54,8 @@ module Fog
54
54
  collection :hosts
55
55
  model :server_group
56
56
  collection :server_groups
57
+ model :os_interface
58
+ collection :os_interfaces
57
59
 
58
60
  ## REQUESTS
59
61
  #
@@ -147,6 +149,10 @@ module Fog
147
149
 
148
150
  # Hypervisor
149
151
  request :get_hypervisor_statistics
152
+ request :get_hypervisor
153
+ request :list_hypervisors
154
+ request :list_hypervisors_detail
155
+ request :list_hypervisor_servers
150
156
 
151
157
  # Metadata
152
158
  request :list_metadata
@@ -233,6 +239,12 @@ module Fog
233
239
  request :create_server_group
234
240
  request :delete_server_group
235
241
 
242
+ # Server Os Interfaces
243
+ request :list_os_interfaces
244
+ request :get_os_interface
245
+ request :create_os_interface
246
+ request :delete_os_interface
247
+
236
248
  class Mock
237
249
  attr_reader :auth_token
238
250
  attr_reader :auth_token_expiration
@@ -310,8 +322,22 @@ module Fog
310
322
  'ram' => 51200
311
323
  },
312
324
  :volumes => {},
313
- :snapshots => {}
314
- }
325
+ :snapshots => {},
326
+ :os_interfaces => [
327
+ {
328
+ "fixed_ips" => [
329
+ {
330
+ "ip_address" => "192.168.1.3",
331
+ "subnet_id" => "f8a6e8f8-c2ec-497c-9f23-da9616de54ef"
332
+ }
333
+ ],
334
+ "mac_addr" => "fa:16:3e:4c:2c:30",
335
+ "net_id" => "3cb9bc59-5699-4588-a4b1-b87f96708bc6",
336
+ "port_id" => "ce531f90-199f-48c0-816c-13e38010b442",
337
+ "port_state" => "ACTIVE"
338
+ }
339
+ ]
340
+ }
315
341
  end
316
342
  end
317
343
 
@@ -0,0 +1,15 @@
1
+ require 'fog/openstack/models/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class OpenStack
6
+ class OsInterface < Fog::OpenStack::Model
7
+ identity :port_id
8
+ attribute :fixed_ips, :type => :array
9
+ attribute :mac_addr
10
+ attribute :net_id
11
+ attribute :port_state
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ require 'fog/openstack/models/collection'
2
+ require 'fog/compute/openstack/models/os_interface'
3
+
4
+ module Fog
5
+ module Compute
6
+ class OpenStack
7
+ class OsInterfaces < Fog::OpenStack::Collection
8
+ model Fog::Compute::OpenStack::OsInterface
9
+
10
+ attribute :server
11
+
12
+ def all
13
+ requires :server
14
+
15
+ data = service.list_os_interfaces(server.id)
16
+ load_response(data, 'interfaceAttachments')
17
+ end
18
+
19
+ def get(port_id)
20
+ requires :server
21
+
22
+ data = service.get_os_interface(server.id,port_id)
23
+ load_response(data, 'interfaceAttachment')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -108,6 +108,11 @@ module Fog
108
108
  @all_addresses ||= service.list_all_addresses.body["floating_ips"].select { |data| data['instance_id'] == id }
109
109
  end
110
110
 
111
+ def os_interfaces
112
+ requires :id
113
+ service.os_interfaces(:server => self)
114
+ end
115
+
111
116
  def reload
112
117
  @all_addresses = nil
113
118
  super
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ # === Parameters
6
+ # * server_id <~String>
7
+ # * options <~Hash>
8
+ def create_os_interface(server_id, options={})
9
+ body = {
10
+ 'interfaceAttachment' => {}
11
+ }
12
+
13
+ if options[:port_id]
14
+ body['interfaceAttachment']['port_id'] = options[:port_id]
15
+ elsif options[:net_id]
16
+ body['interfaceAttachment']['net_id'] = options[:net_id]
17
+ end
18
+
19
+ if options[:ip_address]
20
+ body['interfaceAttachment']['fixed_ips'] = {ip_address: options[:ip_address]}
21
+ end
22
+
23
+ request(
24
+ :body => Fog::JSON.encode(body),
25
+ :expects => [200, 201, 202, 204],
26
+ :method => 'POST',
27
+ :path => "servers/#{server_id}/os-interface"
28
+ )
29
+ end
30
+ end
31
+
32
+ class Mock
33
+ def create_os_interface(server_id, options={})
34
+ Excon::Response.new(
35
+ :body => {'interfaceAttachment' => data[:os_interfaces].first},
36
+ :status => 200
37
+ )
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -6,7 +6,7 @@ module Fog
6
6
  request(
7
7
  :expects => 202,
8
8
  :method => 'DELETE',
9
- :path => "os-keypairs/#{key_name}"
9
+ :path => "os-keypairs/#{Fog::OpenStack.escape(key_name)}"
10
10
  )
11
11
  end
12
12
  end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ # === Parameters
6
+ # * server_id <~String>
7
+ # * port_id <~String>
8
+ def delete_os_interface(server_id, port_id)
9
+ request(
10
+ :expects => [200, 202,204],
11
+ :method => 'DELETE',
12
+ :path => "servers/#{server_id}/os-interface/#{port_id}"
13
+ )
14
+ end
15
+ end
16
+
17
+ class Mock
18
+ def delete_os_interface(server_id, port_id)
19
+ true
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,64 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ def get_hypervisor(hypervisor_id)
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "os-hypervisors/#{hypervisor_id}"
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_hypervisor(hypervisor_id)
16
+ response = Excon::Response.new
17
+ response.status = 200
18
+ response.body = {
19
+ "hypervisor" => {
20
+ "cpu_info" => {
21
+ "arch" => "x86_64",
22
+ "model" => "Nehalem",
23
+ "vendor" => "Intel",
24
+ "features" => [
25
+ "pge",
26
+ "clflush"
27
+ ],
28
+ "topology" => {
29
+ "cores" => 1,
30
+ "threads" => 1,
31
+ "sockets" => 4
32
+ }
33
+ },
34
+ "current_workload" => 0,
35
+ "status" => "enabled",
36
+ "state" => "up",
37
+ "disk_available_least" => 0,
38
+ "host_ip" => "1.1.1.1",
39
+ "free_disk_gb" => 1028,
40
+ "free_ram_mb" => 7680,
41
+ "hypervisor_hostname" => "fake-mini",
42
+ "hypervisor_type" => "fake",
43
+ "hypervisor_version" => 1000,
44
+ "id" => hypervisor_id,
45
+ "local_gb" => 1028,
46
+ "local_gb_used" => 0,
47
+ "memory_mb" => 8192,
48
+ "memory_mb_used" => 512,
49
+ "running_vms" => 0,
50
+ "service" => {
51
+ "host" => "host1",
52
+ "id" => 7,
53
+ "disabled_reason" => null
54
+ },
55
+ "vcpus" => 1,
56
+ "vcpus_used" => 0
57
+ }
58
+ }
59
+ response
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -6,7 +6,7 @@ module Fog
6
6
  request(
7
7
  :expects => 200,
8
8
  :method => 'GET',
9
- :path => "os-keypairs/#{key_name}"
9
+ :path => "os-keypairs/#{Fog::OpenStack.escape(key_name)}"
10
10
  )
11
11
  end
12
12
  end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ def get_os_interface(server_id,port_id)
6
+ request(
7
+ :expects => [200, 202, 203],
8
+ :method => 'GET',
9
+ :path => "servers/#{server_id}/os-interface/#{port_id}"
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_os_interface(server_id,port_id)
16
+ Excon::Response.new(
17
+ :body => {'interfaceAttachment' => data[:os_interfaces].first},
18
+ :status => 200
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ def list_hypervisor_servers(hypervisor_id, options = {})
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => "os-hypervisors/#{hypervisor_id}/servers",
10
+ :query => options
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def list_hypervisor_servers(hypervisor_id, _options = {})
17
+ response = Excon::Response.new
18
+ response.status = 200
19
+ response.body = {'hypervisors' => [
20
+ {
21
+ "hypervisor_hostname" => "fake-mini",
22
+ "id" => hypervisor_id,
23
+ "state" => "up",
24
+ "status" => "enabled",
25
+ "servers" => [
26
+ {
27
+ "name" => "test_server1",
28
+ "uuid" => "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
29
+ },
30
+ {
31
+ "name" => "test_server2",
32
+ "uuid" => "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
33
+ }
34
+ ]
35
+ }
36
+ ]}
37
+ response
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ def list_hypervisors(options = {})
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => 'os-hypervisors',
10
+ :query => options
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def list_hypervisors(_options = {})
17
+ response = Excon::Response.new
18
+ response.status = 200
19
+ response.body = {'hypervisors' => [
20
+ {"hypervisor_hostname" => "fake-mini", "id" => 2, "state" => "up", "status" => "enabled"}
21
+ ]}
22
+ response
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,71 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+ def list_hypervisors_detail(options = {})
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :path => 'os-hypervisors/detail',
10
+ :query => options
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def list_hypervisors_detail(_options = {})
17
+ response = Excon::Response.new
18
+ response.status = 200
19
+ response.body = {
20
+ "hypervisors" => [{
21
+ "cpu_info" => {
22
+ "arch" => "x86_64",
23
+ "model" => "Nehalem",
24
+ "vendor" => "Intel",
25
+ "features" => [
26
+ "pge",
27
+ "clflush"
28
+ ],
29
+ "topology" => {
30
+ "cores" => 1,
31
+ "threads" => 1,
32
+ "sockets" => 4
33
+ }
34
+ },
35
+ "current_workload" => 0,
36
+ "status" => "enabled",
37
+ "state" => "up",
38
+ "disk_available_least" => 0,
39
+ "host_ip" => "1.1.1.1",
40
+ "free_disk_gb" => 1028,
41
+ "free_ram_mb" => 7680,
42
+ "hypervisor_hostname" => "fake-mini",
43
+ "hypervisor_type" => "fake",
44
+ "hypervisor_version" => 1000,
45
+ "id" => 2,
46
+ "local_gb" => 1028,
47
+ "local_gb_used" => 0,
48
+ "memory_mb" => 8192,
49
+ "memory_mb_used" => 512,
50
+ "running_vms" => 0,
51
+ "service" => {
52
+ "host" => "host1",
53
+ "id" => 7,
54
+ "disabled_reason" => null
55
+ },
56
+ "vcpus" => 1,
57
+ "vcpus_used" => 0
58
+ }],
59
+ "hypervisors_links" => [
60
+ {
61
+ "href" => "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit=1&marker=2",
62
+ "rel" => "next"
63
+ }
64
+ ]
65
+ }
66
+ response
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end