deltacloud-core 1.0.2 → 1.0.3

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 (187) hide show
  1. data/Rakefile +2 -1
  2. data/bin/deltacloudd +11 -5
  3. data/config.ru +3 -3
  4. data/deltacloud-core.gemspec +24 -18
  5. data/lib/cimi/collections/address_templates.rb +3 -3
  6. data/lib/cimi/collections/addresses.rb +6 -5
  7. data/lib/cimi/collections/entity_metadata.rb +0 -2
  8. data/lib/cimi/collections/machine_admins.rb +5 -5
  9. data/lib/cimi/collections/machine_configurations.rb +2 -2
  10. data/lib/cimi/collections/machine_images.rb +3 -3
  11. data/lib/cimi/collections/machines.rb +32 -10
  12. data/lib/cimi/collections/network_configurations.rb +4 -3
  13. data/lib/cimi/collections/network_templates.rb +4 -3
  14. data/lib/cimi/collections/networks.rb +8 -8
  15. data/lib/cimi/collections/routing_group_templates.rb +4 -3
  16. data/lib/cimi/collections/routing_groups.rb +4 -3
  17. data/lib/cimi/collections/volume_configurations.rb +3 -3
  18. data/lib/cimi/collections/volume_images.rb +3 -3
  19. data/lib/cimi/collections/volumes.rb +4 -3
  20. data/lib/cimi/collections/vsp_configurations.rb +4 -3
  21. data/lib/cimi/collections/vsp_templates.rb +4 -3
  22. data/lib/cimi/collections/vsps.rb +8 -7
  23. data/lib/cimi/helpers.rb +1 -1
  24. data/lib/cimi/helpers/cimi_helper.rb +11 -1
  25. data/lib/cimi/models.rb +4 -0
  26. data/lib/cimi/models/base.rb +11 -1
  27. data/lib/cimi/models/cloud_entry_point.rb +7 -14
  28. data/lib/cimi/models/disk.rb +40 -0
  29. data/lib/cimi/models/disk_collection.rb +38 -0
  30. data/lib/cimi/models/machine.rb +9 -43
  31. data/lib/cimi/models/machine_collection.rb +7 -4
  32. data/lib/cimi/models/machine_configuration.rb +8 -15
  33. data/lib/cimi/models/machine_configuration_collection.rb +6 -4
  34. data/lib/cimi/models/machine_image_collection.rb +6 -4
  35. data/lib/cimi/models/machine_template_collection.rb +6 -4
  36. data/lib/cimi/models/machine_volume.rb +42 -0
  37. data/lib/cimi/models/machine_volume_collection.rb +34 -0
  38. data/lib/cimi/models/network.rb +5 -9
  39. data/lib/cimi/models/network_collection.rb +6 -5
  40. data/lib/cimi/models/schema.rb +20 -0
  41. data/lib/cimi/models/volume_collection.rb +6 -4
  42. data/lib/cimi/models/volume_configuration_collection.rb +6 -4
  43. data/lib/cimi/models/volume_image_collection.rb +6 -4
  44. data/lib/cimi/models/volume_template_collection.rb +6 -4
  45. data/lib/deltacloud/api.rb +3 -3
  46. data/lib/deltacloud/collections/addresses.rb +1 -1
  47. data/lib/deltacloud/collections/firewalls.rb +4 -2
  48. data/lib/deltacloud/collections/keys.rb +1 -1
  49. data/lib/deltacloud/collections/load_balancers.rb +1 -1
  50. data/lib/deltacloud/collections/storage_volumes.rb +4 -4
  51. data/lib/deltacloud/drivers/base_driver.rb +12 -20
  52. data/lib/deltacloud/drivers/ec2/aws_vpc_monkey_patch.rb +294 -0
  53. data/lib/deltacloud/drivers/ec2/ec2_driver.rb +38 -6
  54. data/lib/deltacloud/drivers/fgcp/fgcp_client.rb +4 -0
  55. data/lib/deltacloud/drivers/fgcp/fgcp_driver.rb +40 -4
  56. data/lib/deltacloud/drivers/gogrid/gogrid_client.rb +8 -7
  57. data/lib/deltacloud/drivers/gogrid/gogrid_driver.rb +422 -416
  58. data/lib/deltacloud/drivers/google/google_driver.rb +2 -1
  59. data/lib/deltacloud/drivers/openstack/openstack_driver.rb +30 -16
  60. data/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +1 -0
  61. data/lib/deltacloud/drivers/vsphere/vsphere_driver.rb +3 -9
  62. data/lib/deltacloud/helpers/deltacloud_helper.rb +0 -2
  63. data/lib/deltacloud/models/firewall_rule.rb +2 -0
  64. data/lib/deltacloud/models/hardware_profile.rb +61 -59
  65. data/{tests/deprecated/core_ext/string.rb → lib/deltacloud/version.rb} +3 -15
  66. data/lib/deltacloud_rack.rb +1 -0
  67. data/lib/ec2/server.rb +5 -3
  68. data/lib/sinatra/rack_accept.rb +53 -53
  69. data/lib/sinatra/rack_etag.rb +1 -1
  70. data/tests/cimi/collections/cloud_entry_point_test.rb +11 -2
  71. data/tests/deltacloud/common.rb +1 -1
  72. data/tests/deltacloud/rack_test.rb +3 -3
  73. data/tests/drivers/base/base_driver_test.rb +6 -2
  74. data/tests/drivers/base/common.rb +1 -0
  75. data/tests/drivers/base/library_test.rb +6 -2
  76. data/tests/drivers/ec2/common.rb +34 -15
  77. data/tests/drivers/ec2/images_test.rb +2 -3
  78. data/tests/drivers/ec2/instance_test.rb +12 -2
  79. data/tests/drivers/ec2/keys_test.rb +2 -2
  80. data/tests/drivers/ec2/realms_test.rb +7 -3
  81. data/tests/drivers/ec2/storage_snapshots_test.rb +2 -3
  82. data/tests/drivers/gogrid/common.rb +24 -0
  83. data/tests/drivers/gogrid/hardware_profiles_test.rb +51 -0
  84. data/tests/drivers/gogrid/images_test.rb +57 -0
  85. data/tests/drivers/gogrid/instances_test.rb +92 -0
  86. data/tests/drivers/gogrid/realms_test.rb +45 -0
  87. data/tests/drivers/google/buckets_test.rb +105 -0
  88. data/tests/drivers/google/common.rb +20 -0
  89. data/tests/drivers/mock/common.rb +1 -0
  90. data/tests/drivers/mock/images_test.rb +3 -2
  91. data/tests/drivers/mock/instances_test.rb +3 -2
  92. data/tests/drivers/mock/keys_test.rb +3 -2
  93. data/tests/drivers/mock/realms_test.rb +3 -2
  94. data/tests/drivers/mock/storage_snapshots_test.rb +3 -2
  95. data/tests/drivers/mock/storage_volumes_test.rb +3 -2
  96. data/tests/drivers/models/address_test.rb +3 -3
  97. data/tests/drivers/models/base_test.rb +4 -2
  98. data/tests/drivers/models/blob_test.rb +3 -3
  99. data/tests/drivers/models/common.rb +3 -0
  100. data/tests/drivers/models/hardware_profile_test.rb +5 -4
  101. data/tests/drivers/models/instance_address_test.rb +3 -3
  102. data/tests/drivers/models/instance_profile_test.rb +3 -3
  103. data/tests/drivers/models/instance_test.rb +3 -3
  104. data/tests/drivers/models/keys_test.rb +3 -3
  105. data/tests/drivers/models/metrics_test.rb +3 -3
  106. data/tests/drivers/openstack/common.rb +26 -0
  107. data/tests/drivers/openstack/hardware_profiles_test.rb +46 -0
  108. data/tests/drivers/openstack/images_test.rb +50 -0
  109. data/tests/drivers/openstack/instances_test.rb +66 -0
  110. data/tests/drivers/openstack/keys_test.rb +61 -0
  111. data/tests/drivers/openstack/realms_test.rb +46 -0
  112. data/tests/drivers/rhevm/common.rb +2 -0
  113. data/tests/drivers/rhevm/images_test.rb +3 -4
  114. data/tests/drivers/rhevm/instance_test.rb +2 -2
  115. data/tests/drivers/rhevm/provider_test.rb +2 -2
  116. data/tests/drivers/rhevm/realms_test.rb +2 -3
  117. data/tests/ec2/common.rb +5 -4
  118. data/tests/ec2/server_test.rb +3 -2
  119. data/tests/helpers/rack/common.rb +3 -0
  120. data/tests/helpers/rack/rack_accept_test.rb +65 -0
  121. data/tests/helpers/rack/rack_date_test.rb +27 -0
  122. data/tests/helpers/rack/rack_driver_select_test.rb +53 -0
  123. data/tests/helpers/rack/rack_etag_test.rb +29 -0
  124. data/tests/helpers/rack/rack_matrix_params_test.rb +72 -0
  125. data/tests/test_helper.rb +44 -36
  126. data/views/hardware_profiles/index.html.haml +1 -1
  127. data/views/hardware_profiles/show.html.haml +2 -2
  128. data/views/hardware_profiles/show.xml.haml +2 -1
  129. data/views/images/show.html.haml +6 -5
  130. metadata +74 -117
  131. data/tests/deprecated/api/common.rb +0 -1
  132. data/tests/deprecated/api/driver_test.rb +0 -79
  133. data/tests/deprecated/api/library_test.rb +0 -6
  134. data/tests/deprecated/cimi/features/step_definitions/common_steps.rb +0 -59
  135. data/tests/deprecated/cimi/features/step_definitions/machine_images_steps.rb +0 -0
  136. data/tests/deprecated/cimi/features/step_definitions/machines_steps.rb +0 -100
  137. data/tests/deprecated/cimi/features/step_definitions/volumes_steps.rb +0 -115
  138. data/tests/deprecated/cimi/features/support/env.rb +0 -75
  139. data/tests/deprecated/common.rb +0 -279
  140. data/tests/deprecated/drivers/ec2/api_test.rb +0 -19
  141. data/tests/deprecated/drivers/ec2/common.rb +0 -23
  142. data/tests/deprecated/drivers/ec2/drivers_test.rb +0 -120
  143. data/tests/deprecated/drivers/ec2/hardware_profiles_test.rb +0 -224
  144. data/tests/deprecated/drivers/ec2/images_test.rb +0 -230
  145. data/tests/deprecated/drivers/ec2/instances_test.rb +0 -356
  146. data/tests/deprecated/drivers/ec2/keys_test.rb +0 -181
  147. data/tests/deprecated/drivers/ec2/realms_test.rb +0 -146
  148. data/tests/deprecated/drivers/fgcp/api_test.rb +0 -47
  149. data/tests/deprecated/drivers/fgcp/hardware_profiles_test.rb +0 -54
  150. data/tests/deprecated/drivers/fgcp/realms_test.rb +0 -42
  151. data/tests/deprecated/drivers/fgcp/setup.rb +0 -13
  152. data/tests/deprecated/drivers/google/api_test.rb +0 -19
  153. data/tests/deprecated/drivers/google/buckets_test.rb +0 -100
  154. data/tests/deprecated/drivers/google/common.rb +0 -54
  155. data/tests/deprecated/drivers/mock/api_test.rb +0 -10
  156. data/tests/deprecated/drivers/mock/buckets_test.rb +0 -195
  157. data/tests/deprecated/drivers/mock/common.rb +0 -7
  158. data/tests/deprecated/drivers/mock/drivers_test.rb +0 -123
  159. data/tests/deprecated/drivers/mock/hardware_profiles_test.rb +0 -224
  160. data/tests/deprecated/drivers/mock/images_test.rb +0 -197
  161. data/tests/deprecated/drivers/mock/instances_test.rb +0 -343
  162. data/tests/deprecated/drivers/mock/keys_test.rb +0 -161
  163. data/tests/deprecated/drivers/mock/realms_test.rb +0 -132
  164. data/tests/deprecated/drivers/mock/storage_snapshots_test.rb +0 -114
  165. data/tests/deprecated/drivers/mock/storage_volumes_test.rb +0 -122
  166. data/tests/deprecated/drivers/openstack/api_test.rb +0 -46
  167. data/tests/deprecated/drivers/openstack/common.rb +0 -21
  168. data/tests/deprecated/drivers/openstack/hardware_profiles_test.rb +0 -64
  169. data/tests/deprecated/drivers/openstack/images_test.rb +0 -46
  170. data/tests/deprecated/drivers/openstack/instances_test.rb +0 -208
  171. data/tests/deprecated/drivers/openstack/realms_test.rb +0 -40
  172. data/tests/deprecated/drivers/rackspace/api_test.rb +0 -46
  173. data/tests/deprecated/drivers/rackspace/buckets_test.rb +0 -150
  174. data/tests/deprecated/drivers/rackspace/common.rb +0 -16
  175. data/tests/deprecated/drivers/rackspace/hardware_profiles_test.rb +0 -58
  176. data/tests/deprecated/drivers/rackspace/images_test.rb +0 -45
  177. data/tests/deprecated/drivers/rackspace/instances_test.rb +0 -166
  178. data/tests/deprecated/drivers/rackspace/realms_test.rb +0 -41
  179. data/tests/deprecated/drivers/rhevm/api_test.rb +0 -45
  180. data/tests/deprecated/drivers/rhevm/common.rb +0 -21
  181. data/tests/deprecated/drivers/rhevm/hardware_profiles_test.rb +0 -58
  182. data/tests/deprecated/drivers/rhevm/images_test.rb +0 -48
  183. data/tests/deprecated/drivers/rhevm/instances_test.rb +0 -182
  184. data/tests/deprecated/drivers/rhevm/realms_test.rb +0 -40
  185. data/tests/deprecated/minitest_common.rb +0 -58
  186. data/tests/deprecated/minitest_common_api_test.rb +0 -115
  187. data/tests/deprecated/rabbit_test.rb +0 -52
