deltacloud-core 1.0.4 → 1.0.5
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.
- 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
|