deltacloud-core 1.1.0 → 1.1.1
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 +10 -12
- data/config/drivers/{aruba.yaml → arubacloud.yaml} +2 -2
- data/deltacloud-core.gemspec +4 -4
- data/lib/cimi/collections/address_templates.rb +1 -1
- data/lib/cimi/collections/addresses.rb +2 -2
- data/lib/cimi/collections/base.rb +1 -0
- data/lib/cimi/collections/credentials.rb +1 -1
- data/lib/cimi/collections/forwarding_group_templates.rb +1 -1
- data/lib/cimi/collections/forwarding_groups.rb +1 -1
- data/lib/cimi/collections/machine_configurations.rb +1 -1
- data/lib/cimi/collections/machine_images.rb +1 -1
- data/lib/cimi/collections/machine_templates.rb +1 -1
- data/lib/cimi/collections/machines.rb +2 -2
- data/lib/cimi/collections/network_configurations.rb +1 -1
- data/lib/cimi/collections/network_port_configurations.rb +1 -1
- data/lib/cimi/collections/network_port_templates.rb +1 -1
- data/lib/cimi/collections/network_ports.rb +1 -1
- data/lib/cimi/collections/network_templates.rb +1 -1
- data/lib/cimi/collections/networks.rb +1 -1
- data/lib/cimi/collections/volume_configurations.rb +1 -1
- data/lib/cimi/collections/volume_images.rb +1 -1
- data/lib/cimi/collections/volume_templates.rb +1 -1
- data/lib/cimi/collections/volumes.rb +1 -1
- data/lib/cimi/helpers/database_helper.rb +16 -61
- data/lib/cimi/helpers/filter_helper.rb +41 -0
- data/lib/cimi/helpers/select_helper.rb +62 -0
- data/lib/cimi/models.rb +21 -2
- data/lib/cimi/models/address.rb +9 -7
- data/lib/cimi/models/address_template.rb +4 -4
- data/lib/cimi/models/base.rb +62 -197
- data/lib/cimi/models/collection.rb +78 -70
- data/lib/cimi/models/disk.rb +15 -8
- data/lib/cimi/models/machine.rb +27 -29
- data/lib/cimi/models/machine_image.rb +10 -13
- data/lib/cimi/models/machine_template.rb +3 -3
- data/lib/cimi/models/resource.rb +190 -0
- data/lib/cimi/models/schema.rb +9 -0
- data/lib/cimi/models/volume.rb +10 -13
- data/lib/cimi/models/volume_configuration.rb +3 -3
- data/lib/cimi/models/volume_template.rb +2 -2
- data/lib/cimi/server.rb +1 -0
- data/lib/db.rb +15 -0
- data/lib/db/address_template.rb +15 -0
- data/lib/db/entity.rb +55 -0
- data/lib/db/machine_template.rb +15 -0
- data/lib/db/provider.rb +40 -0
- data/lib/db/volume_configuration.rb +15 -0
- data/lib/db/volume_template.rb +15 -0
- data/lib/deltacloud/collections/base.rb +1 -0
- data/lib/deltacloud/collections/instances.rb +2 -1
- data/lib/deltacloud/collections/storage_snapshots.rb +3 -1
- data/lib/deltacloud/core_ext/array.rb +5 -0
- data/lib/deltacloud/drivers/{aruba/aruba_driver.rb → arubacloud/arubacloud_driver.rb} +3 -6
- data/lib/deltacloud/drivers/digitalocean/digitalocean_driver.rb +48 -75
- data/lib/deltacloud/drivers/ec2/ec2_driver.rb +18 -3
- data/lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb +25 -0
- data/lib/deltacloud/drivers/fgcp/fgcp_client.rb +1 -1
- data/lib/deltacloud/drivers/fgcp/fgcp_driver.rb +34 -14
- data/lib/deltacloud/drivers/gogrid/gogrid_driver.rb +2 -0
- data/lib/deltacloud/drivers/mock/mock_driver.rb +3 -3
- data/lib/deltacloud/drivers/openstack/openstack_driver.rb +93 -33
- data/lib/deltacloud/drivers/rackspace/rackspace_driver.rb +2 -0
- data/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +2 -2
- data/lib/deltacloud/helpers/deltacloud_helper.rb +3 -1
- data/lib/deltacloud/helpers/rabbit_helper.rb +1 -2
- data/lib/deltacloud/models/address.rb +1 -0
- data/lib/deltacloud/models/blob.rb +1 -0
- data/lib/deltacloud/models/bucket.rb +1 -0
- data/lib/deltacloud/models/firewall.rb +1 -0
- data/lib/deltacloud/models/hardware_profile.rb +3 -1
- data/lib/deltacloud/models/image.rb +7 -0
- data/lib/deltacloud/models/instance.rb +12 -3
- data/lib/deltacloud/models/key.rb +1 -0
- data/lib/deltacloud/models/load_balancer.rb +1 -0
- data/lib/deltacloud/models/metric.rb +1 -0
- data/lib/deltacloud/models/realm.rb +10 -1
- data/lib/deltacloud/models/storage_snapshot.rb +1 -0
- data/lib/deltacloud/models/storage_volume.rb +2 -1
- data/lib/deltacloud/runner.rb +2 -1
- data/lib/deltacloud/server.rb +1 -0
- data/lib/deltacloud/version.rb +1 -1
- data/lib/deltacloud_rack.rb +4 -0
- data/tests/cimi/collections/machines_test.rb +80 -0
- data/tests/cimi/db/database_helper_test.rb +54 -99
- data/tests/cimi/db/db_helper.rb +2 -0
- data/tests/cimi/db/entity_test.rb +29 -0
- data/tests/cimi/model/collection_spec.rb +2 -2
- data/tests/cimi/model/credential_spec.rb +2 -2
- data/tests/cimi/model/machine_configuration_spec.rb +2 -2
- data/tests/cimi/model/machine_image_spec.rb +2 -2
- data/tests/cimi/model/machine_spec.rb +4 -4
- data/tests/cimi/model/machine_template_spec.rb +2 -2
- data/tests/cimi/model/volume_configuration_spec.rb +2 -2
- data/tests/cimi/model/volume_image_spec.rb +2 -2
- data/tests/cimi/model/volume_spec.rb +2 -2
- data/tests/cimi/model/volume_template_spec.rb +2 -2
- data/tests/cimi/spec_helper.rb +4 -0
- data/tests/deltacloud/collections/instances_collection_test.rb +3 -1
- data/tests/deltacloud/launcher_test.rb +3 -5
- data/tests/drivers/ec2/images_test.rb +7 -0
- data/tests/drivers/gogrid/images_test.rb +7 -0
- data/tests/drivers/openstack/instances_test.rb +8 -8
- data/tests/drivers/openstack/realms_test.rb +13 -13
- data/views/errors/403.xml.haml +2 -1
- data/views/images/show.html.haml +4 -1
- data/views/images/show.xml.haml +1 -0
- data/views/instances/new.html.haml +1 -1
- data/views/instances/show.html.haml +3 -0
- data/views/realms/index.html.haml +2 -0
- data/views/realms/show.html.haml +4 -0
- data/views/realms/show.xml.haml +3 -0
- metadata +19 -14
data/Rakefile
CHANGED
|
@@ -146,8 +146,8 @@ task :test do
|
|
|
146
146
|
Rake::Task["mock:fixtures:reset"].invoke
|
|
147
147
|
puts "\n[ \033[1;37;mrake test:ec2\33[0m ]\n"
|
|
148
148
|
Rake::Task["test:ec2"].invoke
|
|
149
|
-
puts "\n[ \033[1;37;mrake test:cimi
|
|
150
|
-
Rake::Task["test:cimi
|
|
149
|
+
puts "\n[ \033[1;37;mrake test:cimi\33[0m ]\n"
|
|
150
|
+
Rake::Task["test:cimi"].invoke
|
|
151
151
|
DRIVERS.each do |driver|
|
|
152
152
|
puts "\n[ \033[1;37;mrake drivers:#{driver}\33[0m ]\n"
|
|
153
153
|
Rake::Task["test:drivers:#{driver}"].invoke
|
|
@@ -200,17 +200,15 @@ namespace :test do
|
|
|
200
200
|
]
|
|
201
201
|
end
|
|
202
202
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
t.loader = :testrb
|
|
207
|
-
end
|
|
208
|
-
t.test_files = FileList[
|
|
209
|
-
'tests/cimi/db/*test.rb', # CIMI frontend database tests
|
|
210
|
-
'tests/cimi/model/*spec.rb', # CIMI frontend serialization API tests
|
|
211
|
-
'tests/cimi/collections/*test.rb', # CIMI frontend API tests
|
|
212
|
-
]
|
|
203
|
+
Rake::TestTask.new(:cimi) do |t|
|
|
204
|
+
unless RUBY_VERSION < '1.9.0'
|
|
205
|
+
t.loader = :testrb
|
|
213
206
|
end
|
|
207
|
+
t.test_files = FileList[
|
|
208
|
+
'tests/cimi/db/*test.rb', # CIMI frontend database tests
|
|
209
|
+
'tests/cimi/model/*spec.rb', # CIMI frontend serialization API tests
|
|
210
|
+
'tests/cimi/collections/*test.rb', # CIMI frontend API tests
|
|
211
|
+
]
|
|
214
212
|
end
|
|
215
213
|
|
|
216
214
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
:
|
|
2
|
+
:arubacloud:
|
|
3
3
|
:entrypoints:
|
|
4
4
|
compute:
|
|
5
5
|
dc1: https://api.dc1.computing.cloud.it/WsEndUser/v2.0/WsEndUser.svc?wsdl
|
|
6
6
|
dc2: https://api.dc2.computing.cloud.it/WsEndUser/v2.0/WsEndUser.svc?wsdl
|
|
7
7
|
dc3: https://api.dc3.computing.cloud.it/WsEndUser/v2.0/WsEndUser.svc?wsdl
|
|
8
|
-
:name:
|
|
8
|
+
:name: Arubacloud
|
data/deltacloud-core.gemspec
CHANGED
|
@@ -72,7 +72,7 @@ Gem::Specification.new do |s|
|
|
|
72
72
|
s.add_dependency('sinatra-rabbit', '>= 1.0.11')
|
|
73
73
|
s.add_dependency('rack', '>= 1.0.0')
|
|
74
74
|
s.add_dependency('rack-accept')
|
|
75
|
-
s.add_dependency('
|
|
75
|
+
s.add_dependency('json_pure', '>= 1.5.0')
|
|
76
76
|
s.add_dependency('net-ssh', '>= 2.0.0')
|
|
77
77
|
s.add_dependency('nokogiri', '>= 1.4.3')
|
|
78
78
|
s.add_dependency('require_relative') if RUBY_VERSION < '1.9'
|
|
@@ -89,10 +89,10 @@ Gem::Specification.new do |s|
|
|
|
89
89
|
# dependencies for various cloud providers:
|
|
90
90
|
|
|
91
91
|
# RHEV-M and oVirt
|
|
92
|
-
s.add_dependency('rbovirt', '>=0.0.
|
|
92
|
+
s.add_dependency('rbovirt', '>=0.0.17')
|
|
93
93
|
|
|
94
94
|
# Amazon EC2 S3
|
|
95
|
-
s.add_dependency('aws', '>=2.
|
|
95
|
+
s.add_dependency('aws', '>=2.7.0')
|
|
96
96
|
# Microsoft Azure
|
|
97
97
|
s.add_dependency('waz-storage', '>=1.1.0')
|
|
98
98
|
|
|
@@ -111,7 +111,7 @@ Gem::Specification.new do |s|
|
|
|
111
111
|
s.add_dependency('uuidtools', '>= 2.1.1')
|
|
112
112
|
|
|
113
113
|
# Openstack Compute and Object-Storage
|
|
114
|
-
s.add_dependency('openstack', '>= 1.0.
|
|
114
|
+
s.add_dependency('openstack', '>= 1.0.9')
|
|
115
115
|
|
|
116
116
|
# Aruba Cloud
|
|
117
117
|
s.add_dependency('savon', '>= 1.0.0')
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index do
|
|
24
24
|
description 'List all AddressTemplates in the AddressTemplateCollection'
|
|
25
25
|
control do
|
|
26
|
-
address_templates = AddressTemplate.list(self).
|
|
26
|
+
address_templates = AddressTemplate.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml {address_templates.to_xml}
|
|
29
29
|
format.json {address_templates.to_json}
|
|
@@ -20,12 +20,12 @@ module CIMI::Collections
|
|
|
20
20
|
|
|
21
21
|
collection :addresses do
|
|
22
22
|
|
|
23
|
-
description 'An Address represents an IP address, and its associated
|
|
23
|
+
description 'An Address represents an IP address, and its associated metadata, for a particular Network.'
|
|
24
24
|
|
|
25
25
|
operation :index, :with_capability => :addresses do
|
|
26
26
|
description 'List all Addresses in the AddressCollection'
|
|
27
27
|
control do
|
|
28
|
-
addresses = Address.list(self).
|
|
28
|
+
addresses = Address.list(self).select_by(params['$select'])
|
|
29
29
|
respond_to do |format|
|
|
30
30
|
format.xml {addresses.to_xml}
|
|
31
31
|
format.json {addresses.to_json}
|
|
@@ -24,7 +24,7 @@ module CIMI::Collections
|
|
|
24
24
|
operation :index, :with_capability => :keys do
|
|
25
25
|
description "List all machine admins"
|
|
26
26
|
control do
|
|
27
|
-
credentials = Credential.list(self).
|
|
27
|
+
credentials = Credential.list(self).select_by(params['$select'])
|
|
28
28
|
respond_to do |format|
|
|
29
29
|
format.xml { credentials.to_xml }
|
|
30
30
|
format.json { credentials.to_json }
|
|
@@ -22,7 +22,7 @@ module CIMI::Collections
|
|
|
22
22
|
operation :index, :with_capability => :forwarding_groups do
|
|
23
23
|
description 'List all ForwardingGroupTemplates in the ForwardingGroupTemplateCollection'
|
|
24
24
|
control do
|
|
25
|
-
forwarding_group_templates = ForwardingGroupTemplate.list(self).
|
|
25
|
+
forwarding_group_templates = ForwardingGroupTemplate.list(self).select_by(params['$select'])
|
|
26
26
|
respond_to do |format|
|
|
27
27
|
format.xml {forwarding_group_templates.to_xml}
|
|
28
28
|
format.json {forwarding_group_templates.to_json}
|
|
@@ -22,7 +22,7 @@ module CIMI::Collections
|
|
|
22
22
|
operation :index, :with_capability => :forwarding_groups do
|
|
23
23
|
description 'List all ForwardingGroups in the ForwardingGroupsCollection'
|
|
24
24
|
control do
|
|
25
|
-
forwarding_groups = ForwardingGroup.list(self).
|
|
25
|
+
forwarding_groups = ForwardingGroup.list(self).select_by(params['$select'])
|
|
26
26
|
respond_to do |format|
|
|
27
27
|
format.xml {forwarding_groups.to_xml}
|
|
28
28
|
format.json {forwarding_groups.to_json}
|
|
@@ -24,7 +24,7 @@ module CIMI::Collections
|
|
|
24
24
|
operation :index, :with_capability => :hardware_profiles do
|
|
25
25
|
description "List all machine configurations"
|
|
26
26
|
control do
|
|
27
|
-
machine_configs = MachineConfiguration.list(self).
|
|
27
|
+
machine_configs = MachineConfiguration.list(self).select_by(params['$select'])
|
|
28
28
|
respond_to do |format|
|
|
29
29
|
format.xml { machine_configs.to_xml }
|
|
30
30
|
format.json { machine_configs.to_json }
|
|
@@ -24,7 +24,7 @@ module CIMI::Collections
|
|
|
24
24
|
operation :index, :with_capability => :images do
|
|
25
25
|
description "List all machine configurations"
|
|
26
26
|
control do
|
|
27
|
-
machine_images = MachineImage.list(self).
|
|
27
|
+
machine_images = MachineImage.list(self).select_by(params['$select'])
|
|
28
28
|
respond_to do |format|
|
|
29
29
|
format.xml { machine_images.to_xml }
|
|
30
30
|
format.json { machine_images.to_json }
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index do
|
|
24
24
|
description "List all machine templates"
|
|
25
25
|
control do
|
|
26
|
-
machine_templates = CIMI::Model::MachineTemplate.list(self).
|
|
26
|
+
machine_templates = CIMI::Model::MachineTemplate.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml { machine_templates.to_xml }
|
|
29
29
|
format.json { machine_templates.to_json }
|
|
@@ -24,7 +24,7 @@ module CIMI::Collections
|
|
|
24
24
|
operation :index, :with_capability => :instances do
|
|
25
25
|
description "List all machines"
|
|
26
26
|
control do
|
|
27
|
-
machines = Machine.list(self).
|
|
27
|
+
machines = Machine.list(self).select_by(params['$select']).filter_by(params['$filter'])
|
|
28
28
|
respond_to do |format|
|
|
29
29
|
format.xml { machines.to_xml }
|
|
30
30
|
format.json { machines.to_json }
|
|
@@ -85,7 +85,7 @@ module CIMI::Collections
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
action :restart, :with_capability => :reboot_instance do
|
|
88
|
-
description "
|
|
88
|
+
description "Restart specific machine."
|
|
89
89
|
param :id, :string, :required
|
|
90
90
|
control do
|
|
91
91
|
machine = Machine.find(params[:id], self)
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index, :with_capability => :network_configurations do
|
|
24
24
|
description 'List all NetworkConfigurations'
|
|
25
25
|
control do
|
|
26
|
-
network_configurations = NetworkConfiguration.list(self).
|
|
26
|
+
network_configurations = NetworkConfiguration.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml { network_configurations.to_xml }
|
|
29
29
|
format.json { network_configurations.to_json }
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index, :with_capability => :network_port_configurations do
|
|
24
24
|
description 'List all NetworkPortConfigurations in the NetworkPortConfigurationCollection'
|
|
25
25
|
control do
|
|
26
|
-
net_port_configs = NetworkPortConfiguration.list(self).
|
|
26
|
+
net_port_configs = NetworkPortConfiguration.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml {net_port_configs.to_xml}
|
|
29
29
|
format.json {net_port_configs.to_json}
|
|
@@ -25,7 +25,7 @@ module CIMI::Collections
|
|
|
25
25
|
operation :index, :with_capability => :network_port_templates do
|
|
26
26
|
description 'List all NetworkPortTemplates in the NetworkPortTemplateCollection'
|
|
27
27
|
control do
|
|
28
|
-
network_port_templates = NetworkPortTemplate.list(self).
|
|
28
|
+
network_port_templates = NetworkPortTemplate.list(self).select_by(params['$select'])
|
|
29
29
|
respond_to do |format|
|
|
30
30
|
format.xml {network_port_templates.to_xml}
|
|
31
31
|
format.json {network_port_templates.to_json}
|
|
@@ -25,7 +25,7 @@ module CIMI::Collections
|
|
|
25
25
|
operation :index, :with_capability => :network_ports do
|
|
26
26
|
description 'List all NetworkPorts in the NetworkPortCollection'
|
|
27
27
|
control do
|
|
28
|
-
network_ports = NetworkPort.list(self).
|
|
28
|
+
network_ports = NetworkPort.list(self).select_by(params['$select'])
|
|
29
29
|
respond_to do |format|
|
|
30
30
|
format.xml {network_ports.to_xml}
|
|
31
31
|
format.json {network_ports.to_json}
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index, :with_capability => :network_templates do
|
|
24
24
|
description 'List all Network Templates in the NetworkTemplateCollection'
|
|
25
25
|
control do
|
|
26
|
-
network_templates = NetworkTemplate.list(self).
|
|
26
|
+
network_templates = NetworkTemplate.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml {network_templates.to_xml}
|
|
29
29
|
format.json {network_templates.to_json}
|
|
@@ -24,7 +24,7 @@ module CIMI::Collections
|
|
|
24
24
|
operation :index, :with_capability => :networks do
|
|
25
25
|
description "List all Networks"
|
|
26
26
|
control do
|
|
27
|
-
networks = Network.list(self).
|
|
27
|
+
networks = Network.list(self).select_by(params['$select'])
|
|
28
28
|
respond_to do |format|
|
|
29
29
|
format.xml { networks.to_xml }
|
|
30
30
|
format.json { networks.to_json }
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index, :with_capability => :storage_volumes do
|
|
24
24
|
description "Get list all VolumeConfigurations"
|
|
25
25
|
control do
|
|
26
|
-
volume_configuration = VolumeConfiguration.list(self).
|
|
26
|
+
volume_configuration = VolumeConfiguration.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml { volume_configuration.to_xml }
|
|
29
29
|
format.json { volume_configuration.to_json }
|
|
@@ -24,7 +24,7 @@ module CIMI::Collections
|
|
|
24
24
|
operation :index, :with_capability => :storage_snapshots do
|
|
25
25
|
description "List all volumes images"
|
|
26
26
|
control do
|
|
27
|
-
volume_images = VolumeImage.list(self).
|
|
27
|
+
volume_images = VolumeImage.list(self).select_by(params['$select'])
|
|
28
28
|
respond_to do |format|
|
|
29
29
|
format.xml { volume_images.to_xml }
|
|
30
30
|
format.json { volume_images.to_json }
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index, :with_capability => :storage_volumes do
|
|
24
24
|
description "Retrieve the Volume Template Collection"
|
|
25
25
|
control do
|
|
26
|
-
volume_template = VolumeTemplate.list(self).
|
|
26
|
+
volume_template = VolumeTemplate.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml { volume_template.to_xml }
|
|
29
29
|
format.json { volume_template.to_json }
|
|
@@ -23,7 +23,7 @@ module CIMI::Collections
|
|
|
23
23
|
operation :index, :with_capability => :storage_volumes do
|
|
24
24
|
description "List all volumes"
|
|
25
25
|
control do
|
|
26
|
-
volumes = Volume.list(self).
|
|
26
|
+
volumes = Volume.list(self).select_by(params['$select'])
|
|
27
27
|
respond_to do |format|
|
|
28
28
|
format.xml { volumes.to_xml }
|
|
29
29
|
format.json { volumes.to_json }
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright ownership. The
|
|
4
|
+
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the
|
|
6
|
+
# License. You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
|
|
1
16
|
module Deltacloud
|
|
2
17
|
module Helpers
|
|
3
18
|
|
|
@@ -18,25 +33,6 @@ module Deltacloud
|
|
|
18
33
|
return false
|
|
19
34
|
end
|
|
20
35
|
|
|
21
|
-
def load_attributes_for(model)
|
|
22
|
-
return {} if test_environment?
|
|
23
|
-
entity = get_entity(model)
|
|
24
|
-
entity.nil? ? {} : entity.to_hash
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def delete_attributes_for(model)
|
|
28
|
-
return if test_environment?
|
|
29
|
-
entity = get_entity(model)
|
|
30
|
-
!entity.nil? && entity.destroy
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def get_entity(model)
|
|
34
|
-
current_db.entities_dataset.first(
|
|
35
|
-
:be_kind => model.to_entity,
|
|
36
|
-
:be_id => model.id
|
|
37
|
-
)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
36
|
def current_provider
|
|
41
37
|
Thread.current[:provider] || ENV['API_PROVIDER'] || 'default'
|
|
42
38
|
end
|
|
@@ -46,49 +42,8 @@ module Deltacloud
|
|
|
46
42
|
#
|
|
47
43
|
|
|
48
44
|
def current_db
|
|
49
|
-
Deltacloud::Database::Provider.
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def store_attributes_for(model, attrs={})
|
|
53
|
-
return if test_environment? or model.nil? or attrs.empty?
|
|
54
|
-
return if model.id.nil?
|
|
55
|
-
|
|
56
|
-
unless entity = get_entity(model)
|
|
57
|
-
entity = Deltacloud::Database::Entity.new(
|
|
58
|
-
:provider_id => current_db.id,
|
|
59
|
-
:be_id => model.id,
|
|
60
|
-
:be_kind => model.to_entity
|
|
61
|
-
)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
entity.description = extract_attribute_value('description', attrs) if attrs.has_key? 'description'
|
|
65
|
-
entity.name = extract_attribute_value('name', attrs) if attrs.has_key? 'name'
|
|
66
|
-
|
|
67
|
-
if attrs.has_key? 'properties'
|
|
68
|
-
entity.ent_properties = extract_attribute_value('properties', attrs).to_json
|
|
69
|
-
elsif attrs.has_key? 'property'
|
|
70
|
-
entity.ent_properties = extract_attribute_value('property', attrs).to_json
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
entity.exists? ? entity.save_changes : entity.save
|
|
74
|
-
|
|
75
|
-
entity
|
|
45
|
+
Deltacloud::Database::Provider.lookup
|
|
76
46
|
end
|
|
77
|
-
|
|
78
|
-
# In XML serialization the values stored in attrs are arrays, dues to
|
|
79
|
-
# XmlSimple. This method will help extract values from them
|
|
80
|
-
#
|
|
81
|
-
def extract_attribute_value(name, attrs={})
|
|
82
|
-
return unless attrs[name]
|
|
83
|
-
if name == 'property'
|
|
84
|
-
attrs[name].is_a?(Array) ?
|
|
85
|
-
attrs[name].inject({}) { |r, v| r[v['key']] = v['content']; r} :
|
|
86
|
-
attrs[name]
|
|
87
|
-
else
|
|
88
|
-
attrs[name].is_a?(Array) ? attrs[name].first : attrs[name]
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
47
|
end
|
|
93
48
|
end
|
|
94
49
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright ownership. The
|
|
4
|
+
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the
|
|
6
|
+
# License. You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
|
|
16
|
+
module CIMI
|
|
17
|
+
module Helpers
|
|
18
|
+
module FilterResourceMethods
|
|
19
|
+
|
|
20
|
+
def filter_by(filter_opts)
|
|
21
|
+
return self if filter_opts.nil?
|
|
22
|
+
return self unless kind_of? CIMI::Model::Collection
|
|
23
|
+
attribute, value = parse_filter_opts(filter_opts)
|
|
24
|
+
if attribute =~ /\!$/
|
|
25
|
+
attribute.chomp!('!')
|
|
26
|
+
self.entries.delete_if { |entry| entry[attribute.to_sym] == value }
|
|
27
|
+
else
|
|
28
|
+
self.entries.delete_if { |entry| entry[attribute.to_sym] != value }
|
|
29
|
+
end
|
|
30
|
+
self
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def parse_filter_opts(opts)
|
|
34
|
+
attribute, value = opts.split('=')
|
|
35
|
+
value.gsub!(/\A("|')|("|')\Z/, '')
|
|
36
|
+
[attribute, value]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright ownership. The
|
|
4
|
+
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the
|
|
6
|
+
# License. You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
|
|
16
|
+
module CIMI
|
|
17
|
+
module Helpers
|
|
18
|
+
module SelectResourceMethods
|
|
19
|
+
|
|
20
|
+
def select_by(filter_opts)
|
|
21
|
+
return self if filter_opts.nil?
|
|
22
|
+
return self unless kind_of? CIMI::Model::Collection
|
|
23
|
+
if filter_opts.include? ','
|
|
24
|
+
return select_attributes(filter_opts.split(',').map{ |a| a.intern })
|
|
25
|
+
end
|
|
26
|
+
case filter_opts
|
|
27
|
+
when /^([\w\_]+)$/ then select_attributes([$1.intern])
|
|
28
|
+
when /^([\w\_]+)\[(\d+\-\d+)\]$/ then select_by_arr_range($1.intern, $2)
|
|
29
|
+
when /^([\w\_]+)\[(\d+)\]$/ then select_by_arr_index($1.intern, $2)
|
|
30
|
+
else self
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def select_by_arr_index(attr, filter)
|
|
35
|
+
return self unless self.respond_to?(attr)
|
|
36
|
+
self.class.new(attr => [self.send(attr)[filter.to_i]])
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def select_by_arr_range(attr, filter)
|
|
40
|
+
return self unless self.respond_to?(attr)
|
|
41
|
+
filter = filter.split('-').inject { |s,e| s.to_i..e.to_i }
|
|
42
|
+
self.class.new(attr => self.send(attr)[filter])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
module SelectBaseMethods
|
|
48
|
+
def select_attributes(attr_list)
|
|
49
|
+
attrs = attr_list.inject({}) do |result, attr|
|
|
50
|
+
attr = attr.to_s.underscore
|
|
51
|
+
result[attr.to_sym] = self.send(attr) if self.respond_to?(attr)
|
|
52
|
+
result
|
|
53
|
+
end
|
|
54
|
+
self.class.new(attrs.merge(
|
|
55
|
+
:select_attr_list => attr_list,
|
|
56
|
+
:base_id => self.send(:id)
|
|
57
|
+
))
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|