deltacloud-core 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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/lib/cimi/models/volume.rb
CHANGED
@@ -71,7 +71,7 @@ class CIMI::Model::Volume < CIMI::Model::Base
|
|
71
71
|
|
72
72
|
def self.delete!(id, context)
|
73
73
|
context.driver.destroy_storage_volume(context.credentials, {:id=>id} )
|
74
|
-
|
74
|
+
new(:id => id).destroy
|
75
75
|
end
|
76
76
|
|
77
77
|
def self.find_to_attach_from_json(json_in, context)
|
@@ -86,10 +86,6 @@ class CIMI::Model::Volume < CIMI::Model::Base
|
|
86
86
|
:attachment_point=>v["attachmentPoint"] }}
|
87
87
|
end
|
88
88
|
|
89
|
-
def to_entity
|
90
|
-
'volume'
|
91
|
-
end
|
92
|
-
|
93
89
|
private
|
94
90
|
|
95
91
|
def self.create_volume(params, data, context)
|
@@ -104,22 +100,23 @@ class CIMI::Model::Volume < CIMI::Model::Base
|
|
104
100
|
:name=>data["name"]}
|
105
101
|
end
|
106
102
|
storage_volume = context.driver.create_storage_volume(context.credentials, opts)
|
107
|
-
|
108
|
-
|
103
|
+
result = from_storage_volume(storage_volume, context)
|
104
|
+
result.name = data['name'] if data['name']
|
105
|
+
result.description = data['description']
|
106
|
+
result.extract_properties!(data)
|
107
|
+
result.save
|
108
|
+
result
|
109
109
|
end
|
110
110
|
|
111
|
-
def self.from_storage_volume(volume, context
|
112
|
-
|
113
|
-
self.new( { :name => stored_attributes[:name] || volume.id,
|
114
|
-
:description => stored_attributes[:description] || 'Description of Volume',
|
115
|
-
:property => stored_attributes[:property],
|
111
|
+
def self.from_storage_volume(volume, context)
|
112
|
+
self.new( { :name => volume.id,
|
116
113
|
:created => volume.created.nil? ? nil : Time.parse(volume.created).xmlschema,
|
117
114
|
:id => context.volume_url(volume.id),
|
118
115
|
:capacity => context.to_kibibyte(volume.capacity, 'GB'),
|
119
116
|
:bootable => "false", #fixme ... will vary... ec2 doesn't expose this
|
120
117
|
:snapshots => [], #fixme...
|
121
118
|
:type => 'http://schemas.dmtf.org/cimi/1/mapped',
|
122
|
-
:state => volume.state,
|
119
|
+
:state => volume.state == 'IN-USE' ? 'AVAILABLE' : volume.state,
|
123
120
|
:meters => [],
|
124
121
|
:operations => [{:href=> context.volume_url(volume.id), :rel => "delete"}]
|
125
122
|
} )
|
@@ -32,7 +32,7 @@ class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
|
|
32
32
|
:description => json['description'],
|
33
33
|
:format => json['format'],
|
34
34
|
:capacity => json['capacity'],
|
35
|
-
:ent_properties => json['properties'].to_json
|
35
|
+
:ent_properties => json['properties'] ? json['properties'].to_json : {}
|
36
36
|
)
|
37
37
|
from_db(new_config, context)
|
38
38
|
end
|
@@ -45,7 +45,7 @@ class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
|
|
45
45
|
:description => xml['description'].first,
|
46
46
|
:format => xml['format'].first,
|
47
47
|
:capacity => xml['capacity'].first,
|
48
|
-
:ent_properties => JSON::dump(xml['property'].inject({}) { |r, p| r[p['key']]=p['content']; r })
|
48
|
+
:ent_properties => xml['property'] ? JSON::dump(xml['property'].inject({}) { |r, p| r[p['key']]=p['content']; r }) : {}
|
49
49
|
)
|
50
50
|
from_db(new_config, context)
|
51
51
|
end
|
@@ -81,7 +81,7 @@ class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
|
|
81
81
|
:description => model.description,
|
82
82
|
:format => model.format,
|
83
83
|
:capacity => context.to_kibibyte(model.capacity, "GB"),
|
84
|
-
:property => JSON::parse(model.ent_properties),
|
84
|
+
:property => (model.ent_properties ? JSON::parse(model.ent_properties) : nil),
|
85
85
|
:operations => [
|
86
86
|
{ :href => context.destroy_volume_configuration_url(model.id), :rel => 'http://schemas.dmtf.org/cimi/1/action/delete' }
|
87
87
|
]
|
@@ -56,7 +56,7 @@ class CIMI::Model::VolumeTemplate < CIMI::Model::Base
|
|
56
56
|
:description => input['description'],
|
57
57
|
:volume_config => input['volumeConfig']['href'],
|
58
58
|
:volume_image => vol_image,
|
59
|
-
:ent_properties => JSON::dump(input['property'].inject({}) { |r, p| r[p['key']]=p['content']; r })
|
59
|
+
:ent_properties => input['property'] ? JSON::dump(input['property'].inject({}) { |r, p| r[p['key']]=p['content']; r }) : {}
|
60
60
|
)
|
61
61
|
from_db(new_template, context)
|
62
62
|
end
|
@@ -74,7 +74,7 @@ private
|
|
74
74
|
:description => model.description,
|
75
75
|
:volume_config => {:href => model.volume_config},
|
76
76
|
:volume_image => {:href => model.volume_image},
|
77
|
-
:property => JSON::parse(model.ent_properties),
|
77
|
+
:property => (model.ent_properties ? JSON::parse(model.ent_properties) : nil),
|
78
78
|
:operations => [
|
79
79
|
{ :href => context.destroy_volume_template_url(model.id), :rel => 'http://schemas.dmtf.org/cimi/1/action/delete' }
|
80
80
|
]
|
data/lib/cimi/server.rb
CHANGED
data/lib/db.rb
CHANGED
@@ -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
|
|
3
18
|
def self.test_environment?
|
data/lib/db/address_template.rb
CHANGED
@@ -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 Database
|
3
18
|
|
data/lib/db/entity.rb
CHANGED
@@ -1,8 +1,25 @@
|
|
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 Database
|
3
18
|
|
4
19
|
class Entity < Sequel::Model
|
5
20
|
|
21
|
+
attr_accessor :properties
|
22
|
+
|
6
23
|
many_to_one :provider
|
7
24
|
|
8
25
|
plugin :single_table_inheritance, :model
|
@@ -16,6 +33,44 @@ module Deltacloud
|
|
16
33
|
retval
|
17
34
|
end
|
18
35
|
|
36
|
+
def properties=(v)
|
37
|
+
# Make sure @properties is always a Hash
|
38
|
+
@properties = v || {}
|
39
|
+
end
|
40
|
+
|
41
|
+
def before_save
|
42
|
+
self.ent_properties = properties.to_json
|
43
|
+
super
|
44
|
+
end
|
45
|
+
|
46
|
+
def after_initialize
|
47
|
+
if ent_properties
|
48
|
+
self.properties = JSON::parse(ent_properties)
|
49
|
+
else
|
50
|
+
self.properties = {}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Load the entity for the CIMI::Model +model+, or create a new one if
|
55
|
+
# none exists yet
|
56
|
+
def self.retrieve(model)
|
57
|
+
unless model.id
|
58
|
+
raise "Can not retrieve entity for #{model.class.name} without an id"
|
59
|
+
end
|
60
|
+
h = model_hash(model)
|
61
|
+
entity = Provider::lookup.entities_dataset.first(h)
|
62
|
+
unless entity
|
63
|
+
h[:provider_id] = Provider::lookup.id
|
64
|
+
entity = Entity.new(h)
|
65
|
+
end
|
66
|
+
entity
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def self.model_hash(model)
|
71
|
+
{ :be_kind => model.class.name,
|
72
|
+
:be_id => model.id.split("/").last }
|
73
|
+
end
|
19
74
|
end
|
20
75
|
|
21
76
|
end
|
data/lib/db/machine_template.rb
CHANGED
@@ -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 Database
|
3
18
|
|
data/lib/db/provider.rb
CHANGED
@@ -1,12 +1,52 @@
|
|
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
|
+
require_relative '../deltacloud/helpers/driver_helper'
|
17
|
+
|
1
18
|
module Deltacloud
|
2
19
|
module Database
|
3
20
|
|
4
21
|
class Provider < Sequel::Model
|
22
|
+
extend Deltacloud::Helpers::Drivers
|
23
|
+
|
5
24
|
one_to_many :entities
|
6
25
|
one_to_many :machine_templates
|
7
26
|
one_to_many :address_templates
|
8
27
|
one_to_many :volume_templates
|
9
28
|
one_to_many :volume_configurations
|
29
|
+
|
30
|
+
# Find the DB provider set in the environment/request
|
31
|
+
def self.lookup
|
32
|
+
prov = Thread.current[:provider] || ENV['API_PROVIDER'] || 'default'
|
33
|
+
find_or_create(:driver => current_driver_name, :url => prov)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# In case this model is used outside the Deltacloud server (CIMI tests, CIMI
|
39
|
+
# client, etc), the 'Deltacloud.default_frontend' is not initialized.
|
40
|
+
# In that case we have to use the 'fallback' way to retrieve current
|
41
|
+
# driver name.
|
42
|
+
#
|
43
|
+
def self.current_driver_name
|
44
|
+
if Deltacloud.respond_to?(:default_frontend)
|
45
|
+
self.driver_symbol.to_s
|
46
|
+
else
|
47
|
+
Thread.current[:driver] || ENV['API_DRIVER'] || 'mock'
|
48
|
+
end
|
49
|
+
end
|
10
50
|
end
|
11
51
|
|
12
52
|
end
|
@@ -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 Database
|
3
18
|
|
data/lib/db/volume_template.rb
CHANGED
@@ -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 Database
|
3
18
|
|
@@ -23,7 +23,7 @@ module Deltacloud::Collections
|
|
23
23
|
|
24
24
|
new_route_for(:instances) do
|
25
25
|
@instance = Instance.new( { :id=>params[:id], :image_id=>params[:image_id] } )
|
26
|
-
@image =
|
26
|
+
@image = driver.image(credentials, :id => params[:image_id])
|
27
27
|
@hardware_profiles = driver.hardware_profiles(credentials, :architecture => @image.architecture )
|
28
28
|
@realms = [Realm.new(:id => params[:realm_id])] if params[:realm_id]
|
29
29
|
@realms ||= driver.realms(credentials)
|
@@ -115,6 +115,7 @@ module Deltacloud::Collections
|
|
115
115
|
respond_to do |format|
|
116
116
|
format.xml { haml :"instances/run" }
|
117
117
|
format.html { haml :"instances/run" }
|
118
|
+
format.json { JSON::dump({:instance => { :id => params[:id], :public_address => @output.ssh.network.ip, :command => @output.ssh.command, :output => @output.body}})}
|
118
119
|
end
|
119
120
|
end
|
120
121
|
end
|
@@ -26,7 +26,9 @@ module Deltacloud::Collections
|
|
26
26
|
standard_show_operation
|
27
27
|
|
28
28
|
operation :create, :with_capability => :create_storage_snapshot do
|
29
|
-
param :volume_id,
|
29
|
+
param :volume_id, :string, :required
|
30
|
+
param :name, :string, :optional
|
31
|
+
param :description, :string, :optional
|
30
32
|
control do
|
31
33
|
@storage_snapshot = driver.create_storage_snapshot(credentials, params)
|
32
34
|
status 201 # Created
|
@@ -17,17 +17,14 @@
|
|
17
17
|
|
18
18
|
require "savon"
|
19
19
|
|
20
|
-
Savon.configure do |config|
|
21
|
-
config.log = false
|
22
|
-
end
|
23
20
|
HTTPI.log = false
|
24
21
|
|
25
22
|
|
26
23
|
module Deltacloud
|
27
24
|
module Drivers
|
28
|
-
module
|
25
|
+
module Arubacloud
|
29
26
|
|
30
|
-
class
|
27
|
+
class ArubacloudDriver < Deltacloud::BaseDriver
|
31
28
|
|
32
29
|
DEFAULT_DC = 'dc1'
|
33
30
|
feature :instances, :authentication_password
|
@@ -307,7 +304,7 @@ class ArubaDriver < Deltacloud::BaseDriver
|
|
307
304
|
def new_client(credentials, realm_id=nil)
|
308
305
|
safely do
|
309
306
|
wsdl = realm_id ? Deltacloud::Drivers::driver_config[:aruba][:entrypoints]["compute"]["dc#{realm_id}"] : endpoint
|
310
|
-
client = Savon.client(wsdl)
|
307
|
+
client = Savon.client({wsdl: wsdl, log: false})
|
311
308
|
client.wsse.credentials credentials.user, credentials.password
|
312
309
|
client.request :get_user_authentication_token
|
313
310
|
client
|
@@ -23,76 +23,6 @@ module Deltacloud
|
|
23
23
|
feature :instances, :user_name
|
24
24
|
feature :images, :owner_id
|
25
25
|
|
26
|
-
define_hardware_profile '66' do
|
27
|
-
cpu 1
|
28
|
-
memory 512
|
29
|
-
storage 20 * 1024
|
30
|
-
architecture ['i386', 'x86_64']
|
31
|
-
end
|
32
|
-
|
33
|
-
define_hardware_profile '63' do
|
34
|
-
cpu 1
|
35
|
-
memory 1024
|
36
|
-
storage 30 * 1024
|
37
|
-
architecture ['i386', 'x86_64']
|
38
|
-
end
|
39
|
-
|
40
|
-
define_hardware_profile '62' do
|
41
|
-
cpu 2
|
42
|
-
memory 2 * 1024
|
43
|
-
storage 40 * 1024
|
44
|
-
architecture ['i386', 'x86_64']
|
45
|
-
end
|
46
|
-
|
47
|
-
define_hardware_profile '64' do
|
48
|
-
cpu 2
|
49
|
-
memory 4 * 1024
|
50
|
-
storage 60 * 1024
|
51
|
-
architecture ['i386', 'x86_64']
|
52
|
-
end
|
53
|
-
|
54
|
-
define_hardware_profile '65' do
|
55
|
-
cpu 4
|
56
|
-
memory 8 * 1024
|
57
|
-
storage 80 * 1024
|
58
|
-
architecture ['i386', 'x86_64']
|
59
|
-
end
|
60
|
-
|
61
|
-
define_hardware_profile '61' do
|
62
|
-
cpu 8
|
63
|
-
memory 16 * 1024
|
64
|
-
storage 160 * 1024
|
65
|
-
architecture ['i386', 'x86_64']
|
66
|
-
end
|
67
|
-
|
68
|
-
define_hardware_profile '60' do
|
69
|
-
cpu 12
|
70
|
-
memory 32 * 1024
|
71
|
-
storage 320 * 1024
|
72
|
-
architecture ['i386', 'x86_64']
|
73
|
-
end
|
74
|
-
|
75
|
-
define_hardware_profile '70' do
|
76
|
-
cpu 16
|
77
|
-
memory 48 * 1024
|
78
|
-
storage 480 * 1024
|
79
|
-
architecture ['i386', 'x86_64']
|
80
|
-
end
|
81
|
-
|
82
|
-
define_hardware_profile '69' do
|
83
|
-
cpu 16
|
84
|
-
memory 64 * 1024
|
85
|
-
storage 640 * 1024
|
86
|
-
architecture ['i386', 'x86_64']
|
87
|
-
end
|
88
|
-
|
89
|
-
define_hardware_profile '68' do
|
90
|
-
cpu 24
|
91
|
-
memory 96 * 1024
|
92
|
-
storage 960 * 1024
|
93
|
-
architecture ['i386', 'x86_64']
|
94
|
-
end
|
95
|
-
|
96
26
|
define_instance_states do
|
97
27
|
start.to( :pending ) .on( :create )
|
98
28
|
pending.to( :running ) .automatically
|
@@ -105,6 +35,36 @@ module Deltacloud
|
|
105
35
|
error.from(:running, :pending, :stopping)
|
106
36
|
end
|
107
37
|
|
38
|
+
define_hardware_profile('default')
|
39
|
+
|
40
|
+
def hardware_profiles(credentials, opts={})
|
41
|
+
do_client = new_client(credentials)
|
42
|
+
results = []
|
43
|
+
safely do
|
44
|
+
if opts[:id]
|
45
|
+
size = do_client.get("sizes/#{opts[:id]}")["size"]
|
46
|
+
results << hardware_profile_from(size)
|
47
|
+
else
|
48
|
+
sizes = do_client.get("sizes")["sizes"].each do |s|
|
49
|
+
size = do_client.get("sizes/#{s['id']}")["size"]
|
50
|
+
results << hardware_profile_from(size)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
filter_hardware_profiles(results, opts)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def hardware_profile_ids(credentials)
|
58
|
+
do_client = new_client(credentials)
|
59
|
+
hwps = []
|
60
|
+
safely do
|
61
|
+
do_client.get("sizes")["sizes"].each do |s|
|
62
|
+
hwps << HardwareProfile.new(s["id"].to_s)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
hwps
|
66
|
+
end
|
67
|
+
|
108
68
|
def realms(credentials, opts={})
|
109
69
|
safely do
|
110
70
|
new_client(credentials).get('regions')['regions'].map do |r|
|
@@ -124,18 +84,19 @@ module Deltacloud
|
|
124
84
|
# values to get less images.
|
125
85
|
#
|
126
86
|
def images(credentials, opts={})
|
87
|
+
hwps = hardware_profile_ids(credentials)
|
127
88
|
unless opts[:id]
|
128
|
-
filter = opts[:owner_id] ? { :filter =>
|
89
|
+
filter = opts[:owner_id] ? { :filter => "my_images" } : {}
|
129
90
|
img_arr = safely do
|
130
91
|
new_client(credentials).get('images', filter)['images'].map do |i|
|
131
|
-
convert_image(
|
92
|
+
convert_image(hwps, i)
|
132
93
|
end
|
133
94
|
end
|
134
95
|
filter_on( img_arr, :architecture, opts )
|
135
96
|
else
|
136
97
|
safely do
|
137
98
|
[convert_image(
|
138
|
-
|
99
|
+
hwps,
|
139
100
|
new_client(credentials).get('images/%s' % opts[:id])['image']
|
140
101
|
)]
|
141
102
|
end
|
@@ -289,7 +250,7 @@ module Deltacloud
|
|
289
250
|
)
|
290
251
|
end
|
291
252
|
|
292
|
-
def convert_image(
|
253
|
+
def convert_image(hwps, i)
|
293
254
|
Image.new(
|
294
255
|
:id => i['id'].to_s,
|
295
256
|
:name => i['name'],
|
@@ -297,10 +258,22 @@ module Deltacloud
|
|
297
258
|
:owner_id => 'global',
|
298
259
|
:state => 'AVAILABLE',
|
299
260
|
:architecture => extract_arch_from_name(i['name']),
|
300
|
-
:hardware_profiles =>
|
261
|
+
:hardware_profiles => hwps
|
301
262
|
)
|
302
263
|
end
|
303
264
|
|
265
|
+
#{"cost_per_hour"=>0.00744, "cpu"=>1, "disk"=>20, "id"=>66, "memory"=>512, "name"=>"512MB"}
|
266
|
+
def hardware_profile_from(size)
|
267
|
+
hwp = HardwareProfile.new(size["id"].to_s) do
|
268
|
+
architecture 'x86_64'
|
269
|
+
memory size["memory"]
|
270
|
+
storage size["disk"]
|
271
|
+
cpu size["cpu"]
|
272
|
+
end
|
273
|
+
hwp.name=size["name"]
|
274
|
+
return hwp
|
275
|
+
end
|
276
|
+
|
304
277
|
end
|
305
278
|
end
|
306
279
|
end
|