deltacloud-core 1.1.1 → 1.1.2
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 +40 -28
- data/bin/deltacloud-db-upgrade +24 -0
- data/bin/deltacloudd +20 -9
- data/config.ru +12 -53
- data/db/migrations/1_add_realm_to_machine_template.rb +23 -0
- data/deltacloud-core.gemspec +11 -5
- data/lib/cimi/collections.rb +4 -31
- data/lib/cimi/collections/address_templates.rb +2 -5
- data/lib/cimi/collections/addresses.rb +2 -5
- data/lib/cimi/collections/base.rb +18 -6
- data/lib/cimi/collections/credentials.rb +2 -5
- data/lib/cimi/collections/machine_images.rb +2 -1
- data/lib/cimi/collections/machine_templates.rb +2 -5
- data/lib/cimi/collections/machines.rb +6 -9
- data/lib/cimi/collections/network_ports.rb +3 -3
- data/lib/cimi/collections/networks.rb +5 -8
- data/lib/cimi/collections/system_templates.rb +72 -0
- data/lib/cimi/collections/systems.rb +194 -0
- data/lib/cimi/collections/volume_configurations.rb +1 -1
- data/lib/cimi/collections/volume_images.rb +2 -1
- data/lib/cimi/collections/volume_templates.rb +3 -2
- data/lib/cimi/collections/volumes.rb +2 -2
- data/lib/cimi/dependencies.rb +0 -2
- data/lib/cimi/helpers/cimi_helper.rb +12 -57
- data/lib/cimi/helpers/database_helper.rb +0 -4
- data/lib/cimi/models.rb +25 -14
- data/lib/cimi/models/address.rb +4 -31
- data/lib/cimi/models/address_create.rb +51 -0
- data/lib/cimi/models/address_template.rb +8 -52
- data/lib/cimi/models/address_template_create.rb +44 -0
- data/lib/cimi/models/base.rb +44 -6
- data/lib/cimi/models/cloud_entry_point.rb +1 -1
- data/lib/cimi/models/credential.rb +1 -1
- data/lib/cimi/models/credential_create.rb +46 -0
- data/lib/cimi/models/credential_template.rb +24 -0
- data/lib/cimi/models/machine.rb +1 -71
- data/lib/cimi/models/machine_configuration.rb +3 -3
- data/lib/cimi/models/machine_create.rb +49 -0
- data/lib/cimi/models/machine_image.rb +2 -25
- data/lib/cimi/models/machine_image_create.rb +41 -0
- data/lib/cimi/models/machine_template.rb +14 -34
- data/lib/cimi/models/machine_template_create.rb +33 -0
- data/lib/cimi/models/network.rb +0 -38
- data/lib/cimi/models/network_create.rb +43 -0
- data/lib/cimi/models/network_port.rb +17 -17
- data/lib/cimi/models/network_template.rb +2 -3
- data/lib/cimi/models/resource.rb +22 -3
- data/lib/cimi/models/schema.rb +94 -8
- data/lib/cimi/models/system.rb +67 -0
- data/lib/cimi/models/system_template.rb +63 -0
- data/lib/cimi/models/volume.rb +2 -42
- data/lib/cimi/models/volume_configuration.rb +4 -4
- data/lib/cimi/models/volume_create.rb +58 -0
- data/lib/cimi/models/volume_image.rb +8 -17
- data/lib/cimi/models/volume_image_create.rb +47 -0
- data/lib/cimi/models/volume_template.rb +6 -19
- data/lib/cimi/models/volume_template_create.rb +33 -0
- data/lib/db.rb +14 -22
- data/lib/db/volume_template.rb +1 -1
- data/lib/deltacloud/api.rb +6 -5
- data/lib/deltacloud/collections.rb +4 -27
- data/lib/deltacloud/collections/base.rb +4 -0
- data/lib/deltacloud/collections/images.rb +1 -1
- data/lib/deltacloud/collections/instances.rb +2 -2
- data/lib/deltacloud/core_ext/array.rb +1 -0
- data/lib/deltacloud/core_ext/integer.rb +13 -9
- data/lib/deltacloud/core_ext/string.rb +45 -28
- data/lib/deltacloud/drivers/arubacloud/arubacloud_driver.rb +0 -9
- data/lib/deltacloud/drivers/base_driver.rb +45 -16
- data/lib/deltacloud/drivers/digitalocean/digitalocean_driver.rb +78 -8
- data/lib/deltacloud/drivers/ec2/ec2_driver.rb +13 -9
- data/lib/deltacloud/drivers/fgcp/fgcp_client.rb +44 -0
- data/lib/deltacloud/drivers/fgcp/fgcp_driver.rb +164 -90
- data/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb +74 -0
- data/lib/deltacloud/drivers/mock/data/instances/inst0.yml +3 -3
- data/lib/deltacloud/drivers/mock/data/instances/inst1.yml +3 -3
- data/lib/deltacloud/drivers/mock/data/instances/inst2.yml +3 -3
- data/lib/deltacloud/drivers/mock/mock_client.rb +17 -1
- data/lib/deltacloud/drivers/mock/mock_driver.rb +161 -204
- data/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb +80 -0
- data/lib/deltacloud/drivers/opennebula/opennebula_driver.rb +6 -1
- data/lib/deltacloud/drivers/openstack/openstack_driver.rb +61 -68
- data/lib/deltacloud/drivers/rackspace/rackspace_driver.rb +0 -9
- data/lib/deltacloud/drivers/rhevm/rhevm_driver.rb +11 -6
- data/lib/deltacloud/drivers/terremark/terremark_driver.rb +0 -8
- data/lib/deltacloud/drivers/vsphere/vsphere_client.rb +11 -4
- data/lib/deltacloud/drivers/vsphere/vsphere_driver.rb +0 -12
- data/lib/deltacloud/helpers/collection_helper.rb +106 -0
- data/lib/deltacloud/helpers/deltacloud_helper.rb +12 -8
- data/lib/deltacloud/models/address.rb +19 -17
- data/lib/deltacloud/models/base_model.rb +29 -26
- data/lib/deltacloud/models/blob.rb +22 -20
- data/lib/deltacloud/models/bucket.rb +21 -16
- data/lib/deltacloud/models/firewall.rb +18 -16
- data/lib/deltacloud/models/firewall_rule.rb +22 -20
- data/lib/deltacloud/models/image.rb +29 -28
- data/lib/deltacloud/models/instance.rb +92 -94
- data/lib/deltacloud/models/instance_address.rb +42 -40
- data/lib/deltacloud/models/instance_profile.rb +28 -26
- data/lib/deltacloud/models/key.rb +47 -45
- data/lib/deltacloud/models/load_balancer.rb +32 -31
- data/lib/deltacloud/models/metric.rb +76 -29
- data/lib/deltacloud/models/provider.rb +15 -13
- data/lib/deltacloud/models/realm.rb +15 -21
- data/lib/deltacloud/models/storage_snapshot.rb +23 -19
- data/lib/deltacloud/models/storage_volume.rb +35 -34
- data/lib/deltacloud/version.rb +1 -1
- data/lib/deltacloud_rack.rb +22 -0
- data/lib/initialize.rb +28 -0
- data/lib/initializers/database_initialize.rb +76 -0
- data/lib/initializers/frontend_initialize.rb +42 -0
- data/lib/initializers/mock_initialize.rb +33 -0
- data/lib/sinatra/rack_logger.rb +35 -24
- data/tests/cimi/collections/cloud_entry_point_test.rb +1 -7
- data/tests/cimi/collections/machine_images_test.rb +2 -2
- data/tests/cimi/collections/machine_templates_test.rb +75 -0
- data/tests/cimi/collections/machines_test.rb +2 -2
- data/tests/cimi/collections/system_templates_test.rb +41 -0
- data/tests/cimi/collections/systems_test.rb +50 -0
- data/tests/cimi/db/database_helper_test.rb +17 -25
- data/tests/cimi/db/db_helper.rb +1 -12
- data/tests/cimi/db/entity_test.rb +7 -8
- data/tests/cimi/model/machine_create_spec.rb +44 -0
- data/tests/cimi/model/machine_template_spec.rb +29 -0
- data/tests/cimi/model/resource_spec.rb +40 -0
- data/tests/cimi/model/schema_spec.rb +37 -0
- data/tests/cimi/spec_helper.rb +3 -0
- data/tests/deltacloud/collections/buckets_collection_test.rb +1 -1
- data/tests/deltacloud/collections/drivers_collection_test.rb +2 -2
- data/tests/deltacloud/collections/hardware_profiles_collection_test.rb +2 -2
- data/tests/deltacloud/collections/images_collection_test.rb +2 -2
- data/tests/deltacloud/collections/instance_states_collection_test.rb +1 -1
- data/tests/deltacloud/collections/instances_collection_test.rb +6 -3
- data/tests/deltacloud/collections/keys_collection_test.rb +2 -2
- data/tests/deltacloud/collections/realms_collection_test.rb +2 -2
- data/tests/deltacloud/collections/storage_snapshots_collection_test.rb +2 -2
- data/tests/deltacloud/collections/storage_volumes_collection_test.rb +2 -2
- data/tests/deltacloud/collections_test.rb +5 -5
- data/tests/deltacloud/common.rb +2 -13
- data/tests/deltacloud/launcher_test.rb +3 -3
- data/tests/deltacloud/rack_test.rb +2 -2
- data/tests/deltacloud/server_test.rb +1 -1
- data/tests/drivers/base/base_driver_test.rb +5 -5
- data/tests/drivers/base/common.rb +2 -12
- data/tests/drivers/ec2/buckets_test.rb +1 -1
- data/tests/drivers/ec2/images_test.rb +2 -2
- data/tests/drivers/ec2/instance_test.rb +6 -6
- data/tests/drivers/ec2/keys_test.rb +3 -3
- data/tests/drivers/ec2/realms_test.rb +2 -2
- data/tests/drivers/ec2/storage_snapshots_test.rb +1 -1
- data/tests/drivers/fgcp/common.rb +32 -0
- data/tests/drivers/fgcp/firewall_test.rb +70 -0
- data/tests/drivers/fgcp/hardware_profiles_test.rb +61 -0
- data/tests/drivers/fgcp/images_test.rb +46 -0
- data/tests/drivers/fgcp/provider_test.rb +27 -0
- data/tests/drivers/fgcp/realms_test.rb +53 -0
- data/tests/drivers/fgcp/storage_volumes_test.rb +58 -0
- data/tests/drivers/gogrid/images_test.rb +2 -2
- data/tests/drivers/gogrid/instances_test.rb +2 -2
- data/tests/drivers/gogrid/realms_test.rb +2 -2
- data/tests/drivers/mock/images_test.rb +4 -4
- data/tests/drivers/mock/instances_test.rb +9 -9
- data/tests/drivers/mock/keys_test.rb +3 -3
- data/tests/drivers/mock/realms_test.rb +2 -2
- data/tests/drivers/mock/storage_snapshots_test.rb +2 -2
- data/tests/drivers/mock/storage_volumes_test.rb +4 -4
- data/tests/drivers/models/instance_test.rb +2 -2
- data/tests/drivers/openstack/images_test.rb +2 -2
- data/tests/drivers/openstack/instances_test.rb +2 -3
- data/tests/drivers/openstack/keys_test.rb +1 -1
- data/tests/drivers/openstack/realms_test.rb +2 -11
- data/tests/drivers/rhevm/common.rb +33 -12
- data/tests/drivers/rhevm/images_test.rb +20 -12
- data/tests/drivers/rhevm/instance_test.rb +62 -46
- data/tests/drivers/rhevm/provider_test.rb +12 -6
- data/tests/drivers/rhevm/realms_test.rb +15 -9
- data/tests/ec2/query_parser_test.rb +1 -1
- data/tests/test_helper.rb +68 -12
- data/views/addresses/show.html.haml +1 -1
- data/views/buckets/show.html.haml +1 -1
- data/views/errors/{500.html.haml → common.html.haml} +0 -0
- data/views/errors/common.xml.haml +17 -0
- data/views/firewalls/index.xml.haml +2 -2
- data/views/firewalls/new.html.haml +2 -2
- data/views/images/show.html.haml +1 -1
- data/views/instances/run_command.html.haml +1 -1
- data/views/instances/show.html.haml +3 -3
- data/views/keys/index.html.haml +1 -0
- data/views/keys/show.html.haml +8 -4
- data/views/keys/show.xml.haml +3 -2
- data/views/load_balancers/new.html.haml +1 -1
- data/views/load_balancers/show.html.haml +2 -2
- data/views/metrics/show.html.haml +1 -1
- data/views/realms/index.html.haml +0 -2
- data/views/realms/show.html.haml +0 -4
- data/views/realms/show.xml.haml +0 -3
- data/views/storage_snapshots/index.html.haml +1 -1
- data/views/storage_snapshots/new.html.haml +1 -1
- data/views/storage_volumes/new.html.haml +2 -2
- data/views/storage_volumes/show.html.haml +3 -3
- metadata +90 -41
- data/views/errors/400.html.haml +0 -41
- data/views/errors/400.xml.haml +0 -3
- data/views/errors/401.html.haml +0 -26
- data/views/errors/401.xml.haml +0 -3
- data/views/errors/403.html.haml +0 -42
- data/views/errors/403.xml.haml +0 -9
- data/views/errors/404.html.haml +0 -28
- data/views/errors/404.xml.haml +0 -3
- data/views/errors/405.html.haml +0 -29
- data/views/errors/405.xml.haml +0 -5
- data/views/errors/409.html.haml +0 -47
- data/views/errors/409.xml.haml +0 -11
- data/views/errors/500.xml.haml +0 -13
- data/views/errors/501.html.haml +0 -44
- data/views/errors/501.xml.haml +0 -1
- data/views/errors/502.html.haml +0 -44
- data/views/errors/502.xml.haml +0 -1
- data/views/errors/504.html.haml +0 -43
- data/views/errors/504.xml.haml +0 -1
data/Rakefile
CHANGED
|
@@ -29,6 +29,8 @@ rescue LoadError
|
|
|
29
29
|
exit(1)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
require 'require_relative' if RUBY_VERSION < '1.9'
|
|
33
|
+
|
|
32
34
|
$top_srcdir = File.dirname(__FILE__)
|
|
33
35
|
$:.unshift File.join($top_srcdir, 'lib')
|
|
34
36
|
|
|
@@ -46,40 +48,44 @@ Gem::PackageTask.new(spec) do |pkg|
|
|
|
46
48
|
pkg.need_tar = true
|
|
47
49
|
end
|
|
48
50
|
|
|
51
|
+
# Not meant for enduser consumption; make sure we run our initializers
|
|
52
|
+
task :initialize do
|
|
53
|
+
require_relative 'lib/initialize.rb'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
namespace :db do
|
|
57
|
+
desc 'Execute the database migrations'
|
|
58
|
+
task 'migrate' do
|
|
59
|
+
load File.join(File.dirname(__FILE__), 'bin', 'deltacloud-db-upgrade')
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
49
63
|
namespace :mock do
|
|
50
64
|
namespace :fixtures do
|
|
51
65
|
desc "Setup Mock driver fixtures"
|
|
52
|
-
task 'setup' do
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
data = Dir::glob(File::join(File::dirname(__FILE__), "lib", "deltacloud", "drivers", "mock", "data", "*"))
|
|
61
|
-
FileUtils::mkdir_p(storage_root, :verbose => true)
|
|
62
|
-
FileUtils::cp_r(data, storage_root, :verbose => true)
|
|
66
|
+
task 'setup' => :initialize do
|
|
67
|
+
srcdir = File::join(File::dirname(__FILE__), "lib", "deltacloud", "drivers", "mock", "data")
|
|
68
|
+
data = Dir::glob(File::join(srcdir, "*"))
|
|
69
|
+
srcdir.gsub!(/^#{ENV["PWD"]}/, ".")
|
|
70
|
+
srcdir.gsub!(/^#{ENV["HOME"]}/, "~")
|
|
71
|
+
puts "Copy mock data to #{MOCK_STORAGE_DIR}"
|
|
72
|
+
puts " (from #{srcdir})"
|
|
73
|
+
FileUtils::cp_r(data, MOCK_STORAGE_DIR, :verbose => false)
|
|
63
74
|
end
|
|
64
75
|
|
|
65
76
|
desc "Remove Mock driver fixtures"
|
|
66
|
-
task 'clean' do
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
storage_root = File::join("/var/tmp", "deltacloud-mock-#{ENV["USER"]}")
|
|
71
|
-
else
|
|
72
|
-
raise "Please set either the DELTACLOUD_MOCK_STORAGE or USER environment variable"
|
|
73
|
-
end
|
|
74
|
-
FileUtils::rm_rf(storage_root, :verbose => true)
|
|
77
|
+
task 'clean' => :initialize do
|
|
78
|
+
puts "Remove mock data in #{MOCK_STORAGE_DIR}"
|
|
79
|
+
files = Dir::glob(File::join(MOCK_STORAGE_DIR, "*"))
|
|
80
|
+
FileUtils::rm_rf(files, :verbose => false)
|
|
75
81
|
end
|
|
76
82
|
|
|
77
83
|
desc "Reset Mock driver fixtures"
|
|
78
|
-
task 'reset' do
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
task 'reset' => :initialize do
|
|
85
|
+
["mock:fixtures:clean", "mock:fixtures:setup"].each do |t|
|
|
86
|
+
Rake::Task[t].reenable
|
|
87
|
+
Rake::Task[t].invoke
|
|
88
|
+
end
|
|
83
89
|
end
|
|
84
90
|
|
|
85
91
|
end
|
|
@@ -91,7 +97,8 @@ desc "List the routes defined by Rabbit"
|
|
|
91
97
|
desc "Print all routes defined for #{frontend.to_s.capitalize}"
|
|
92
98
|
task :routes do
|
|
93
99
|
ENV['API_FRONTEND'] = frontend.to_s
|
|
94
|
-
|
|
100
|
+
require_relative './lib/initialize'
|
|
101
|
+
Deltacloud.generate_routes
|
|
95
102
|
f_class = (frontend == :cimi) ? CIMI : Deltacloud
|
|
96
103
|
f_class.collections.each do |c|
|
|
97
104
|
puts "\033[1;32;m#{c.name}\33[0m"
|
|
@@ -132,9 +139,9 @@ end
|
|
|
132
139
|
# need to investigate in future.
|
|
133
140
|
#
|
|
134
141
|
if RUBY_PLATFORM == 'java'
|
|
135
|
-
DRIVERS = [:mock, :ec2, :rhevm, :gogrid, :openstack]
|
|
142
|
+
DRIVERS = [:mock, :ec2, :rhevm, :gogrid, :openstack, :fgcp]
|
|
136
143
|
else
|
|
137
|
-
DRIVERS = [:mock, :ec2, :rhevm, :google, :gogrid, :openstack]
|
|
144
|
+
DRIVERS = [:mock, :ec2, :rhevm, :google, :gogrid, :openstack, :fgcp]
|
|
138
145
|
end
|
|
139
146
|
|
|
140
147
|
desc 'Run all tests'
|
|
@@ -149,6 +156,11 @@ task :test do
|
|
|
149
156
|
puts "\n[ \033[1;37;mrake test:cimi\33[0m ]\n"
|
|
150
157
|
Rake::Task["test:cimi"].invoke
|
|
151
158
|
DRIVERS.each do |driver|
|
|
159
|
+
#
|
|
160
|
+
# FIXME: Skip FGCP tests under jRuby as jRuby openssl lacks
|
|
161
|
+
# the OpenSSL::PKCS12::PKCS12Error class
|
|
162
|
+
#
|
|
163
|
+
next if RUBY_PLATFORM == 'java' and driver == :fgcp
|
|
152
164
|
puts "\n[ \033[1;37;mrake drivers:#{driver}\33[0m ]\n"
|
|
153
165
|
Rake::Task["test:drivers:#{driver}"].invoke
|
|
154
166
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
3
|
+
# contributor license agreements. See the NOTICE file distributed with
|
|
4
|
+
# this work for additional information regarding copyright ownership. The
|
|
5
|
+
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance with the
|
|
7
|
+
# License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
13
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
14
|
+
# License for the specific language governing permissions and limitations
|
|
15
|
+
# under the License.
|
|
16
|
+
|
|
17
|
+
require 'rubygems'
|
|
18
|
+
require 'require_relative' if RUBY_VERSION < '1.9'
|
|
19
|
+
|
|
20
|
+
# Force DB upgrade
|
|
21
|
+
ENV['DB_UPGRADE'] = 'true'
|
|
22
|
+
|
|
23
|
+
require_relative './../lib/initializers/mock_initialize'
|
|
24
|
+
require_relative './../lib/initializers/database_initialize'
|
data/bin/deltacloudd
CHANGED
|
@@ -178,7 +178,6 @@ if !options[:daemon] || options[:daemon] && !have_thin
|
|
|
178
178
|
msg << ":: http://#{ENV["API_HOST"]}:#{ENV["API_PORT"]}/#{api_uri}"
|
|
179
179
|
end
|
|
180
180
|
puts msg
|
|
181
|
-
puts
|
|
182
181
|
end
|
|
183
182
|
|
|
184
183
|
if ENV['API_USER'] && ENV['API_PASSWORD']
|
|
@@ -192,11 +191,11 @@ unless have_thin
|
|
|
192
191
|
|
|
193
192
|
puts "To start Deltacloud as a daemon, install 'thin' (gem install thin)\n\n" if options[:daemon]
|
|
194
193
|
|
|
194
|
+
port = ENV["API_PORT"].to_i
|
|
195
195
|
# Read in config.ru and convert it to an instance of Rack::Builder
|
|
196
196
|
cfgfile = File.read(File.join($top_srcdir, 'config.ru'))
|
|
197
197
|
inner_app = eval("Rack::Builder.new {(" + cfgfile + "\n )}.to_app",
|
|
198
198
|
nil, 'config.ru')
|
|
199
|
-
|
|
200
199
|
app = Rack::Builder.new {
|
|
201
200
|
use Rack::CommonLogger # apache-like logging
|
|
202
201
|
use Rack::Reloader #if options[:env] == "development"
|
|
@@ -208,11 +207,20 @@ unless have_thin
|
|
|
208
207
|
port = ENV["API_PORT"].to_i
|
|
209
208
|
puts "=> Ctrl-C to shutdown server"
|
|
210
209
|
Dir::chdir($top_srcdir)
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
210
|
+
|
|
211
|
+
if RUBY_PLATFORM == 'java'
|
|
212
|
+
require 'puma'
|
|
213
|
+
events = Puma::Events.new STDOUT, STDERR
|
|
214
|
+
server = Puma::Server.new app, events
|
|
215
|
+
server.add_tcp_listener ENV['API_HOST'], port
|
|
216
|
+
server.run(false)
|
|
217
|
+
else
|
|
218
|
+
Rack::Server::start(:app => app,
|
|
219
|
+
:Host => ENV["API_HOST"],
|
|
220
|
+
:Port => port,
|
|
221
|
+
:server => 'webrick',
|
|
222
|
+
:AccessLog => [])
|
|
223
|
+
end
|
|
216
224
|
else
|
|
217
225
|
argv_opts = ARGV.clone
|
|
218
226
|
argv_opts << ['start'] unless Thin::Runner.commands.include?(options[0])
|
|
@@ -231,7 +239,9 @@ else
|
|
|
231
239
|
argv_opts << [ "--daemonize", "--user", options[:user] || 'nobody', "--tag", "deltacloud-#{ENV['API_DRIVER']}"]
|
|
232
240
|
argv_opts << [ "--pid", options[:pid]] if options[:pid]
|
|
233
241
|
argv_opts << [ "--group", options[:group] || 'nobody' ]
|
|
234
|
-
|
|
242
|
+
unless ENV['API_LOG']
|
|
243
|
+
argv_opts << [ "--log", File.join(options[:logdir], "#{ENV['API_DRIVER']}.log")]
|
|
244
|
+
end
|
|
235
245
|
end
|
|
236
246
|
argv_opts.flatten!
|
|
237
247
|
|
|
@@ -240,7 +250,8 @@ else
|
|
|
240
250
|
command = argv_opts.join(" ")
|
|
241
251
|
Dir::chdir($top_srcdir)
|
|
242
252
|
rerun = Rerun::Runner.new(command,
|
|
243
|
-
:dir => File::join($top_srcdir, "lib")
|
|
253
|
+
:dir => File::join($top_srcdir, "lib"),
|
|
254
|
+
:pattern => "**/*")
|
|
244
255
|
rerun.start
|
|
245
256
|
rerun.join
|
|
246
257
|
else
|
data/config.ru
CHANGED
|
@@ -14,56 +14,7 @@
|
|
|
14
14
|
# License for the specific language governing permissions and limitations
|
|
15
15
|
# under the License.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# The default driver is 'mock'
|
|
20
|
-
ENV['API_DRIVER'] ||= 'mock'
|
|
21
|
-
ENV['API_FRONTEND'] ||= 'deltacloud'
|
|
22
|
-
|
|
23
|
-
load File.join(File.dirname(__FILE__), 'lib', 'deltacloud_rack.rb')
|
|
24
|
-
|
|
25
|
-
Deltacloud::configure do |server|
|
|
26
|
-
server.root_url '/api'
|
|
27
|
-
server.version Deltacloud::API_VERSION
|
|
28
|
-
server.klass 'Deltacloud::API'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
Deltacloud::configure(:cimi) do |server|
|
|
32
|
-
server.root_url '/cimi'
|
|
33
|
-
server.version Deltacloud::CIMI_API_VERSION
|
|
34
|
-
server.klass 'CIMI::API'
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
Deltacloud::configure(:ec2) do |server|
|
|
38
|
-
server.root_url '/ec2'
|
|
39
|
-
server.version '2012-04-01'
|
|
40
|
-
server.klass 'Deltacloud::EC2::API'
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
routes = {}
|
|
44
|
-
|
|
45
|
-
def frontends
|
|
46
|
-
ENV['API_FRONTEND'].split(',').size > 1 ?
|
|
47
|
-
ENV['API_FRONTEND'].split(',') : [ENV['API_FRONTEND']]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# If user wants to launch multiple frontends withing a single instance of DC API
|
|
51
|
-
# then require them and prepare the routes for Rack
|
|
52
|
-
#
|
|
53
|
-
# NOTE: The '/' will not be generated, since multiple frontends could have
|
|
54
|
-
# different root_url's
|
|
55
|
-
#
|
|
56
|
-
frontends.each do |frontend|
|
|
57
|
-
frontend = frontend.strip
|
|
58
|
-
if Deltacloud[frontend.to_sym].nil?
|
|
59
|
-
puts "ERROR: Unknown frontend (#{frontend}). Valid values are 'deltacloud,cimi,ec2'"
|
|
60
|
-
exit(1)
|
|
61
|
-
end
|
|
62
|
-
Deltacloud[frontend.to_sym].require!
|
|
63
|
-
routes.merge!({
|
|
64
|
-
Deltacloud[frontend].root_url => Deltacloud[frontend].klass
|
|
65
|
-
})
|
|
66
|
-
end
|
|
17
|
+
load File.join(File.dirname(__FILE__), 'lib', 'initialize.rb')
|
|
67
18
|
|
|
68
19
|
def static_dir_for(name)
|
|
69
20
|
Rack::Directory.new( File.join(File.dirname(__FILE__), "public", name))
|
|
@@ -71,14 +22,22 @@ end
|
|
|
71
22
|
|
|
72
23
|
# Mount static assets directories and index entrypoint
|
|
73
24
|
#
|
|
74
|
-
|
|
25
|
+
# The 'IndexApp' is small Sinatra::Base application that
|
|
26
|
+
# sits on the '/' route and display list of available frontends.
|
|
27
|
+
#
|
|
28
|
+
static_files = {
|
|
75
29
|
'/' => Deltacloud::IndexApp,
|
|
76
30
|
'/stylesheets' => static_dir_for('stylesheets'),
|
|
77
31
|
'/javascripts' => static_dir_for('javascripts'),
|
|
78
32
|
'/images' => static_dir_for('images')
|
|
79
|
-
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# The 'generate_routes_for' also require the frontend
|
|
36
|
+
# servers and all dependencies.
|
|
37
|
+
#
|
|
38
|
+
routes = Deltacloud.generate_routes
|
|
80
39
|
|
|
81
40
|
run Rack::Builder.new {
|
|
82
41
|
use Rack::MatrixParams
|
|
83
|
-
run Rack::URLMap.new(routes)
|
|
42
|
+
run Rack::URLMap.new(routes.merge(static_files))
|
|
84
43
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
Sequel.migration do
|
|
17
|
+
up do
|
|
18
|
+
add_column :entities, :realm, String
|
|
19
|
+
end
|
|
20
|
+
down do
|
|
21
|
+
drop_column :entities, :realm
|
|
22
|
+
end
|
|
23
|
+
end
|
data/deltacloud-core.gemspec
CHANGED
|
@@ -48,6 +48,7 @@ Gem::Specification.new do |s|
|
|
|
48
48
|
'lib/**/*.rb',
|
|
49
49
|
'lib/**/*.yml',
|
|
50
50
|
'lib/**/*.haml',
|
|
51
|
+
'db/**/*.rb',
|
|
51
52
|
'tests/**/*.rb',
|
|
52
53
|
'views/**/*.haml',
|
|
53
54
|
'views/instance_states/*.erb',
|
|
@@ -61,24 +62,29 @@ Gem::Specification.new do |s|
|
|
|
61
62
|
].map { |f| Dir[f] }.flatten
|
|
62
63
|
|
|
63
64
|
s.bindir = 'bin'
|
|
64
|
-
s.executables = 'deltacloudd'
|
|
65
|
+
s.executables = ['deltacloudd', 'deltacloud-db-upgrade']
|
|
65
66
|
s.test_files= Dir.glob("tests/**/*_test.rb")
|
|
66
67
|
s.extra_rdoc_files = Dir["LICENSE", "DISCLAIMER", "NOTICE"]
|
|
67
68
|
s.required_ruby_version = '>= 1.8.6'
|
|
68
69
|
s.has_rdoc = 'false'
|
|
69
70
|
s.add_dependency('rake', '>= 0.8.7')
|
|
70
71
|
s.add_dependency('haml', '>= 2.2.17')
|
|
71
|
-
s.add_dependency('sinatra', '>= 1.
|
|
72
|
-
s.add_dependency('sinatra-rabbit', '>= 1.0.11')
|
|
72
|
+
s.add_dependency('sinatra-rabbit', '>= 1.1.6')
|
|
73
73
|
s.add_dependency('rack', '>= 1.0.0')
|
|
74
74
|
s.add_dependency('rack-accept')
|
|
75
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'
|
|
79
|
-
|
|
80
79
|
s.add_dependency('sequel', '<= 3.42.0')
|
|
81
80
|
|
|
81
|
+
# FIXME: These dependencies are locked due to bugs that
|
|
82
|
+
# we will not address in this release.
|
|
83
|
+
#
|
|
84
|
+
s.add_dependency('tilt', '<=1.3.3')
|
|
85
|
+
s.add_dependency('sinatra', '<=1.3.5')
|
|
86
|
+
|
|
87
|
+
|
|
82
88
|
if RUBY_PLATFORM == 'java'
|
|
83
89
|
s.add_dependency('jdbc-sqlite3')
|
|
84
90
|
else
|
|
@@ -102,7 +108,7 @@ Gem::Specification.new do |s|
|
|
|
102
108
|
|
|
103
109
|
# Terremark Vcloud Express
|
|
104
110
|
s.add_dependency('fog', '>= 1.4.0')
|
|
105
|
-
s.add_dependency('excon', '>= 0.14.2' )
|
|
111
|
+
s.add_dependency('excon', '>= 0.14.2', '<0.17.0' )
|
|
106
112
|
|
|
107
113
|
# Rhevm and Condor Cloud
|
|
108
114
|
s.add_dependency('rest-client')
|
data/lib/cimi/collections.rb
CHANGED
|
@@ -15,45 +15,18 @@
|
|
|
15
15
|
# under the License.
|
|
16
16
|
|
|
17
17
|
require_relative './collections/base'
|
|
18
|
+
require_relative './../deltacloud/helpers/collection_helper'
|
|
18
19
|
|
|
19
20
|
module CIMI
|
|
20
21
|
|
|
21
|
-
def self.collection_names
|
|
22
|
-
@collections.map { |c| c.collection_name }
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.collections
|
|
26
|
-
@collections ||= []
|
|
27
|
-
end
|
|
28
|
-
|
|
29
22
|
module Collections
|
|
23
|
+
extend Deltacloud::CollectionHelper
|
|
30
24
|
|
|
31
|
-
|
|
32
|
-
CIMI.collections.find { |c| c.collection_name == name }
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def self.cimi_modules
|
|
36
|
-
@cimi_modules ||= []
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
Dir[File.join(File::dirname(__FILE__), "collections", "*.rb")].each do |collection|
|
|
40
|
-
base_collection_name = File.basename(collection).gsub('.rb', '')
|
|
41
|
-
next if base_collection_name == 'base'
|
|
42
|
-
require collection
|
|
43
|
-
cimi_module_class = CIMI::Collections.const_get(base_collection_name.camelize)
|
|
44
|
-
cimi_modules << cimi_module_class
|
|
45
|
-
unless cimi_module_class.collections.nil?
|
|
46
|
-
cimi_module_class.collections.each do |c|
|
|
47
|
-
CIMI.collections << c
|
|
48
|
-
end
|
|
49
|
-
else
|
|
50
|
-
warn "WARNING: File %s placed in collections directory but does not have any collections defined" % base_collection_name
|
|
51
|
-
end
|
|
52
|
-
end
|
|
25
|
+
load_collections_for :cimi, :from => File.join(File.dirname(__FILE__), 'collections')
|
|
53
26
|
|
|
54
27
|
def self.included(klass)
|
|
55
28
|
klass.class_eval do
|
|
56
|
-
CIMI::Collections.
|
|
29
|
+
CIMI::Collections.modules(:cimi).each { |c| use c }
|
|
57
30
|
end
|
|
58
31
|
end
|
|
59
32
|
|
|
@@ -45,11 +45,8 @@ module CIMI::Collections
|
|
|
45
45
|
operation :create do
|
|
46
46
|
description "Create new AddressTemplate"
|
|
47
47
|
control do
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
else
|
|
51
|
-
new_address_template = CIMI::Model::AddressTemplate.create_from_xml(request.body.read, self)
|
|
52
|
-
end
|
|
48
|
+
addr_templ = CIMI::Model::AddressTemplateCreate.parse(request.body, request.content_type)
|
|
49
|
+
new_address_template = addr_templ.create(self)
|
|
53
50
|
headers_for_create new_address_template
|
|
54
51
|
respond_to do |format|
|
|
55
52
|
format.json { new_address_template.to_json }
|
|
@@ -47,11 +47,8 @@ module CIMI::Collections
|
|
|
47
47
|
operation :create, :with_capability => :create_address do
|
|
48
48
|
description "Create a new Address"
|
|
49
49
|
control do
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
else
|
|
53
|
-
address = CIMI::Model::Address.create(request.body.read, self, :xml)
|
|
54
|
-
end
|
|
50
|
+
addr = CIMI::Model::AddressCreate.parse(request.body, request.content_type)
|
|
51
|
+
address = addr.create(self)
|
|
55
52
|
respond_to do |format|
|
|
56
53
|
format.xml { address.to_xml }
|
|
57
54
|
format.json { address.to_json }
|
|
@@ -18,6 +18,10 @@ require_relative '../models'
|
|
|
18
18
|
module CIMI::Collections
|
|
19
19
|
class Base < Sinatra::Base
|
|
20
20
|
|
|
21
|
+
Sinatra::Rabbit.configure do
|
|
22
|
+
enable :use_namespace
|
|
23
|
+
end
|
|
24
|
+
|
|
21
25
|
include Sinatra::Rabbit
|
|
22
26
|
include Sinatra::Rabbit::Features
|
|
23
27
|
include CIMI::Model
|
|
@@ -40,8 +44,8 @@ module CIMI::Collections
|
|
|
40
44
|
set :root_path, config.root_url
|
|
41
45
|
set :version, config.version
|
|
42
46
|
set :root, File.join(File.dirname(__FILE__), '..', '..', '..')
|
|
43
|
-
set :views, root
|
|
44
|
-
set :public_folder, root
|
|
47
|
+
set :views, File.join(root, 'views')
|
|
48
|
+
set :public_folder, File.join(root, 'public')
|
|
45
49
|
set :documentation_class, CIMI
|
|
46
50
|
set :haml, :format => :xhtml
|
|
47
51
|
|
|
@@ -53,14 +57,22 @@ module CIMI::Collections
|
|
|
53
57
|
report_error
|
|
54
58
|
end
|
|
55
59
|
|
|
60
|
+
error CIMI::Model::ValidationError do
|
|
61
|
+
report_error
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
error JSON::ParserError do
|
|
65
|
+
report_error(400, "Bad request (#{request.env['sinatra.error'].message})")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
error REXML::ParseException do
|
|
69
|
+
report_error(400)
|
|
70
|
+
end
|
|
71
|
+
|
|
56
72
|
before do
|
|
57
73
|
# Respond with 400, If we don't get a http Host header,
|
|
58
74
|
halt 400, "Unable to find HTTP Host header" if @env['HTTP_HOST'] == nil
|
|
59
75
|
end
|
|
60
76
|
|
|
61
|
-
after do
|
|
62
|
-
headers 'CIMI-Specification-Version' => Deltacloud[:cimi].version
|
|
63
|
-
end
|
|
64
|
-
|
|
65
77
|
end
|
|
66
78
|
end
|