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
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