deltacloud-core 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/config/drivers/aruba.yaml +3 -3
- data/deltacloud-core.gemspec +2 -2
- data/lib/cimi/collections/address_templates.rb +1 -2
- data/lib/cimi/collections/addresses.rb +1 -2
- data/lib/cimi/collections/base.rb +1 -1
- data/lib/cimi/collections/credentials.rb +2 -3
- data/lib/cimi/collections/forwarding_group_templates.rb +1 -2
- data/lib/cimi/collections/forwarding_groups.rb +1 -2
- data/lib/cimi/collections/machine_configurations.rb +1 -2
- data/lib/cimi/collections/machine_images.rb +1 -2
- data/lib/cimi/collections/machines.rb +9 -9
- data/lib/cimi/collections/network_configurations.rb +1 -2
- data/lib/cimi/collections/network_port_configurations.rb +1 -2
- data/lib/cimi/collections/network_port_templates.rb +1 -2
- data/lib/cimi/collections/network_ports.rb +1 -2
- data/lib/cimi/collections/network_templates.rb +1 -2
- data/lib/cimi/collections/networks.rb +2 -3
- data/lib/cimi/collections/volume_configurations.rb +1 -2
- data/lib/cimi/collections/volume_images.rb +1 -2
- data/lib/cimi/collections/volumes.rb +3 -4
- data/lib/cimi/helpers/cimi_helper.rb +7 -2
- data/lib/cimi/models.rb +6 -10
- data/lib/cimi/models/base.rb +48 -35
- data/lib/cimi/models/cloud_entry_point.rb +22 -1
- data/lib/cimi/models/collection.rb +42 -5
- data/lib/cimi/models/credential.rb +1 -1
- data/lib/cimi/models/disk.rb +39 -10
- data/lib/cimi/models/machine.rb +39 -22
- data/lib/cimi/models/machine_configuration.rb +4 -5
- data/lib/cimi/models/machine_image.rb +1 -1
- data/lib/cimi/models/machine_volume.rb +1 -1
- data/lib/cimi/models/network.rb +6 -3
- data/lib/cimi/models/network_port.rb +13 -2
- data/lib/cimi/models/schema.rb +66 -5
- data/lib/cimi/models/volume.rb +17 -16
- data/lib/cimi/models/volume_configuration.rb +7 -10
- data/lib/cimi/models/volume_image.rb +1 -1
- data/lib/deltacloud/collections/base.rb +1 -1
- data/lib/deltacloud/collections/firewalls.rb +2 -2
- data/lib/deltacloud/collections/load_balancers.rb +8 -2
- data/lib/deltacloud/core_ext.rb +1 -0
- data/lib/deltacloud/core_ext/base.rb +30 -0
- data/lib/deltacloud/drivers.rb +1 -1
- data/lib/deltacloud/drivers/base_driver.rb +1 -1
- data/lib/deltacloud/drivers/condor/condor_driver.rb +1 -1
- data/lib/deltacloud/drivers/exceptions.rb +24 -14
- data/lib/deltacloud/drivers/features.rb +3 -3
- data/lib/deltacloud/drivers/fgcp/fgcp_driver.rb +163 -92
- data/lib/deltacloud/drivers/mock/data/images/img1.yml +1 -0
- data/lib/deltacloud/drivers/mock/data/images/img2.yml +1 -0
- data/lib/deltacloud/drivers/mock/data/images/img3.yml +1 -0
- data/lib/deltacloud/drivers/mock/mock_client.rb +4 -4
- data/lib/deltacloud/drivers/mock/mock_driver.rb +16 -16
- data/lib/deltacloud/drivers/openstack/openstack_driver.rb +25 -9
- data/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +2 -1
- data/lib/deltacloud/drivers/terremark/terremark_driver.rb +1 -1
- data/lib/deltacloud/drivers/vsphere/vsphere_driver.rb +2 -0
- data/lib/deltacloud/helpers/deltacloud_helper.rb +29 -8
- data/lib/deltacloud/models/image.rb +1 -0
- data/lib/deltacloud/models/instance_profile.rb +4 -0
- data/lib/deltacloud/version.rb +1 -1
- data/lib/ec2/query_parser.rb +1 -1
- data/lib/sinatra/rack_accept.rb +5 -1
- data/lib/sinatra/rack_logger.rb +9 -2
- data/tests/cimi/collections/machine_images_test.rb +23 -6
- data/tests/cimi/collections/machines_test.rb +39 -0
- data/tests/cimi/model/collection_spec.rb +109 -0
- data/tests/cimi/{spec/cimi/model → model}/credential_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/machine_configuration_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/machine_image_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/machine_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/machine_template_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/schema_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/volume_configuration_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/volume_image_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/volume_spec.rb +1 -1
- data/tests/cimi/{spec/cimi/model → model}/volume_template_spec.rb +1 -1
- data/tests/cimi/{spec/spec_helper.rb → spec_helper.rb} +7 -4
- data/tests/drivers/base/exceptions_test.rb +8 -8
- data/tests/drivers/ec2/buckets_test.rb +1 -1
- data/tests/drivers/ec2/images_test.rb +1 -1
- data/tests/drivers/ec2/instance_test.rb +1 -1
- data/tests/drivers/ec2/keys_test.rb +2 -2
- data/tests/drivers/ec2/realms_test.rb +1 -1
- data/tests/drivers/ec2/storage_snapshots_test.rb +1 -1
- data/tests/drivers/gogrid/hardware_profiles_test.rb +1 -1
- data/tests/drivers/gogrid/images_test.rb +1 -1
- data/tests/drivers/gogrid/instances_test.rb +1 -1
- data/tests/drivers/gogrid/realms_test.rb +1 -1
- data/tests/drivers/mock/images_test.rb +7 -2
- data/tests/drivers/mock/instances_test.rb +1 -1
- data/tests/drivers/mock/keys_test.rb +2 -2
- data/tests/drivers/mock/realms_test.rb +1 -1
- data/tests/drivers/mock/storage_snapshots_test.rb +1 -1
- data/tests/drivers/mock/storage_volumes_test.rb +1 -1
- data/tests/drivers/openstack/hardware_profiles_test.rb +3 -3
- data/tests/drivers/openstack/images_test.rb +1 -1
- data/tests/drivers/openstack/instances_test.rb +1 -1
- data/tests/drivers/openstack/keys_test.rb +2 -2
- data/tests/drivers/openstack/realms_test.rb +1 -1
- data/tests/drivers/rhevm/common.rb +3 -3
- data/tests/drivers/rhevm/images_test.rb +13 -13
- data/tests/drivers/rhevm/instance_test.rb +22 -22
- data/tests/drivers/rhevm/provider_test.rb +3 -3
- data/tests/drivers/rhevm/realms_test.rb +7 -7
- data/tests/test_helper.rb +0 -5
- data/views/api/show.xml.haml +6 -3
- data/views/errors/401.html.haml +0 -16
- data/views/errors/404.html.haml +2 -3
- data/views/errors/500.html.haml +6 -5
- data/views/images/show.html.haml +5 -1
- data/views/images/show.xml.haml +8 -3
- data/views/instances/new.html.haml +1 -1
- data/views/instances/show.xml.haml +1 -1
- data/views/load_balancers/show.html.haml +1 -1
- metadata +761 -778
- data/lib/cimi/models/disk_collection.rb +0 -37
- data/lib/cimi/models/machine_volume_collection.rb +0 -34
- data/lib/cimi/models/network_port_collection.rb +0 -51
- data/lib/cimi/models/network_port_configuration_collection.rb +0 -35
- data/lib/cimi/models/network_port_template_collection.rb +0 -37
data/Rakefile
CHANGED
@@ -199,8 +199,8 @@ namespace :test do
|
|
199
199
|
t.loader = :testrb
|
200
200
|
end
|
201
201
|
t.test_files = FileList[
|
202
|
-
'tests/cimi/
|
203
|
-
'tests/cimi/collections/*test.rb',
|
202
|
+
'tests/cimi/model/*spec.rb', # CIMI frontend serialization API tests
|
203
|
+
'tests/cimi/collections/*test.rb', # CIMI frontend API tests
|
204
204
|
]
|
205
205
|
end
|
206
206
|
end
|
data/config/drivers/aruba.yaml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
:aruba:
|
3
3
|
:entrypoints:
|
4
4
|
compute:
|
5
|
-
dc1: https://api.dc1.computing.cloud.it/WsEndUser/
|
6
|
-
dc2: https://api.dc2.computing.cloud.it/WsEndUser/
|
7
|
-
dc3: https://api.dc3.computing.cloud.it/WsEndUser/
|
5
|
+
dc1: https://api.dc1.computing.cloud.it/WsEndUser/v2.0/WsEndUser.svc?wsdl
|
6
|
+
dc2: https://api.dc2.computing.cloud.it/WsEndUser/v2.0/WsEndUser.svc?wsdl
|
7
|
+
dc3: https://api.dc3.computing.cloud.it/WsEndUser/v2.0/WsEndUser.svc?wsdl
|
8
8
|
:name: Aruba
|
data/deltacloud-core.gemspec
CHANGED
@@ -82,7 +82,7 @@ Gem::Specification.new do |s|
|
|
82
82
|
# dependencies for various cloud providers:
|
83
83
|
|
84
84
|
# RHEV-M and oVirt
|
85
|
-
s.add_dependency('rbovirt', '>=0.0.
|
85
|
+
s.add_dependency('rbovirt', '>=0.0.13')
|
86
86
|
|
87
87
|
# Amazon EC2 S3
|
88
88
|
s.add_dependency('aws', '>=2.5.4')
|
@@ -104,7 +104,7 @@ Gem::Specification.new do |s|
|
|
104
104
|
s.add_dependency('uuidtools', '>= 2.1.1')
|
105
105
|
|
106
106
|
# Openstack Compute and Object-Storage
|
107
|
-
s.add_dependency('openstack', '>= 1.0.
|
107
|
+
s.add_dependency('openstack', '>= 1.0.6')
|
108
108
|
|
109
109
|
# Aruba Cloud
|
110
110
|
s.add_dependency('savon', '>= 1.0.0')
|
@@ -22,9 +22,8 @@ module CIMI::Collections
|
|
22
22
|
|
23
23
|
operation :index, :with_capability => :address_templates do
|
24
24
|
description 'List all AddressTemplates in the AddressTemplateCollection'
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
control do
|
27
|
-
address_templates = AddressTemplate.list(self).filter_by(params[
|
26
|
+
address_templates = AddressTemplate.list(self).filter_by(params['$select'])
|
28
27
|
respond_to do |format|
|
29
28
|
format.xml {address_templates.to_xml}
|
30
29
|
format.json {address_templates.to_json}
|
@@ -24,9 +24,8 @@ module CIMI::Collections
|
|
24
24
|
|
25
25
|
operation :index, :with_capability => :addresses do
|
26
26
|
description 'List all Addresses in the AddressCollection'
|
27
|
-
param :CIMISelect, :string, :optional
|
28
27
|
control do
|
29
|
-
addresses = Address.list(self).filter_by(params[
|
28
|
+
addresses = Address.list(self).filter_by(params['$select'])
|
30
29
|
respond_to do |format|
|
31
30
|
format.xml {addresses.to_xml}
|
32
31
|
format.json {addresses.to_json}
|
@@ -23,9 +23,8 @@ module CIMI::Collections
|
|
23
23
|
|
24
24
|
operation :index, :with_capability => :keys do
|
25
25
|
description "List all machine admins"
|
26
|
-
param :CIMISelect, :string, :optional
|
27
26
|
control do
|
28
|
-
credentials = Credential.list(self).filter_by(params[
|
27
|
+
credentials = Credential.list(self).filter_by(params['$select'])
|
29
28
|
respond_to do |format|
|
30
29
|
format.xml { credentials.to_xml }
|
31
30
|
format.json { credentials.to_json }
|
@@ -47,7 +46,7 @@ module CIMI::Collections
|
|
47
46
|
operation :create, :with_capability => :create_key do
|
48
47
|
description "Show specific machine admin"
|
49
48
|
control do
|
50
|
-
if request.content_type.end_with?("
|
49
|
+
if request.content_type.end_with?("json")
|
51
50
|
new_admin = Credential.create_from_json(request.body.read, self)
|
52
51
|
else
|
53
52
|
new_admin = Credential.create_from_xml(request.body.read, self)
|
@@ -21,9 +21,8 @@ module CIMI::Collections
|
|
21
21
|
|
22
22
|
operation :index, :with_capability => :forwarding_groups do
|
23
23
|
description 'List all ForwardingGroupTemplates in the ForwardingGroupTemplateCollection'
|
24
|
-
param :CIMISelect, :string, :optional
|
25
24
|
control do
|
26
|
-
forwarding_group_templates = ForwardingGroupTemplate.list(self).filter_by(params[
|
25
|
+
forwarding_group_templates = ForwardingGroupTemplate.list(self).filter_by(params['$select'])
|
27
26
|
respond_to do |format|
|
28
27
|
format.xml {forwarding_group_templates.to_xml}
|
29
28
|
format.json {forwarding_group_templates.to_json}
|
@@ -21,9 +21,8 @@ module CIMI::Collections
|
|
21
21
|
|
22
22
|
operation :index, :with_capability => :forwarding_groups do
|
23
23
|
description 'List all ForwardingGroups in the ForwardingGroupsCollection'
|
24
|
-
param :CIMISelect, :string, :optional
|
25
24
|
control do
|
26
|
-
forwarding_groups = ForwardingGroup.list(self).filter_by(params[
|
25
|
+
forwarding_groups = ForwardingGroup.list(self).filter_by(params['$select'])
|
27
26
|
respond_to do |format|
|
28
27
|
format.xml {forwarding_groups.to_xml}
|
29
28
|
format.json {forwarding_groups.to_json}
|
@@ -22,10 +22,9 @@ module CIMI::Collections
|
|
22
22
|
description 'List all machine configurations'
|
23
23
|
|
24
24
|
operation :index, :with_capability => :hardware_profiles do
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
description "List all machine configurations"
|
27
26
|
control do
|
28
|
-
machine_configs = MachineConfiguration.list(self).filter_by(params[
|
27
|
+
machine_configs = MachineConfiguration.list(self).filter_by(params['$select'])
|
29
28
|
respond_to do |format|
|
30
29
|
format.xml { machine_configs.to_xml }
|
31
30
|
format.json { machine_configs.to_json }
|
@@ -23,9 +23,8 @@ module CIMI::Collections
|
|
23
23
|
|
24
24
|
operation :index, :with_capability => :images do
|
25
25
|
description "List all machine configurations"
|
26
|
-
param :CIMISelect, :string, :optional
|
27
26
|
control do
|
28
|
-
machine_images = MachineImage.list(self).filter_by(params[
|
27
|
+
machine_images = MachineImage.list(self).filter_by(params['$select'])
|
29
28
|
respond_to do |format|
|
30
29
|
format.xml { machine_images.to_xml }
|
31
30
|
format.json { machine_images.to_json }
|
@@ -22,10 +22,9 @@ module CIMI::Collections
|
|
22
22
|
description 'List all machine'
|
23
23
|
|
24
24
|
operation :index, :with_capability => :instances do
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
description "List all machines"
|
27
26
|
control do
|
28
|
-
machines = Machine.list(self).filter_by(params[
|
27
|
+
machines = Machine.list(self).filter_by(params['$select'])
|
29
28
|
respond_to do |format|
|
30
29
|
format.xml { machines.to_xml }
|
31
30
|
format.json { machines.to_json }
|
@@ -47,12 +46,13 @@ module CIMI::Collections
|
|
47
46
|
operation :create, :with_capability => :create_instance do
|
48
47
|
description "Create a new Machine entity."
|
49
48
|
control do
|
50
|
-
if request.content_type.end_with?("
|
49
|
+
if request.content_type.end_with?("json")
|
51
50
|
new_machine = Machine.create_from_json(request.body.read, self)
|
52
51
|
else
|
53
52
|
new_machine = Machine.create_from_xml(request.body.read, self)
|
54
53
|
end
|
55
54
|
status 201 # Created
|
55
|
+
headers 'Location' => new_machine.id
|
56
56
|
respond_to do |format|
|
57
57
|
format.json { new_machine.to_json }
|
58
58
|
format.xml { new_machine.to_xml }
|
@@ -73,7 +73,7 @@ module CIMI::Collections
|
|
73
73
|
param :id, :string, :required
|
74
74
|
control do
|
75
75
|
machine = Machine.find(params[:id], self)
|
76
|
-
if request.content_type.end_with?("
|
76
|
+
if request.content_type.end_with?("json")
|
77
77
|
action = Action.from_json(request.body.read)
|
78
78
|
else
|
79
79
|
action = Action.from_xml(request.body.read)
|
@@ -90,7 +90,7 @@ module CIMI::Collections
|
|
90
90
|
param :id, :string, :required
|
91
91
|
control do
|
92
92
|
machine = Machine.find(params[:id], self)
|
93
|
-
if request.content_type.end_with?("
|
93
|
+
if request.content_type.end_with?("json")
|
94
94
|
action = Action.from_json(request.body.read)
|
95
95
|
else
|
96
96
|
action = Action.from_xml(request.body.read)
|
@@ -107,7 +107,7 @@ module CIMI::Collections
|
|
107
107
|
param :id, :string, :required
|
108
108
|
control do
|
109
109
|
machine = Machine.find(params[:id], self)
|
110
|
-
if request.content_type.end_with?("
|
110
|
+
if request.content_type.end_with?("json")
|
111
111
|
action = Action.from_json(request.body.read)
|
112
112
|
else
|
113
113
|
action = Action.from_xml(request.body.read)
|
@@ -123,7 +123,7 @@ module CIMI::Collections
|
|
123
123
|
description "Retrieve the Machine's DiskCollection"
|
124
124
|
param :id, :string, :required
|
125
125
|
control do
|
126
|
-
disks =
|
126
|
+
disks = CIMI::Model::Disk.collection_for_instance(params[:id], self)
|
127
127
|
respond_to do |format|
|
128
128
|
format.json {disks.to_json}
|
129
129
|
format.xml {disks.to_xml}
|
@@ -150,7 +150,7 @@ module CIMI::Collections
|
|
150
150
|
description "Attach CIMI Volume(s) to a machine."
|
151
151
|
param :id, :string, :required
|
152
152
|
control do
|
153
|
-
if request.content_type.end_with?("
|
153
|
+
if request.content_type.end_with?("json")
|
154
154
|
volumes_to_attach = Volume.find_to_attach_from_json(request.body.read, self)
|
155
155
|
else
|
156
156
|
volumes_to_attach = Volume.find_to_attach_from_xml(request.body.read, self)
|
@@ -167,7 +167,7 @@ module CIMI::Collections
|
|
167
167
|
description "Detach CIMI Volume(s) from a machine."
|
168
168
|
param :id, :string, :required
|
169
169
|
control do
|
170
|
-
if request.content_type.end_with?("
|
170
|
+
if request.content_type.end_with?("json")
|
171
171
|
volumes_to_detach = Volume.find_to_attach_from_json(request.body.read, self)
|
172
172
|
else
|
173
173
|
volumes_to_detach = Volume.find_to_attach_from_xml(request.body.read, self)
|
@@ -22,9 +22,8 @@ module CIMI::Collections
|
|
22
22
|
|
23
23
|
operation :index, :with_capability => :network_configurations do
|
24
24
|
description 'List all NetworkConfigurations'
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
control do
|
27
|
-
network_configurations = NetworkConfiguration.list(self).filter_by(params[
|
26
|
+
network_configurations = NetworkConfiguration.list(self).filter_by(params['$select'])
|
28
27
|
respond_to do |format|
|
29
28
|
format.xml { network_configurations.to_xml }
|
30
29
|
format.json { network_configurations.to_json }
|
@@ -22,9 +22,8 @@ module CIMI::Collections
|
|
22
22
|
|
23
23
|
operation :index, :with_capability => :network_port_configurations do
|
24
24
|
description 'List all NetworkPortConfigurations in the NetworkPortConfigurationCollection'
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
control do
|
27
|
-
net_port_configs = NetworkPortConfiguration.list(self).filter_by(params[
|
26
|
+
net_port_configs = NetworkPortConfiguration.list(self).filter_by(params['$select'])
|
28
27
|
respond_to do |format|
|
29
28
|
format.xml {net_port_configs.to_xml}
|
30
29
|
format.json {net_port_configs.to_json}
|
@@ -24,9 +24,8 @@ module CIMI::Collections
|
|
24
24
|
|
25
25
|
operation :index, :with_capability => :network_port_templates do
|
26
26
|
description 'List all NetworkPortTemplates in the NetworkPortTemplateCollection'
|
27
|
-
param :CIMISelect, :string, :optional
|
28
27
|
control do
|
29
|
-
network_port_templates = NetworkPortTemplate.list(self).filter_by(params[
|
28
|
+
network_port_templates = NetworkPortTemplate.list(self).filter_by(params['$select'])
|
30
29
|
respond_to do |format|
|
31
30
|
format.xml {network_port_templates.to_xml}
|
32
31
|
format.json {network_port_templates.to_json}
|
@@ -24,9 +24,8 @@ module CIMI::Collections
|
|
24
24
|
|
25
25
|
operation :index, :with_capability => :network_ports do
|
26
26
|
description 'List all NetworkPorts in the NetworkPortCollection'
|
27
|
-
param :CIMISelect, :string, :optional
|
28
27
|
control do
|
29
|
-
network_ports = NetworkPort.list(self).filter_by(params[
|
28
|
+
network_ports = NetworkPort.list(self).filter_by(params['$select'])
|
30
29
|
respond_to do |format|
|
31
30
|
format.xml {network_ports.to_xml}
|
32
31
|
format.json {network_ports.to_json}
|
@@ -22,9 +22,8 @@ module CIMI::Collections
|
|
22
22
|
|
23
23
|
operation :index, :with_capability => :network_templates do
|
24
24
|
description 'List all Network Templates in the NetworkTemplateCollection'
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
control do
|
27
|
-
network_templates = NetworkTemplate.list(self).filter_by(params[
|
26
|
+
network_templates = NetworkTemplate.list(self).filter_by(params['$select'])
|
28
27
|
respond_to do |format|
|
29
28
|
format.xml {network_templates.to_xml}
|
30
29
|
format.json {network_templates.to_json}
|
@@ -23,9 +23,8 @@ module CIMI::Collections
|
|
23
23
|
|
24
24
|
operation :index, :with_capability => :networks do
|
25
25
|
description "List all Networks"
|
26
|
-
param :CIMISelect, :string, :optional
|
27
26
|
control do
|
28
|
-
networks = Network.list(self).filter_by(params[
|
27
|
+
networks = Network.list(self).filter_by(params['$select'])
|
29
28
|
respond_to do |format|
|
30
29
|
format.xml { networks.to_xml }
|
31
30
|
format.json { networks.to_json }
|
@@ -125,7 +124,7 @@ module CIMI::Collections
|
|
125
124
|
description "Retrieve the Network's NetworkPortCollection"
|
126
125
|
param :id, :string, :required
|
127
126
|
control do
|
128
|
-
network_ports =
|
127
|
+
network_ports = NetworkPort.collection_for_network(params[:id], self)
|
129
128
|
respond_to do |format|
|
130
129
|
format.json {network_ports.to_json}
|
131
130
|
format.xml {network_ports.to_xml}
|
@@ -22,9 +22,8 @@ module CIMI::Collections
|
|
22
22
|
|
23
23
|
operation :index, :with_capability => :storage_volumes do
|
24
24
|
description "Get list all VolumeConfigurations"
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
control do
|
27
|
-
volume_configuration = VolumeConfiguration.list(self).filter_by(params[
|
26
|
+
volume_configuration = VolumeConfiguration.list(self).filter_by(params['$select'])
|
28
27
|
respond_to do |format|
|
29
28
|
format.xml { volume_configuration.to_xml }
|
30
29
|
format.json { volume_configuration.to_json }
|
@@ -23,9 +23,8 @@ module CIMI::Collections
|
|
23
23
|
|
24
24
|
operation :index, :with_capability => :storage_snapshots do
|
25
25
|
description "List all volumes images"
|
26
|
-
param :CIMISelect, :string, :optional
|
27
26
|
control do
|
28
|
-
volume_images = VolumeImage.list(self).filter_by(params[
|
27
|
+
volume_images = VolumeImage.list(self).filter_by(params['$select'])
|
29
28
|
respond_to do |format|
|
30
29
|
format.xml { volume_images.to_xml }
|
31
30
|
format.json { volume_images.to_json }
|
@@ -22,9 +22,8 @@ module CIMI::Collections
|
|
22
22
|
|
23
23
|
operation :index, :with_capability => :storage_volumes do
|
24
24
|
description "List all volumes"
|
25
|
-
param :CIMISelect, :string, :optional
|
26
25
|
control do
|
27
|
-
volumes = Volume.list(self).filter_by(params[
|
26
|
+
volumes = Volume.list(self).filter_by(params['$select'])
|
28
27
|
respond_to do |format|
|
29
28
|
format.xml { volumes.to_xml }
|
30
29
|
format.json { volumes.to_json }
|
@@ -50,8 +49,8 @@ module CIMI::Collections
|
|
50
49
|
operation :create do
|
51
50
|
description "Create a new Volume."
|
52
51
|
control do
|
53
|
-
content_type = (request.content_type.end_with?("
|
54
|
-
#((request.content_type.end_with?("
|
52
|
+
content_type = (request.content_type.end_with?("json") ? :json : :xml)
|
53
|
+
#((request.content_type.end_with?("xml")) ? :xml : report_error(415) ) FIXME
|
55
54
|
case content_type
|
56
55
|
when :json
|
57
56
|
new_volume = Volume.create_from_json(request.body.read, self)
|
@@ -16,6 +16,11 @@
|
|
16
16
|
module CIMI
|
17
17
|
module Helper
|
18
18
|
|
19
|
+
def expand?(collection)
|
20
|
+
params['$expand'] == '*' ||
|
21
|
+
(params['$expand'] || '').split(',').include?(collection.to_s)
|
22
|
+
end
|
23
|
+
|
19
24
|
def no_content_with_status(code=200)
|
20
25
|
body ''
|
21
26
|
status code
|
@@ -29,9 +34,9 @@ module CIMI
|
|
29
34
|
def to_kibibyte(value, unit)
|
30
35
|
case unit
|
31
36
|
when "GB"
|
32
|
-
value*1024*1024
|
37
|
+
(value*1024*1024).to_i
|
33
38
|
when "MB"
|
34
|
-
value*1024
|
39
|
+
(value*1024).to_i
|
35
40
|
else
|
36
41
|
nil # should probably be exploding something here...
|
37
42
|
end
|
data/lib/cimi/models.rb
CHANGED
@@ -24,28 +24,24 @@ require_relative './models/base'
|
|
24
24
|
require_relative './models/collection'
|
25
25
|
require_relative './models/errors'
|
26
26
|
require_relative './models/action'
|
27
|
-
require_relative './models/disk'
|
28
|
-
require_relative './models/disk_collection'
|
29
27
|
require_relative './models/machine_volume'
|
30
|
-
require_relative './models/
|
28
|
+
require_relative './models/disk'
|
31
29
|
|
32
|
-
# Toplevel entities; order matters as it determines the order
|
33
|
-
# in which the entities appear in the CEP
|
34
30
|
require_relative './models/cloud_entry_point'
|
35
31
|
require_relative './models/resource_metadata'
|
32
|
+
require_relative './models/volume'
|
33
|
+
require_relative './models/volume_template'
|
34
|
+
require_relative './models/volume_configuration'
|
35
|
+
require_relative './models/volume_image'
|
36
36
|
require_relative './models/machine'
|
37
37
|
require_relative './models/machine_template'
|
38
38
|
require_relative './models/machine_configuration'
|
39
39
|
require_relative './models/machine_image'
|
40
40
|
require_relative './models/credential'
|
41
|
-
require_relative './models/
|
42
|
-
require_relative './models/volume_template'
|
43
|
-
require_relative './models/volume_configuration'
|
44
|
-
require_relative './models/volume_image'
|
41
|
+
require_relative './models/network_port'
|
45
42
|
require_relative './models/network'
|
46
43
|
require_relative './models/network_template'
|
47
44
|
require_relative './models/network_configuration'
|
48
|
-
require_relative './models/network_port'
|
49
45
|
require_relative './models/network_port_template'
|
50
46
|
require_relative './models/network_port_configuration'
|
51
47
|
require_relative './models/address'
|
data/lib/cimi/models/base.rb
CHANGED
@@ -66,6 +66,9 @@ require 'json'
|
|
66
66
|
# [array(name, opts, &block)]
|
67
67
|
# An array of structured subobjects; the block defines the schema of
|
68
68
|
# the subobjects.
|
69
|
+
# [collection(name, opts)]
|
70
|
+
# A collection of associated objects; use the +:class+ option to
|
71
|
+
# specify the type of the collection entries
|
69
72
|
|
70
73
|
module CIMI::Model
|
71
74
|
|
@@ -88,13 +91,15 @@ module CIMI::Model
|
|
88
91
|
|
89
92
|
end
|
90
93
|
|
91
|
-
class CIMI::Model::
|
94
|
+
class CIMI::Model::Resource
|
92
95
|
|
93
96
|
#
|
94
97
|
# We keep the values of the attributes in a hash
|
95
98
|
#
|
96
99
|
attr_reader :attribute_values
|
97
100
|
|
101
|
+
CMWG_NAMESPACE = "http://schemas.dmtf.org/cimi/1"
|
102
|
+
|
98
103
|
# Keep the list of all attributes in an array +attributes+; for each
|
99
104
|
# attribute, we also define a getter and a setter to access/change the
|
100
105
|
# value for that attribute
|
@@ -143,8 +148,8 @@ class CIMI::Model::Base
|
|
143
148
|
base_schema.add_attributes!(names, attr_klass, &block)
|
144
149
|
end
|
145
150
|
names.each do |name|
|
146
|
-
define_method(name) {
|
147
|
-
define_method(:"#{name}=") { |newval|
|
151
|
+
define_method(name) { self[name] }
|
152
|
+
define_method(:"#{name}=") { |newval| self[name] = newval }
|
148
153
|
end
|
149
154
|
end
|
150
155
|
|
@@ -161,14 +166,26 @@ class CIMI::Model::Base
|
|
161
166
|
end
|
162
167
|
|
163
168
|
def []=(a, v)
|
164
|
-
@attribute_values[a] = v
|
169
|
+
@attribute_values[a] = self.class.schema.convert(a, v)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Prepare to serialize
|
173
|
+
def prepare
|
174
|
+
self.class.schema.collections.map { |coll| coll.name }.each do |n|
|
175
|
+
self[n].href = "#{self.id}/#{n}" unless self[n].href
|
176
|
+
self[n].id = "#{self.id}/#{n}" if !self[n].entries.empty?
|
177
|
+
end
|
165
178
|
end
|
166
179
|
|
167
180
|
#
|
168
181
|
# Factory methods
|
169
182
|
#
|
170
183
|
def initialize(values = {})
|
171
|
-
|
184
|
+
names = self.class.schema.attribute_names
|
185
|
+
@attribute_values = names.inject({}) do |hash, name|
|
186
|
+
hash[name] = self.class.schema.convert(name, values[name])
|
187
|
+
hash
|
188
|
+
end
|
172
189
|
end
|
173
190
|
|
174
191
|
# Construct a new object from the XML representation +xml+
|
@@ -205,13 +222,20 @@ class CIMI::Model::Base
|
|
205
222
|
self.name.split("::").last
|
206
223
|
end
|
207
224
|
|
225
|
+
def self.resource_uri
|
226
|
+
CMWG_NAMESPACE + "/" + self.name.split("::").last
|
227
|
+
end
|
228
|
+
|
208
229
|
def self.to_json(model)
|
209
|
-
|
230
|
+
json = @schema.to_json(model)
|
231
|
+
json[:resourceURI] = resource_uri
|
232
|
+
JSON::unparse(json)
|
210
233
|
end
|
211
234
|
|
212
235
|
def self.to_xml(model)
|
213
236
|
xml = @schema.to_xml(model)
|
214
|
-
xml["xmlns"] =
|
237
|
+
xml["xmlns"] = CMWG_NAMESPACE
|
238
|
+
xml["resourceURI"] = resource_uri
|
215
239
|
XmlSimple.xml_out(xml, :root_name => xml_tag_name)
|
216
240
|
end
|
217
241
|
|
@@ -223,24 +247,6 @@ class CIMI::Model::Base
|
|
223
247
|
self.class.to_xml(self)
|
224
248
|
end
|
225
249
|
|
226
|
-
#
|
227
|
-
# Common attributes for all resources
|
228
|
-
#
|
229
|
-
text :id, :name, :description, :created
|
230
|
-
|
231
|
-
hash :property
|
232
|
-
|
233
|
-
def self.acts_as_root_entity(name=nil)
|
234
|
-
if name
|
235
|
-
name = name.to_s.camelize.pluralize
|
236
|
-
else
|
237
|
-
name = xml_tag_name.pluralize.uncapitalize
|
238
|
-
end
|
239
|
-
CIMI::Model.register_as_root_entity! name
|
240
|
-
end
|
241
|
-
|
242
|
-
def self.all(_self); find(:all, _self); end
|
243
|
-
|
244
250
|
def filter_by(filter_opts)
|
245
251
|
return self if filter_opts.nil?
|
246
252
|
return filter_attributes(filter_opts.split(',').map{ |a| a.intern }) if filter_opts.include? ','
|
@@ -252,16 +258,6 @@ class CIMI::Model::Base
|
|
252
258
|
end
|
253
259
|
end
|
254
260
|
|
255
|
-
private
|
256
|
-
|
257
|
-
def filter_attributes(attr_list)
|
258
|
-
attrs = attr_list.inject({}) do |result, attr|
|
259
|
-
result[attr] = self.send(attr) if self.respond_to?(attr)
|
260
|
-
result
|
261
|
-
end
|
262
|
-
self.class.new(attrs)
|
263
|
-
end
|
264
|
-
|
265
261
|
def filter_by_arr_index(attr, filter)
|
266
262
|
return self unless self.respond_to?(attr)
|
267
263
|
self.class.new(attr => [self.send(attr)[filter.to_i]])
|
@@ -273,3 +269,20 @@ class CIMI::Model::Base
|
|
273
269
|
self.class.new(attr => self.send(attr)[filter])
|
274
270
|
end
|
275
271
|
end
|
272
|
+
|
273
|
+
class CIMI::Model::Base < CIMI::Model::Resource
|
274
|
+
#
|
275
|
+
# Common attributes for all resources
|
276
|
+
#
|
277
|
+
text :id, :name, :description, :created
|
278
|
+
|
279
|
+
hash :property
|
280
|
+
|
281
|
+
def filter_attributes(attr_list)
|
282
|
+
attrs = attr_list.inject({}) do |result, attr|
|
283
|
+
result[attr] = self.send(attr) if self.respond_to?(attr)
|
284
|
+
result
|
285
|
+
end
|
286
|
+
self.class.new(attrs)
|
287
|
+
end
|
288
|
+
end
|