data/Rakefile CHANGED
@@ -116,7 +116,7 @@ task :routes do
116
116
  end
117
117
  end
118
118
 
119
- DRIVERS = [:mock, :ec2, :rhevm]
119
+ DRIVERS = [:mock, :ec2, :rhevm, :google, :gogrid, :openstack]
120
120
 
121
121
  desc 'Run all tests'
122
122
  task :test do
@@ -164,6 +164,7 @@ namespace :test do
164
164
  end
165
165
  t.test_files = FileList[
166
166
  'tests/helpers/core_ext/*test.rb', # Deltacloud extensions (core_ext) and other helpers
167
+ 'tests/helpers/rack/*test.rb', # Rack extensions Deltacloud use
167
168
  'tests/drivers/base/*test.rb', # Deltacloud drivers API tests
168
169
  'tests/drivers/models/*test.rb', # Deltacloud models tests
169
170
  'tests/deltacloud/*test.rb', # Deltacloud internal API tests
@@ -150,10 +150,15 @@ end
150
150
 
151
151
  if options[:config]
152
152
  cfg = YAML::load(File.read(options[:config]))
153
- if c = cfg[ENV["API_DRIVER"].to_sym]
154
- ENV["API_PROVIDER"] ||= c[:provider]
155
- ENV["API_USER"] ||= c[:user]
156
- ENV["API_PASSWORD"] ||= c[:password]
153
+ if cfg.keys.any? { |k| k.is_a?(Symbol) }
154
+ puts "The config file #{options[:config]} uses symbols as keys"
155
+ puts " Change them to be ordinary strings"
156
+ exit(1)
157
+ end
158
+ if c = cfg[ENV["API_DRIVER"]]
159
+ ENV["API_PROVIDER"] ||= c["provider"]
160
+ ENV["API_USER"] ||= c["user"]
161
+ ENV["API_PASSWORD"] ||= c["password"]
157
162
  end
158
163
  end
159
164
 
@@ -234,7 +239,8 @@ else
234
239
  argv_opts.unshift "thin"
235
240
  command = argv_opts.join(" ")
236
241
  Dir::chdir($top_srcdir)
237
- rerun = Rerun::Runner.new(command, :dir => $top_srcdir)
242
+ rerun = Rerun::Runner.new(command,
243
+ :dir => File::join($top_srcdir, "lib", "deltacloud"))
238
244
  rerun.start
239
245
  rerun.join
240
246
  else
data/config.ru CHANGED
@@ -24,7 +24,7 @@ load File.join(File.dirname(__FILE__), 'lib', 'deltacloud_rack.rb')
24
24
 
25
25
  Deltacloud::configure do |server|
26
26
  server.root_url '/api'
27
- server.version '1.0.2'
27
+ server.version Deltacloud::API_VERSION
28
28
  server.klass 'Deltacloud::API'
29
29
  server.logger Rack::DeltacloudLogger.setup(ENV['API_LOG'], ENV['API_VERBOSE'])
30
30
  server.default_driver ENV['API_DRIVER']
@@ -32,14 +32,14 @@ end
32
32
 
33
33
  Deltacloud::configure(:cimi) do |server|
34
34
  server.root_url '/cimi'
35
- server.version '1.0.2'
35
+ server.version Deltacloud::API_VERSION
36
36
  server.klass 'CIMI::API'
37
37
  server.logger Rack::DeltacloudLogger.setup(ENV['API_LOG'], ENV['API_VERBOSE'])
38
38
  server.default_driver ENV['API_DRIVER']
39
39
  end
40
40
 
41
41
  Deltacloud::configure(:ec2) do |server|
42
- server.root_url '/'
42
+ server.root_url '/ec2'
43
43
  server.version '2012-04-01'
44
44
  server.klass 'Deltacloud::EC2::API'
45
45
  server.logger Rack::DeltacloudLogger.setup(ENV['API_LOG'], ENV['API_VERBOSE'])
@@ -14,7 +14,7 @@
14
14
  # License for the specific language governing permissions and limitations
15
15
  # under the License.
16
16
 
17
- require 'rake'
17
+ Kernel::load File::join(File::dirname(__FILE__), './lib/deltacloud/version.rb')
18
18
 
19
19
  Gem::Specification.new do |s|
20
20
  s.author = 'The Apache Software Foundation'
@@ -29,10 +29,10 @@ Gem::Specification.new do |s|
29
29
  which implements the REST interface.
30
30
  EOF
31
31
 
32
- s.version = '1.0.2'
32
+ s.version = Deltacloud::API_VERSION
33
33
  s.date = Time.now
34
34
  s.summary = %q{Deltacloud REST API}
35
- s.files = FileList[
35
+ s.files = [
36
36
  'Rakefile',
37
37
  '*.gemspec',
38
38
  'config.ru',
@@ -58,17 +58,17 @@ Gem::Specification.new do |s|
58
58
  'public/stylesheets/images/*.png',
59
59
  'public/stylesheets/compiled/*.css',
60
60
  'bin/deltacloudd'
61
- ].to_a
61
+ ].map { |f| Dir[f] }.flatten
62
62
 
63
63
  s.bindir = 'bin'
64
64
  s.executables = 'deltacloudd'
65
65
  s.test_files= Dir.glob("tests/**/*_test.rb")
66
66
  s.extra_rdoc_files = Dir["LICENSE", "DISCLAIMER", "NOTICE"]
67
- s.required_ruby_version = '>= 1.8.1'
67
+ s.required_ruby_version = '>= 1.8.6'
68
68
  s.has_rdoc = 'false'
69
69
  s.add_dependency('rake', '>= 0.8.7')
70
70
  s.add_dependency('haml', '>= 2.2.17')
71
- s.add_dependency('sinatra', '>= 0.9.4')
71
+ s.add_dependency('sinatra', '>= 1.3.0')
72
72
  s.add_dependency('sinatra-rabbit', '>= 1.0.10')
73
73
  s.add_dependency('crack')
74
74
  s.add_dependency('rack', '>= 1.0.0')
@@ -79,33 +79,39 @@ Gem::Specification.new do |s|
79
79
  s.add_dependency('nokogiri', '>= 1.4.3')
80
80
  s.add_dependency('require_relative') if RUBY_VERSION < '1.9'
81
81
 
82
- # dependencies for various cloud providers:
83
- # RHEV-M
84
- s.add_dependency('rbovirt', '>=0.0.6')
82
+ # dependencies for various cloud providers:
85
83
 
86
- # Amazon EC2 S3
84
+ # RHEV-M and oVirt
85
+ s.add_dependency('rbovirt', '>=0.0.12')
86
+
87
+ # Amazon EC2 S3
87
88
  s.add_dependency('aws', '>=2.5.4')
88
- # Microsoft Azure
89
+ # Microsoft Azure
89
90
  s.add_dependency('waz-storage', '>=1.1.0')
90
91
 
91
- # Rackspace Cloudservers Cloudfiles
92
+ # Rackspace Cloudservers Cloudfiles
92
93
  s.add_dependency('cloudservers')
93
94
  s.add_dependency('cloudfiles')
94
95
 
95
- # Terremark Vcloud Express
96
+ # Terremark Vcloud Express
96
97
  s.add_dependency('fog', '>= 1.4.0')
97
98
  s.add_dependency('excon', '>= 0.14.2' )
98
99
 
99
- # Rhevm and Condor Cloud
100
+ # Rhevm and Condor Cloud
100
101
  s.add_dependency('rest-client')
101
102
 
102
- # Condor Cloud
103
+ # Condor Cloud
103
104
  s.add_dependency('uuidtools', '>= 2.1.1')
104
105
 
105
- # Openstack Compute and Object-Storage
106
- s.add_dependency('openstack', '>= 1.0.1')
106
+ # Openstack Compute and Object-Storage
107
+ s.add_dependency('openstack', '>= 1.0.4')
107
108
 
108
- # Aruba Cloud
109
+ # Aruba Cloud
109
110
  s.add_dependency('savon', '>= 1.0.0')
110
111
 
112
+ # VSphere
113
+ s.add_dependency('rbvmomi')
114
+
115
+
116
+
111
117
  end
@@ -16,11 +16,11 @@
16
16
  module CIMI::Collections
17
17
  class AddressTemplates < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
19
+ set :capability, lambda { |m| driver.respond_to? m }
20
20
 
21
21
  collection :address_templates do
22
22
 
23
- operation :index do
23
+ operation :index, :with_capability => :address_templates do
24
24
  description 'List all AddressTemplates in the AddressTemplateCollection'
25
25
  param :CIMISelect, :string, :optional
26
26
  control do
@@ -32,7 +32,7 @@ module CIMI::Collections
32
32
  end
33
33
  end
34
34
 
35
- operation :show do
35
+ operation :show, :with_capability => :address_template do
36
36
  description 'Show a specific AddressTemplate'
37
37
  control do
38
38
  address_template = CIMI::Model::AddressTemplate.find(params[:id], self)
@@ -16,12 +16,13 @@
16
16
  module CIMI::Collections
17
17
  class Addresses < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
19
+ set :capability, lambda { |m| driver.respond_to? m }
20
+
20
21
  collection :addresses do
21
22
 
22
23
  description 'An Address represents an IP address, and its associated metdata, for a particular Network.'
23
24
 
24
- operation :index do
25
+ operation :index, :with_capability => :addresses do
25
26
  description 'List all Addresses in the AddressCollection'
26
27
  param :CIMISelect, :string, :optional
27
28
  control do
@@ -33,7 +34,7 @@ module CIMI::Collections
33
34
  end
34
35
  end
35
36
 
36
- operation :show do
37
+ operation :show, :with_capability => :address do
37
38
  description 'Show a specific Address'
38
39
  control do
39
40
  address = CIMI::Model::Address.find(params[:id], self)
@@ -44,7 +45,7 @@ module CIMI::Collections
44
45
  end
45
46
  end
46
47
 
47
- operation :create do
48
+ operation :create, :with_capability => :create_address do
48
49
  description "Create a new Address"
49
50
  control do
50
51
  if request.content_type.end_with?("json")
@@ -59,7 +60,7 @@ module CIMI::Collections
59
60
  end
60
61
  end
61
62
 
62
- operation :destroy do
63
+ operation :destroy, :with_capability => :delete_address do
63
64
  description "Delete a specified Address"
64
65
  param :id, :string, :required
65
66
  control do
@@ -16,8 +16,6 @@
16
16
  module CIMI::Collections
17
17
  class EntityMetadata < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
20
-
21
19
  collection :entity_metadata do
22
20
 
23
21
  operation :index do
@@ -16,12 +16,12 @@
16
16
  module CIMI::Collections
17
17
  class MachineAdmins < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
19
+ set :capability, lambda { |m| driver.respond_to? m }
20
20
 
21
21
  collection :machine_admins do
22
22
  description 'Machine Admin entity'
23
23
 
24
- operation :index do
24
+ operation :index, :with_capability => :keys do
25
25
  description "List all machine admins"
26
26
  param :CIMISelect, :string, :optional
27
27
  control do
@@ -33,7 +33,7 @@ module CIMI::Collections
33
33
  end
34
34
  end
35
35
 
36
- operation :show do
36
+ operation :show, :with_capability => :key do
37
37
  description "Show specific machine admin"
38
38
  control do
39
39
  machine_admin = MachineAdmin.find(params[:id], self)
@@ -44,7 +44,7 @@ module CIMI::Collections
44
44
  end
45
45
  end
46
46
 
47
- operation :create do
47
+ operation :create, :with_capability => :create_key do
48
48
  description "Show specific machine admin"
49
49
  control do
50
50
  if request.content_type.end_with?("+json")
@@ -60,7 +60,7 @@ module CIMI::Collections
60
60
  end
61
61
  end
62
62
 
63
- operation :delete do
63
+ operation :delete, :with_capability => :destroy_key do
64
64
  description "Delete specified MachineAdmin entity"
65
65
  control do
66
66
  MachineAdmin.delete!(params[:id], self)
@@ -21,7 +21,7 @@ module CIMI::Collections
21
21
  collection :machine_configurations do
22
22
  description 'List all machine configurations'
23
23
 
24
- operation :index do
24
+ operation :index, :with_capability => :hardware_profiles do
25
25
  param :CIMISelect, :string, :optional
26
26
  description "List all machine configurations"
27
27
  control do
@@ -33,7 +33,7 @@ module CIMI::Collections
33
33
  end
34
34
  end
35
35
 
36
- operation :show do
36
+ operation :show, :with_capability => :hardware_profile do
37
37
  control do
38
38
  machine_conf = MachineConfiguration.find(params[:id], self)
39
39
  respond_to do |format|
@@ -16,12 +16,12 @@
16
16
  module CIMI::Collections
17
17
  class MachineImages < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
19
+ set :capability, lambda { |m| driver.respond_to? m }
20
20
 
21
21
  collection :machine_images do
22
22
  description 'List all machine images'
23
23
 
24
- operation :index do
24
+ operation :index, :with_capability => :images do
25
25
  description "List all machine configurations"
26
26
  param :CIMISelect, :string, :optional
27
27
  control do
@@ -33,7 +33,7 @@ module CIMI::Collections
33
33
  end
34
34
  end
35
35
 
36
- operation :show do
36
+ operation :show, :with_capability => :image do
37
37
  description "Show specific machine image."
38
38
  control do
39
39
  machine_image = MachineImage.find(params[:id], self)
@@ -16,12 +16,12 @@
16
16
  module CIMI::Collections
17
17
  class Machines < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
19
+ set :capability, lambda { |m| driver.respond_to? m }
20
20
 
21
21
  collection :machines do
22
22
  description 'List all machine'
23
23
 
24
- operation :index do
24
+ operation :index, :with_capability => :instances do
25
25
  param :CIMISelect, :string, :optional
26
26
  description "List all machines"
27
27
  control do
@@ -33,7 +33,7 @@ module CIMI::Collections
33
33
  end
34
34
  end
35
35
 
36
- operation :show do
36
+ operation :show, :with_capability => :instance do
37
37
  description "Show specific machine."
38
38
  control do
39
39
  machine = Machine.find(params[:id], self)
@@ -44,7 +44,7 @@ module CIMI::Collections
44
44
  end
45
45
  end
46
46
 
47
- operation :create do
47
+ operation :create, :with_capability => :create_instance do
48
48
  description "Create a new Machine entity."
49
49
  control do
50
50
  if request.content_type.end_with?("+json")
@@ -60,7 +60,7 @@ module CIMI::Collections
60
60
  end
61
61
  end
62
62
 
63
- operation :destroy do
63
+ operation :destroy, :with_capability => :destroy_instance do
64
64
  description "Delete a specified machine."
65
65
  param :id, :string, :required
66
66
  control do
@@ -69,7 +69,7 @@ module CIMI::Collections
69
69
  end
70
70
  end
71
71
 
72
- action :stop do
72
+ action :stop, :with_capability => :stop_instance do
73
73
  description "Stop specific machine."
74
74
  control do
75
75
  machine = Machine.find(params[:id], self)
@@ -85,7 +85,7 @@ module CIMI::Collections
85
85
  end
86
86
  end
87
87
 
88
- action :restart do
88
+ action :restart, :with_capability => :restart_instance do
89
89
  description "Start specific machine."
90
90
  control do
91
91
  machine = Machine.find(params[:id], self)
@@ -101,7 +101,7 @@ module CIMI::Collections
101
101
  end
102
102
  end
103
103
 
104
- action :start do
104
+ action :start, :with_capability => :start_instance do
105
105
  description "Start specific machine."
106
106
  control do
107
107
  machine = Machine.find(params[:id], self)
@@ -117,10 +117,32 @@ module CIMI::Collections
117
117
  end
118
118
  end
119
119
 
120
+ operation :disks, :with_capability => :hardware_profiles do
121
+ description "Retrieve the Machine's DiskCollection"
122
+ control do
123
+ disks = DiskCollection.default(params[:id], self)
124
+ respond_to do |format|
125
+ format.json {disks.to_json}
126
+ format.xml {disks.to_xml}
127
+ end
128
+ end
129
+ end
130
+
131
+ operation :volumes, :with_capability => :storage_volumes do
132
+ description "Retrieve the Machine's MachineVolumeCollection"
133
+ control do
134
+ volumes = MachineVolumeCollection.default(params[:id], self)
135
+ respond_to do |format|
136
+ format.json {volumes.to_json}
137
+ format.xml {volumes.to_xml}
138
+ end
139
+ end
140
+ end
141
+
120
142
  #NOTE: The routes for attach/detach used here are NOT as specified by CIMI
121
143
  #will likely move later. CIMI specifies PUT of the whole Machine description
122
144
  #with inclusion/ommission of the volumes you want [att|det]ached
123
- action :attach_volume, :http_method => :put do
145
+ action :attach_volume, :http_method => :put, :with_capability => :attach_storage_volume do
124
146
  description "Attach CIMI Volume(s) to a machine."
125
147
  control do
126
148
  if request.content_type.end_with?("+json")
@@ -136,7 +158,7 @@ module CIMI::Collections
136
158
  end
137
159
  end
138
160
 
139
- action :detach_volume, :http_method => :put do
161
+ action :detach_volume, :http_method => :put, :with_capability => :detach_storage_volume do
140
162
  description "Detach CIMI Volume(s) from a machine."
141
163
  control do
142
164
  if request.content_type.end_with?("+json")
@@ -16,10 +16,11 @@
16
16
  module CIMI::Collections
17
17
  class NetworkConfigurations < Base
18
18
 
19
- check_capability :for => lambda { |m| driver.respond_to? m }
19
+ set :capability, lambda { |m| driver.respond_to? m }
20
+
20
21
  collection :network_configurations do
21
22
 
22
- operation :index do
23
+ operation :index, :with_capability => :network_configurations do
23
24
  description 'List all NetworkConfigurations'
24
25
  param :CIMISelect, :string, :optional
25
26
  control do
@@ -31,7 +32,7 @@ module CIMI::Collections
31
32
  end
32
33
  end
33
34
 
34
- operation :show do
35
+ operation :show, :with_capability => :network_configuration do
35
36
  description 'Show a specific NetworkConfiguration'
36
37
  control do
37
38
  network_config = NetworkConfiguration.find(params[:id], self)