fog-maestrodev 1.14.0.20130806165225 → 1.15.0.20130829165835
Sign up to get free protection for your applications and to get access to all the features.
- data/changelog.txt +296 -0
- data/fog.gemspec +2 -2
- data/lib/fog/atmos/storage.rb +0 -3
- data/lib/fog/aws/cdn.rb +1 -2
- data/lib/fog/aws/compute.rb +52 -2
- data/lib/fog/aws/dns.rb +0 -1
- data/lib/fog/aws/models/auto_scaling/groups.rb +6 -3
- data/lib/fog/aws/models/compute/address.rb +1 -0
- data/lib/fog/aws/models/compute/flavors.rb +19 -0
- data/lib/fog/aws/models/compute/route_table.rb +69 -0
- data/lib/fog/aws/models/compute/route_tables.rb +92 -0
- data/lib/fog/aws/models/rds/instance_option.rb +21 -0
- data/lib/fog/aws/models/rds/instance_options.rb +30 -0
- data/lib/fog/aws/parsers/compute/associate_route_table.rb +20 -0
- data/lib/fog/aws/parsers/compute/create_route_table.rb +75 -0
- data/lib/fog/aws/parsers/compute/describe_account_attributes.rb +42 -0
- data/lib/fog/aws/parsers/compute/describe_route_tables.rb +85 -0
- data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +47 -0
- data/lib/fog/aws/rds.rb +5 -0
- data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +9 -1
- data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +15 -1
- data/lib/fog/aws/requests/compute/associate_dhcp_options.rb +2 -2
- data/lib/fog/aws/requests/compute/associate_route_table.rb +75 -0
- data/lib/fog/aws/requests/compute/attach_internet_gateway.rb +2 -2
- data/lib/fog/aws/requests/compute/create_route.rb +89 -0
- data/lib/fog/aws/requests/compute/create_route_table.rb +70 -0
- data/lib/fog/aws/requests/compute/create_vpc.rb +16 -1
- data/lib/fog/aws/requests/compute/delete_dhcp_options.rb +2 -2
- data/lib/fog/aws/requests/compute/delete_internet_gateway.rb +2 -2
- data/lib/fog/aws/requests/compute/delete_network_interface.rb +2 -2
- data/lib/fog/aws/requests/compute/delete_route.rb +60 -0
- data/lib/fog/aws/requests/compute/delete_route_table.rb +51 -0
- data/lib/fog/aws/requests/compute/delete_subnet.rb +2 -2
- data/lib/fog/aws/requests/compute/delete_vpc.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_account_attributes.rb +49 -0
- data/lib/fog/aws/requests/compute/describe_route_tables.rb +87 -0
- data/lib/fog/aws/requests/compute/detach_internet_gateway.rb +2 -2
- data/lib/fog/aws/requests/compute/detach_network_interface.rb +2 -2
- data/lib/fog/aws/requests/compute/disassociate_route_table.rb +57 -0
- data/lib/fog/aws/requests/compute/reset_network_interface_attribute.rb +2 -1
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +23 -9
- data/lib/fog/aws/requests/iam/upload_server_certificate.rb +1 -1
- data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +76 -0
- data/lib/fog/aws/storage.rb +0 -2
- data/lib/fog/brightbox/models/compute/collaboration.rb +10 -2
- data/lib/fog/brightbox/models/compute/collaborations.rb +26 -2
- data/lib/fog/brightbox/models/compute/user_collaboration.rb +16 -1
- data/lib/fog/brightbox/models/compute/user_collaborations.rb +10 -2
- data/lib/fog/cloudstack/models/compute/server.rb +4 -0
- data/lib/fog/core/collection.rb +18 -0
- data/lib/fog/core/credentials.rb +6 -1
- data/lib/fog/google/compute.rb +17 -0
- data/lib/fog/google/examples/get_list_images.rb +27 -0
- data/lib/fog/google/examples/get_list_snapshots.rb +20 -0
- data/lib/fog/google/examples/image_create.rb +18 -0
- data/lib/fog/google/examples/launch_micro_instance.rb +10 -5
- data/lib/fog/google/examples/network.rb +21 -0
- data/lib/fog/google/models/compute/disk.rb +16 -5
- data/lib/fog/google/models/compute/image.rb +36 -18
- data/lib/fog/google/models/compute/images.rb +36 -10
- data/lib/fog/google/models/compute/server.rb +41 -11
- data/lib/fog/google/models/compute/servers.rb +1 -1
- data/lib/fog/google/models/compute/snapshot.rb +36 -0
- data/lib/fog/google/models/compute/snapshots.rb +28 -0
- data/lib/fog/google/requests/compute/delete_disk.rb +5 -1
- data/lib/fog/google/requests/compute/get_disk.rb +2 -1
- data/lib/fog/google/requests/compute/get_snapshot.rb +34 -0
- data/lib/fog/google/requests/compute/insert_disk.rb +23 -7
- data/lib/fog/google/requests/compute/insert_image.rb +16 -9
- data/lib/fog/google/requests/compute/insert_server.rb +22 -10
- data/lib/fog/google/requests/compute/list_disks.rb +1 -1
- data/lib/fog/google/requests/compute/list_snapshots.rb +30 -0
- data/lib/fog/google/storage.rb +1 -3
- data/lib/fog/hp/storage.rb +0 -2
- data/lib/fog/internet_archive/storage.rb +0 -2
- data/lib/fog/local/storage.rb +0 -2
- data/lib/fog/ninefold/storage.rb +0 -1
- data/lib/fog/openstack/models/storage/file.rb +2 -0
- data/lib/fog/openstack/requests/compute/add_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_volume.rb +8 -7
- data/lib/fog/openstack/requests/compute/list_tenants_with_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/compute/remove_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/image/create_image.rb +23 -23
- data/lib/fog/openstack/requests/image/update_image.rb +31 -33
- data/lib/fog/openstack/requests/storage/get_object_https_url.rb +3 -3
- data/lib/fog/openstack/requests/storage/post_set_meta_temp_url_key.rb +1 -1
- data/lib/fog/openstack/storage.rb +10 -11
- data/lib/fog/openstack.rb +10 -1
- data/lib/fog/rackspace/cdn.rb +13 -0
- data/lib/fog/rackspace/compute.rb +8 -4
- data/lib/fog/rackspace/compute_v2.rb +2 -0
- data/lib/fog/rackspace/databases.rb +4 -4
- data/lib/fog/rackspace/dns.rb +6 -6
- data/lib/fog/rackspace/examples/compute_v2/bootstrap_server.rb +98 -0
- data/lib/fog/rackspace/load_balancers.rb +5 -4
- data/lib/fog/rackspace/models/compute_v2/flavors.rb +1 -2
- data/lib/fog/rackspace/models/compute_v2/images.rb +35 -3
- data/lib/fog/rackspace/models/compute_v2/metadatum.rb +2 -2
- data/lib/fog/rackspace/models/identity/service_catalog.rb +34 -16
- data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +8 -3
- data/lib/fog/rackspace/models/monitoring/alarm.rb +16 -8
- data/lib/fog/rackspace/models/monitoring/base.rb +2 -8
- data/lib/fog/rackspace/monitoring.rb +14 -6
- data/lib/fog/rackspace/requests/compute_v2/list_flavors_detail.rb +39 -0
- data/lib/fog/rackspace/requests/compute_v2/list_images.rb +15 -5
- data/lib/fog/rackspace/requests/compute_v2/list_images_detail.rb +53 -0
- data/lib/fog/rackspace/requests/identity/create_token.rb +1 -1
- data/lib/fog/rackspace/requests/load_balancers/create_load_balancer.rb +12 -0
- data/lib/fog/rackspace/requests/load_balancers/get_stats.rb +31 -0
- data/lib/fog/rackspace/requests/monitoring/get_entity.rb +33 -0
- data/lib/fog/rackspace/service.rb +7 -0
- data/lib/fog/rackspace/storage.rb +6 -3
- data/lib/fog/rackspace.rb +8 -5
- data/lib/fog/riakcs/provisioning.rb +0 -1
- data/lib/fog/riakcs/usage.rb +2 -3
- data/lib/fog/storage.rb +2 -0
- data/lib/fog/vcloud/examples/README.md +54 -0
- data/lib/fog/vcloud/examples/creating_a_connection.md +20 -0
- data/lib/fog/vcloud/examples/creating_a_vapp.md +17 -0
- data/lib/fog/vcloud/examples/get_network_information.md +10 -0
- data/lib/fog/vcloud/examples/get_vapp_information.md +10 -0
- data/lib/fog/vcloud/examples/more_on_vapps.md +23 -0
- data/lib/fog/version.rb +1 -1
- data/lib/tasks/changelog_task.rb +1 -0
- data/tests/aws/models/elb/model_tests.rb +5 -0
- data/tests/aws/models/rds/instance_option_tests.rb +14 -0
- data/tests/aws/requests/compute/client_tests.rb +25 -0
- data/tests/aws/requests/compute/route_tests.rb +277 -0
- data/tests/aws/requests/rds/helper.rb +22 -0
- data/tests/aws/requests/rds/instance_option_tests.rb +21 -0
- data/tests/core/credential_tests.rb +21 -0
- data/tests/core/service_tests.rb +26 -0
- data/tests/openstack/authenticate_tests.rb +22 -0
- data/tests/openstack/models/storage/file_tests.rb +20 -1
- data/tests/openstack/requests/compute/flavor_tests.rb +27 -12
- data/tests/openstack/requests/compute/volume_tests.rb +10 -12
- data/tests/openstack/requests/image/image_tests.rb +30 -15
- data/tests/rackspace/block_storage_tests.rb +9 -4
- data/tests/rackspace/cdn_tests.rb +14 -0
- data/tests/rackspace/compute_tests.rb +10 -4
- data/tests/rackspace/compute_v2_tests.rb +9 -4
- data/tests/rackspace/databases_tests.rb +9 -4
- data/tests/rackspace/dns_tests.rb +9 -4
- data/tests/rackspace/helper.rb +21 -2
- data/tests/rackspace/identity_tests.rb +9 -4
- data/tests/rackspace/load_balancer_tests.rb +8 -4
- data/tests/rackspace/models/compute_v2/server_tests.rb +18 -21
- data/tests/rackspace/models/identity/service_catalog_tests.rb +54 -29
- data/tests/rackspace/models/load_balancers/load_balancer_tests.rb +5 -0
- data/tests/rackspace/models/monitoring/alarm_examples_tests.rb +1 -1
- data/tests/rackspace/models/monitoring/alarm_tests.rb +2 -2
- data/tests/rackspace/monitoring_tests.rb +9 -4
- data/tests/rackspace/requests/compute_v2/flavor_tests.rb +6 -0
- data/tests/rackspace/requests/compute_v2/image_tests.rb +4 -0
- data/tests/rackspace/requests/compute_v2/server_tests.rb +2 -2
- data/tests/rackspace/requests/load_balancers/get_stats_tests.rb +13 -0
- data/tests/rackspace/requests/load_balancers/helper.rb +9 -0
- data/tests/rackspace/requests/monitoring/alarm_tests.rb +4 -5
- data/tests/rackspace/requests/monitoring/entity_tests.rb +9 -1
- data/tests/rackspace/requests/storage/large_object_tests.rb +12 -4
- data/tests/rackspace/storage_tests.rb +23 -4
- data/tests/rackspace/url_encoding_tests.rb +3 -1
- metadata +117 -133
- checksums.yaml +0 -15
- data/lib/fog/aws/parsers/compute/associate_dhcp_options.rb +0 -24
- data/lib/fog/aws/parsers/compute/attach_internet_gateway.rb +0 -24
- data/lib/fog/aws/parsers/compute/delete_dhcp_options.rb +0 -24
- data/lib/fog/aws/parsers/compute/delete_internet_gateway.rb +0 -24
- data/lib/fog/aws/parsers/compute/delete_network_interface.rb +0 -24
- data/lib/fog/aws/parsers/compute/delete_subnet.rb +0 -24
- data/lib/fog/aws/parsers/compute/delete_vpc.rb +0 -24
- data/lib/fog/aws/parsers/compute/detach_internet_gateway.rb +0 -24
- data/lib/fog/aws/parsers/compute/detach_network_interface.rb +0 -24
@@ -4,18 +4,17 @@ module Fog
|
|
4
4
|
class Real
|
5
5
|
|
6
6
|
def update_image(attributes)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
7
|
+
data = {
|
8
|
+
'x-image-meta-name' => attributes[:name],
|
9
|
+
'x-image-meta-disk-format' => attributes[:disk_format],
|
10
|
+
'x-image-meta-container-format' => attributes[:container_format],
|
11
|
+
'x-image-meta-size' => attributes[:size],
|
12
|
+
'x-image-meta-is-public' => attributes[:is_public],
|
13
|
+
'x-image-meta-min-ram' => attributes[:min_ram],
|
14
|
+
'x-image-meta-min-disk' => attributes[:min_disk],
|
15
|
+
'x-image-meta-checksum' => attributes[:checksum],
|
16
|
+
'x-image-meta-owner' => attributes[:owner]
|
17
|
+
}.reject {|k,v| v.nil? }
|
19
18
|
|
20
19
|
unless attributes[:properties].nil?
|
21
20
|
attributes[:properties].each do |key,value|
|
@@ -40,28 +39,27 @@ module Fog
|
|
40
39
|
response.status = 200
|
41
40
|
image = self.images.last
|
42
41
|
response.body = {
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
42
|
+
'image'=> {
|
43
|
+
'name' => attributes[:name] || image.name,
|
44
|
+
'size' => image.size,
|
45
|
+
'min_disk' => (attributes[:min_disk] || image.min_disk).to_i,
|
46
|
+
'disk_format' => attributes[:disk_format] || image.disk_format,
|
47
|
+
'created_at' => image.created_at,
|
48
|
+
'container_format' => attributes[:container_format] || image.container_format,
|
49
|
+
'deleted_at' => nil,
|
50
|
+
'updated_at' => Time.now.to_s,
|
51
|
+
'checksum' => image.checksum,
|
52
|
+
'id' => attributes[:id],
|
53
|
+
'deleted' => false,
|
54
|
+
'protected' => false,
|
55
|
+
'is_public' => attributes[:is_public] || image.is_public,
|
56
|
+
'status' => image.status,
|
57
|
+
'min_ram' => (attributes[:min_ram] || image.min_ram).to_i,
|
58
|
+
'owner' => attributes[:owner] || image.owner,
|
59
|
+
'properties' => attributes[:properties] || image.properties
|
60
|
+
}
|
61
|
+
}
|
63
62
|
response
|
64
|
-
|
65
63
|
end
|
66
64
|
|
67
65
|
end
|
@@ -18,8 +18,8 @@ module Fog
|
|
18
18
|
# ==== See Also
|
19
19
|
# http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_TempURL-d1a444.html
|
20
20
|
def get_object_https_url(container, object, expires, options = {})
|
21
|
-
if @
|
22
|
-
raise ArgumentError, "Storage must my instantiated with the :
|
21
|
+
if @openstack_temp_url_key.nil?
|
22
|
+
raise ArgumentError, "Storage must my instantiated with the :openstack_temp_url_key option"
|
23
23
|
end
|
24
24
|
|
25
25
|
method = 'GET'
|
@@ -28,7 +28,7 @@ module Fog
|
|
28
28
|
object_path_unescaped = "#{@path}/#{Fog::OpenStack.escape(container)}/#{object}"
|
29
29
|
string_to_sign = "#{method}\n#{expires}\n#{object_path_unescaped}"
|
30
30
|
|
31
|
-
hmac = Fog::HMAC.new('sha1', @
|
31
|
+
hmac = Fog::HMAC.new('sha1', @openstack_temp_url_key)
|
32
32
|
sig = sig_to_hex(hmac.sign(string_to_sign))
|
33
33
|
|
34
34
|
"https://#{@host}#{object_path_escaped}?temp_url_sig=#{sig}&temp_url_expires=#{expires}"
|
@@ -8,7 +8,7 @@ module Fog
|
|
8
8
|
# used to generate signed expiring URLs.
|
9
9
|
#
|
10
10
|
# Once the key has been set with this request you should create new
|
11
|
-
# Storage objects with the :
|
11
|
+
# Storage objects with the :openstack_temp_url_key option then use
|
12
12
|
# the get_object_https_url method to generate expiring URLs.
|
13
13
|
#
|
14
14
|
# *** CAUTION *** changing this secret key will invalidate any expiring
|
@@ -9,7 +9,7 @@ module Fog
|
|
9
9
|
:openstack_api_key
|
10
10
|
recognizes :persistent, :openstack_service_name,
|
11
11
|
:openstack_service_type, :openstack_tenant,
|
12
|
-
:openstack_region
|
12
|
+
:openstack_region, :openstack_temp_url_key
|
13
13
|
|
14
14
|
model_path 'fog/openstack/models/storage'
|
15
15
|
model :directory
|
@@ -45,7 +45,6 @@ module Fog
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def initialize(options={})
|
48
|
-
require 'mime/types'
|
49
48
|
@openstack_api_key = options[:openstack_api_key]
|
50
49
|
@openstack_username = options[:openstack_username]
|
51
50
|
@path = '/v1/AUTH_1234'
|
@@ -58,7 +57,7 @@ module Fog
|
|
58
57
|
def reset_data
|
59
58
|
self.class.data.delete(@openstack_username)
|
60
59
|
end
|
61
|
-
|
60
|
+
|
62
61
|
def change_account(account)
|
63
62
|
@original_path ||= @path
|
64
63
|
version_string = @original_path.split('/')[1]
|
@@ -74,7 +73,6 @@ module Fog
|
|
74
73
|
class Real
|
75
74
|
|
76
75
|
def initialize(options={})
|
77
|
-
require 'mime/types'
|
78
76
|
@openstack_api_key = options[:openstack_api_key]
|
79
77
|
@openstack_username = options[:openstack_username]
|
80
78
|
@openstack_auth_url = options[:openstack_auth_url]
|
@@ -86,6 +84,7 @@ module Fog
|
|
86
84
|
@openstack_region = options[:openstack_region]
|
87
85
|
@openstack_tenant = options[:openstack_tenant]
|
88
86
|
@connection_options = options[:connection_options] || {}
|
87
|
+
@openstack_temp_url_key = options[:openstack_temp_url_key]
|
89
88
|
authenticate
|
90
89
|
@persistent = options[:persistent] || false
|
91
90
|
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
|
@@ -105,7 +104,7 @@ module Fog
|
|
105
104
|
# # List current user account details
|
106
105
|
# service = Fog::Storage[:openstack]
|
107
106
|
# service.request :method => 'HEAD'
|
108
|
-
#
|
107
|
+
#
|
109
108
|
# Would return something like:
|
110
109
|
#
|
111
110
|
# Account: AUTH_1234
|
@@ -118,9 +117,9 @@ module Fog
|
|
118
117
|
#
|
119
118
|
# service.change_account('AUTH_3333')
|
120
119
|
# service.request :method => 'HEAD'
|
121
|
-
#
|
120
|
+
#
|
122
121
|
# Would return something like:
|
123
|
-
#
|
122
|
+
#
|
124
123
|
# Account: AUTH_3333
|
125
124
|
# Date: Tue, 05 Mar 2013 16:51:53 GMT
|
126
125
|
# X-Account-Bytes-Used: 23423433
|
@@ -130,9 +129,9 @@ module Fog
|
|
130
129
|
# If we wan't to go back to our original admin account:
|
131
130
|
#
|
132
131
|
# service.reset_account_name
|
133
|
-
#
|
132
|
+
#
|
134
133
|
def change_account(account)
|
135
|
-
@original_path ||= @path
|
134
|
+
@original_path ||= @path
|
136
135
|
version_string = @path.split('/')[1]
|
137
136
|
@path = "/#{version_string}/#{account}"
|
138
137
|
end
|
@@ -174,7 +173,7 @@ module Fog
|
|
174
173
|
end
|
175
174
|
|
176
175
|
private
|
177
|
-
|
176
|
+
|
178
177
|
def authenticate
|
179
178
|
if !@openstack_management_url || @openstack_must_reauthenticate
|
180
179
|
options = {
|
@@ -188,7 +187,7 @@ module Fog
|
|
188
187
|
:openstack_endpoint_type => 'publicURL'
|
189
188
|
}
|
190
189
|
|
191
|
-
credentials = Fog::OpenStack.
|
190
|
+
credentials = Fog::OpenStack.authenticate(options, @connection_options)
|
192
191
|
|
193
192
|
@current_user = credentials[:user]
|
194
193
|
@current_tenant = credentials[:tenant]
|
data/lib/fog/openstack.rb
CHANGED
@@ -49,6 +49,15 @@ module Fog
|
|
49
49
|
service(:volume, 'openstack/volume', 'Volume')
|
50
50
|
service(:metering, 'openstack/metering', 'Metering')
|
51
51
|
|
52
|
+
def self.authenticate(options, connection_options = {})
|
53
|
+
case options[:openstack_auth_uri].path
|
54
|
+
when /v1(\.\d+)?/
|
55
|
+
authenticate_v1(options, connection_options)
|
56
|
+
else
|
57
|
+
authenticate_v2(options, connection_options)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
52
61
|
# legacy v1.0 style auth
|
53
62
|
def self.authenticate_v1(options, connection_options = {})
|
54
63
|
uri = options[:openstack_auth_uri]
|
@@ -69,7 +78,7 @@ module Fog
|
|
69
78
|
|
70
79
|
return {
|
71
80
|
:token => response.headers['X-Auth-Token'],
|
72
|
-
:server_management_url => response.headers['X-Server-Management-Url'],
|
81
|
+
:server_management_url => response.headers['X-Server-Management-Url'] || response.headers['X-Storage-Url'],
|
73
82
|
:identity_public_endpoint => response.headers['X-Keystone']
|
74
83
|
}
|
75
84
|
end
|
data/lib/fog/rackspace/cdn.rb
CHANGED
@@ -119,6 +119,10 @@ module Fog
|
|
119
119
|
include Base
|
120
120
|
|
121
121
|
def initialize(options={})
|
122
|
+
# api_key and username missing from instance variable sets
|
123
|
+
@rackspace_api_key = options[:rackspace_api_key]
|
124
|
+
@rackspace_username = options[:rackspace_username]
|
125
|
+
|
122
126
|
@connection_options = options[:connection_options] || {}
|
123
127
|
@rackspace_auth_url = options[:rackspace_auth_url]
|
124
128
|
@rackspace_cdn_url = options[:rackspace_cdn_url]
|
@@ -176,6 +180,15 @@ module Fog
|
|
176
180
|
@auth_token = credentials['X-Auth-Token']
|
177
181
|
end
|
178
182
|
|
183
|
+
# Fix for invalid auth_token, likely after 24 hours.
|
184
|
+
def authenticate(options={})
|
185
|
+
super({
|
186
|
+
:rackspace_api_key => @rackspace_api_key,
|
187
|
+
:rackspace_username => @rackspace_username,
|
188
|
+
:rackspace_auth_url => @rackspace_auth_url,
|
189
|
+
:connection_options => @connection_options
|
190
|
+
})
|
191
|
+
end
|
179
192
|
end
|
180
193
|
end
|
181
194
|
end
|
@@ -6,6 +6,10 @@ module Fog
|
|
6
6
|
class Rackspace < Fog::Service
|
7
7
|
include Fog::Rackspace::Errors
|
8
8
|
|
9
|
+
class ServiceError < Fog::Rackspace::Errors::ServiceError; end
|
10
|
+
class InternalServerError < Fog::Rackspace::Errors::InternalServerError; end
|
11
|
+
class BadRequest < Fog::Rackspace::Errors::BadRequest; end
|
12
|
+
|
9
13
|
requires :rackspace_api_key, :rackspace_username
|
10
14
|
recognizes :rackspace_auth_url, :rackspace_servicenet, :persistent
|
11
15
|
recognizes :rackspace_auth_token, :rackspace_management_url, :rackspace_compute_v1_url, :rackspace_region
|
@@ -204,13 +208,13 @@ module Fog
|
|
204
208
|
def request(params, parse_json = true, &block)
|
205
209
|
super(params, parse_json, &block)
|
206
210
|
rescue Excon::Errors::NotFound => error
|
207
|
-
raise NotFound.slurp(error,
|
211
|
+
raise NotFound.slurp(error, self)
|
208
212
|
rescue Excon::Errors::BadRequest => error
|
209
|
-
raise BadRequest.slurp
|
213
|
+
raise BadRequest.slurp(error, self)
|
210
214
|
rescue Excon::Errors::InternalServerError => error
|
211
|
-
raise InternalServerError.slurp
|
215
|
+
raise InternalServerError.slurp(error, self)
|
212
216
|
rescue Excon::Errors::HTTPStatusError => error
|
213
|
-
raise ServiceError.slurp
|
217
|
+
raise ServiceError.slurp(error, self)
|
214
218
|
end
|
215
219
|
|
216
220
|
def service_net?
|
@@ -76,10 +76,12 @@ module Fog
|
|
76
76
|
|
77
77
|
request :create_image
|
78
78
|
request :list_images
|
79
|
+
request :list_images_detail
|
79
80
|
request :get_image
|
80
81
|
request :delete_image
|
81
82
|
|
82
83
|
request :list_flavors
|
84
|
+
request :list_flavors_detail
|
83
85
|
request :get_flavor
|
84
86
|
|
85
87
|
request :attach_volume
|
@@ -88,13 +88,13 @@ module Fog
|
|
88
88
|
def request(params, parse_json = true, &block)
|
89
89
|
super(params, parse_json, &block)
|
90
90
|
rescue Excon::Errors::NotFound => error
|
91
|
-
raise NotFound.slurp(error,
|
91
|
+
raise NotFound.slurp(error, self)
|
92
92
|
rescue Excon::Errors::BadRequest => error
|
93
|
-
raise BadRequest.slurp
|
93
|
+
raise BadRequest.slurp(error, self)
|
94
94
|
rescue Excon::Errors::InternalServerError => error
|
95
|
-
raise InternalServerError.slurp
|
95
|
+
raise InternalServerError.slurp(error, self)
|
96
96
|
rescue Excon::Errors::HTTPStatusError => error
|
97
|
-
raise ServiceError.slurp
|
97
|
+
raise ServiceError.slurp(error, self)
|
98
98
|
end
|
99
99
|
|
100
100
|
def endpoint_uri(service_endpoint_url=nil)
|
data/lib/fog/rackspace/dns.rb
CHANGED
@@ -115,17 +115,17 @@ module Fog
|
|
115
115
|
begin
|
116
116
|
super(params, parse_json, &block)
|
117
117
|
rescue Excon::Errors::NotFound => error
|
118
|
-
raise NotFound.slurp(error,
|
118
|
+
raise NotFound.slurp(error, self)
|
119
119
|
rescue Excon::Errors::BadRequest => error
|
120
|
-
raise BadRequest.slurp
|
120
|
+
raise BadRequest.slurp(error, self)
|
121
121
|
rescue Excon::Errors::InternalServerError => error
|
122
|
-
raise InternalServerError.slurp
|
122
|
+
raise InternalServerError.slurp(error, self)
|
123
123
|
rescue Excon::Errors::ServiceUnavailable => error
|
124
|
-
raise ServiceUnavailable.slurp
|
124
|
+
raise ServiceUnavailable.slurp(error, self)
|
125
125
|
rescue Excon::Errors::Conflict => error
|
126
|
-
raise Conflict.slurp
|
126
|
+
raise Conflict.slurp(error, self)
|
127
127
|
rescue Excon::Errors::HTTPStatusError => error
|
128
|
-
raise ServiceError.slurp
|
128
|
+
raise ServiceError.slurp(error, self)
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This example demonstrates creating a server with the Rackpace Open Cloud
|
4
|
+
|
5
|
+
require 'rubygems' #required for Ruby 1.8.x
|
6
|
+
require 'fog'
|
7
|
+
require 'base64' #required to encode files for personality functionality
|
8
|
+
require 'sshkey' #required to generate ssh keys. 'gem install sshkey'
|
9
|
+
|
10
|
+
def get_user_input(prompt)
|
11
|
+
print "#{prompt}: "
|
12
|
+
gets.chomp
|
13
|
+
end
|
14
|
+
|
15
|
+
# Use username defined in ~/.fog file, if absent prompt for username.
|
16
|
+
# For more details on ~/.fog refer to http://fog.io/about/getting_started.html
|
17
|
+
def rackspace_username
|
18
|
+
Fog.credentials[:rackspace_username] || get_user_input("Enter Rackspace Username")
|
19
|
+
end
|
20
|
+
|
21
|
+
# Use api key defined in ~/.fog file, if absent prompt for api key
|
22
|
+
# For more details on ~/.fog refer to http://fog.io/about/getting_started.html
|
23
|
+
def rackspace_api_key
|
24
|
+
Fog.credentials[:rackspace_api_key] || get_user_input("Enter Rackspace API key")
|
25
|
+
end
|
26
|
+
|
27
|
+
# Generates a ssh key using the SSHKey library. The private key is avaialble via
|
28
|
+
# the '.private_key' and the public key is avaialble via '.ssh_public_key'
|
29
|
+
def generate_ssh_key
|
30
|
+
SSHKey.generate
|
31
|
+
end
|
32
|
+
|
33
|
+
# create Next Generation Cloud Server service
|
34
|
+
service = Fog::Compute.new({
|
35
|
+
:provider => 'rackspace',
|
36
|
+
:rackspace_username => rackspace_username,
|
37
|
+
:rackspace_api_key => rackspace_api_key,
|
38
|
+
:version => :v2, # Use Next Gen Cloud Servers
|
39
|
+
:rackspace_region => :ord #Use Chicago Region
|
40
|
+
})
|
41
|
+
|
42
|
+
# pick the first flavor
|
43
|
+
flavor = service.flavors.first
|
44
|
+
|
45
|
+
# pick the first Ubuntu image we can find
|
46
|
+
image = service.images.find {|image| image.name =~ /Ubuntu/}
|
47
|
+
|
48
|
+
# prompt for server name
|
49
|
+
server_name = get_user_input "\nEnter Server Name"
|
50
|
+
|
51
|
+
# generate the ssh key
|
52
|
+
ssh_key = generate_ssh_key
|
53
|
+
|
54
|
+
# reload flavor in order to retrieve all of its attributes
|
55
|
+
flavor.reload
|
56
|
+
|
57
|
+
puts "\nNow creating server '#{server_name}' the following with specifications:\n"
|
58
|
+
puts "\t* #{flavor.ram} MB RAM"
|
59
|
+
puts "\t* #{flavor.disk} GB"
|
60
|
+
puts "\t* #{flavor.vcpus} CPU(s)"
|
61
|
+
puts "\t* #{image.name}"
|
62
|
+
puts "\n"
|
63
|
+
|
64
|
+
begin
|
65
|
+
# bootstrap server
|
66
|
+
server = service.servers.bootstrap :name => server_name,
|
67
|
+
:flavor_id => flavor.id,
|
68
|
+
:image_id => image.id,
|
69
|
+
:private_key => ssh_key.private_key,
|
70
|
+
:public_key => ssh_key.ssh_public_key
|
71
|
+
|
72
|
+
if server.ready?
|
73
|
+
puts "[DONE]\n\n"
|
74
|
+
|
75
|
+
puts "The server has been successfully created.\n"
|
76
|
+
puts "Write the following ssh keys to you ~/.ssh directory in order to log in\n\n"
|
77
|
+
puts "+++++++++++PRIVATE_KEY (~/.ssh/fog_key)++++++++++++"
|
78
|
+
puts ssh_key.private_key
|
79
|
+
puts "++++++++++PUBLIC_KEY (~/.ssh/fog_key.pub)++++++++++"
|
80
|
+
puts ssh_key.ssh_public_key
|
81
|
+
puts "+++++++++++++++++++++++++++++++++++++++++++++++++++i\n\n"
|
82
|
+
|
83
|
+
puts "You can then log into the server using the following command\n"
|
84
|
+
puts "ssh #{server.username}@#{server.public_ip_address}\n\n"
|
85
|
+
else
|
86
|
+
puts "An error occured, please try again"
|
87
|
+
end
|
88
|
+
|
89
|
+
rescue Fog::Errors::TimeoutError
|
90
|
+
puts "[TIMEOUT]\n\n"
|
91
|
+
|
92
|
+
puts "This server is currently #{server.progress}% into the build process and is taking longer to complete than expected."
|
93
|
+
puts "You can continute to monitor the build process through the web console at https://mycloud.rackspace.com/\n\n"
|
94
|
+
end
|
95
|
+
|
96
|
+
puts "To delete the server please execute the delete_server.rb script\n\n"
|
97
|
+
|
98
|
+
|
@@ -73,6 +73,7 @@ module Fog
|
|
73
73
|
request :get_error_page
|
74
74
|
request :set_error_page
|
75
75
|
request :remove_error_page
|
76
|
+
request :get_stats
|
76
77
|
|
77
78
|
module Shared
|
78
79
|
|
@@ -122,13 +123,13 @@ module Fog
|
|
122
123
|
def request(params, parse_json = true, &block)
|
123
124
|
super(params, parse_json, &block)
|
124
125
|
rescue Excon::Errors::NotFound => error
|
125
|
-
raise NotFound.slurp(error,
|
126
|
+
raise NotFound.slurp(error, self)
|
126
127
|
rescue Excon::Errors::BadRequest => error
|
127
|
-
raise BadRequest.slurp
|
128
|
+
raise BadRequest.slurp(error, self)
|
128
129
|
rescue Excon::Errors::InternalServerError => error
|
129
|
-
raise InternalServerError.slurp
|
130
|
+
raise InternalServerError.slurp(error, self)
|
130
131
|
rescue Excon::Errors::HTTPStatusError => error
|
131
|
-
raise ServiceError.slurp
|
132
|
+
raise ServiceError.slurp(error, self)
|
132
133
|
end
|
133
134
|
|
134
135
|
def authenticate(options={})
|
@@ -15,9 +15,8 @@ module Fog
|
|
15
15
|
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
16
16
|
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
17
17
|
# @note Fog's currentl implementation only returns 1000 flavors.
|
18
|
-
# @note Fog does not retrieve all flavor details. Please use #get to retrieve all details for a specific flavor.
|
19
18
|
def all
|
20
|
-
data = service.
|
19
|
+
data = service.list_flavors_detail.body['flavors']
|
21
20
|
load(data)
|
22
21
|
end
|
23
22
|
|
@@ -5,6 +5,30 @@ module Fog
|
|
5
5
|
module Compute
|
6
6
|
class RackspaceV2
|
7
7
|
class Images < Fog::Collection
|
8
|
+
|
9
|
+
# @!attribute [rw] name
|
10
|
+
# @return [String] Given a string value x, filters the list of images by image name.
|
11
|
+
attribute :name
|
12
|
+
|
13
|
+
# @!attribute [rw] status
|
14
|
+
# @return [String] Given a string value x, filters the list of images by status.
|
15
|
+
# @note Possible values are ACTIVE, DELETED, ERROR, SAVING, and UNKNOWN.
|
16
|
+
attribute :status
|
17
|
+
|
18
|
+
# @!attribute [rw] marker
|
19
|
+
# @return [String] Given a string value x, return object names greater in value than the specified marker.
|
20
|
+
# @see http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Large_Number_of_Objects-d1e1521.html
|
21
|
+
attribute :marker
|
22
|
+
|
23
|
+
# @!attribute [rw] limit
|
24
|
+
# @return [Integer] For an integer value n, limits the number of results to at most n values.
|
25
|
+
# @see http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Large_Number_of_Objects-d1e1521.html
|
26
|
+
attribute :limit
|
27
|
+
|
28
|
+
# @!attribute [rw] type
|
29
|
+
# @return [String] Given a string value x, filters the list of images by type.
|
30
|
+
# @note Valid values are BASE and SNAPSHOT
|
31
|
+
attribute :type
|
8
32
|
|
9
33
|
model Fog::Compute::RackspaceV2::Image
|
10
34
|
|
@@ -15,10 +39,18 @@ module Fog
|
|
15
39
|
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
16
40
|
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
17
41
|
# @note Fog's current implementation only returns 1000 images.
|
18
|
-
# @note Fog does not retrieve all image details. Please use get to retrieve all details for a specific image.
|
19
42
|
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Images-d1e4435.html
|
20
|
-
def all
|
21
|
-
|
43
|
+
def all(options = {})
|
44
|
+
options = {
|
45
|
+
'name' => name,
|
46
|
+
'status' => status,
|
47
|
+
'marker' => marker,
|
48
|
+
'limit' => limit,
|
49
|
+
'type' => type
|
50
|
+
}.merge!(options)
|
51
|
+
merge_attributes(options)
|
52
|
+
|
53
|
+
data = service.list_images_detail(options).body['images']
|
22
54
|
load(data)
|
23
55
|
end
|
24
56
|
|
@@ -19,7 +19,7 @@ module Fog
|
|
19
19
|
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
20
20
|
def destroy
|
21
21
|
requires :identity
|
22
|
-
|
22
|
+
service.delete_metadata_item(collection_name, parent.id, key)
|
23
23
|
true
|
24
24
|
end
|
25
25
|
|
@@ -31,7 +31,7 @@ module Fog
|
|
31
31
|
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
32
32
|
def save
|
33
33
|
requires :identity, :value
|
34
|
-
|
34
|
+
service.set_metadata_item(collection_name, parent.id, key, value)
|
35
35
|
true
|
36
36
|
end
|
37
37
|
|
@@ -22,7 +22,7 @@ module Fog
|
|
22
22
|
|
23
23
|
def display_service_regions(service_type)
|
24
24
|
endpoints = get_endpoints(service_type)
|
25
|
-
endpoints.collect { |k,v| ":#{k}" }.join(", ")
|
25
|
+
endpoints.collect { |k,v| ":#{k}" }.join(", ")
|
26
26
|
end
|
27
27
|
|
28
28
|
def get_endpoint(service_type, region=nil)
|
@@ -32,7 +32,7 @@ module Fog
|
|
32
32
|
return endpoint if endpoint.is_a?(String) #There is only one endpoint for service
|
33
33
|
|
34
34
|
unless region
|
35
|
-
raise "There are multiple endpoints
|
35
|
+
raise "There are multiple endpoints available for #{service_type}. Please specify one of the following regions: #{display_service_regions(service_type)}."
|
36
36
|
end
|
37
37
|
region = region.is_a?(String) ? region.to_sym : region
|
38
38
|
endpoint = get_endpoints(service_type)[region]
|
@@ -48,10 +48,16 @@ module Fog
|
|
48
48
|
|
49
49
|
def self.from_response(service, hash)
|
50
50
|
service_catalog = ServiceCatalog.new :service => service
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
begin
|
52
|
+
services = hash["access"]["serviceCatalog"]
|
53
|
+
services.each do |serv|
|
54
|
+
name = serv["name"] ? serv["name"].to_sym : nil
|
55
|
+
next unless name
|
56
|
+
service_catalog.send(:add_endpoints, name, serv)
|
57
|
+
end
|
58
|
+
rescue => e
|
59
|
+
Logger.warning "Exception occurred while loading service catalog - #{e.inspect}"
|
60
|
+
Logger.warning "Unable to load service catalog. Please specify endpoints manually"
|
55
61
|
end
|
56
62
|
service_catalog
|
57
63
|
end
|
@@ -59,20 +65,32 @@ module Fog
|
|
59
65
|
private
|
60
66
|
|
61
67
|
def add_endpoints(service_name, hash)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
68
|
+
begin
|
69
|
+
endpoints = hash["endpoints"]
|
70
|
+
if endpoints.size == 1
|
71
|
+
catalog[service_name] = endpoints[0]["publicURL"].freeze
|
72
|
+
else
|
73
|
+
catalog[service_name] = endpoints_from_array(service_name, endpoints)
|
74
|
+
end
|
75
|
+
rescue => e
|
76
|
+
Logger.warning "Exception occurred while loading #{service_name} service endpoints - #{e.inspect}"
|
77
|
+
Logger.warning "Unable to load service endpoints for #{service_name}. Please specify #{service_name} endpoints manually."
|
67
78
|
end
|
68
79
|
end
|
69
80
|
|
70
|
-
def endpoints_from_array(endpoints)
|
81
|
+
def endpoints_from_array(service_name, endpoints)
|
71
82
|
hash = {}
|
72
83
|
endpoints.each do |endpoint|
|
73
|
-
|
74
|
-
|
75
|
-
|
84
|
+
begin
|
85
|
+
region_name = endpoint["region"]
|
86
|
+
region = region_name ? region_name.downcase.to_sym : :global
|
87
|
+
url = endpoint["publicURL"].freeze
|
88
|
+
hash[region] = url
|
89
|
+
rescue => e
|
90
|
+
Logger.warning "Exception occurred while loading #{service_name} service endpoints - #{e.inspect}"
|
91
|
+
Logger.warning "Unable to parse #{service_name} endpoint - #{endpoint}"
|
92
|
+
Logger.warning "You may need to specify #{service_name} endpoints manually."
|
93
|
+
end
|
76
94
|
end
|
77
95
|
hash
|
78
96
|
end
|
@@ -80,4 +98,4 @@ module Fog
|
|
80
98
|
end
|
81
99
|
end
|
82
100
|
end
|
83
|
-
end
|
101
|
+
end
|