deltacloud-core 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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)