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
@@ -91,19 +91,19 @@ module Fog
|
|
91
91
|
|
92
92
|
def enable_content_caching
|
93
93
|
requires :identity
|
94
|
-
|
94
|
+
service.set_content_caching identity, true
|
95
95
|
true
|
96
96
|
end
|
97
97
|
|
98
98
|
def disable_content_caching
|
99
99
|
requires :identity
|
100
|
-
|
100
|
+
service.set_content_caching identity, false
|
101
101
|
true
|
102
102
|
end
|
103
103
|
|
104
104
|
def content_caching
|
105
105
|
requires :identity
|
106
|
-
|
106
|
+
service.get_content_caching(identity).body['contentCaching']['enabled']
|
107
107
|
end
|
108
108
|
|
109
109
|
def enable_connection_logging
|
@@ -196,6 +196,11 @@ module Fog
|
|
196
196
|
service.get_load_balancer_usage(identity, options).body
|
197
197
|
end
|
198
198
|
|
199
|
+
def stats
|
200
|
+
requires :identity
|
201
|
+
service.get_stats(identity).body
|
202
|
+
end
|
203
|
+
|
199
204
|
def error_page
|
200
205
|
requires :identity
|
201
206
|
service.get_error_page(identity).body['errorpage']['content']
|
@@ -7,15 +7,22 @@ module Fog
|
|
7
7
|
class Alarm < Fog::Rackspace::Monitoring::Base
|
8
8
|
|
9
9
|
identity :id
|
10
|
-
attribute :entity
|
11
|
-
attribute :
|
10
|
+
attribute :entity, :aliases => 'entity_id'
|
11
|
+
attribute :check, :aliases => 'check_id'
|
12
12
|
|
13
13
|
attribute :label
|
14
14
|
attribute :criteria
|
15
15
|
attribute :check_type
|
16
|
-
attribute :check_id
|
17
16
|
attribute :notification_plan_id
|
18
17
|
|
18
|
+
def entity=(obj)
|
19
|
+
attributes[:entity] = obj.is_a?(String) ? Entity.new(:id => obj) : obj
|
20
|
+
end
|
21
|
+
|
22
|
+
def check=(obj)
|
23
|
+
attributes[:check] = obj.is_a?(String) ? Check.new(:id => obj) : obj
|
24
|
+
end
|
25
|
+
|
19
26
|
def params(options={})
|
20
27
|
h = {
|
21
28
|
'label' => label,
|
@@ -27,13 +34,14 @@ module Fog
|
|
27
34
|
|
28
35
|
def save
|
29
36
|
requires :notification_plan_id
|
30
|
-
requires :
|
37
|
+
requires :entity
|
38
|
+
requires :check
|
31
39
|
|
32
40
|
if identity
|
33
|
-
data = service.update_alarm(
|
41
|
+
data = service.update_alarm(entity.id, identity, params)
|
34
42
|
else
|
35
|
-
options = params('check_type' => check_type, 'check_id' =>
|
36
|
-
data = service.create_alarm(
|
43
|
+
options = params('check_type' => check_type, 'check_id' => check.id)
|
44
|
+
data = service.create_alarm(entity.id, options)
|
37
45
|
self.id = data.headers['X-Object-ID']
|
38
46
|
end
|
39
47
|
true
|
@@ -41,7 +49,7 @@ module Fog
|
|
41
49
|
|
42
50
|
def destroy
|
43
51
|
requires :id
|
44
|
-
service.delete_alarm(entity.id,id)
|
52
|
+
service.delete_alarm(entity.id, id)
|
45
53
|
end
|
46
54
|
|
47
55
|
end
|
@@ -19,17 +19,11 @@ module Fog
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def compare?(b)
|
22
|
-
a_o =
|
23
|
-
b_o = b.
|
22
|
+
a_o = params
|
23
|
+
b_o = b.params
|
24
24
|
remain = a_o.reject {|key, value| b_o[key] === value}
|
25
25
|
remain.empty?
|
26
26
|
end
|
27
|
-
|
28
|
-
def entity_id
|
29
|
-
raise(ArgumentError, "entity with id is required for this operation") unless entity && entity.identity
|
30
|
-
entity.identity
|
31
|
-
end
|
32
|
-
|
33
27
|
end
|
34
28
|
end
|
35
29
|
end
|
@@ -77,6 +77,10 @@ module Fog
|
|
77
77
|
|
78
78
|
|
79
79
|
class Mock < Fog::Rackspace::Service
|
80
|
+
|
81
|
+
def initialize(options={})
|
82
|
+
end
|
83
|
+
|
80
84
|
def request(params)
|
81
85
|
Fog::Mock.not_implemented
|
82
86
|
end
|
@@ -112,22 +116,26 @@ module Fog
|
|
112
116
|
@uri = super(@rackspace_endpoint || service_endpoint_url, :rackspace_monitoring_url)
|
113
117
|
end
|
114
118
|
|
119
|
+
def request_id_header
|
120
|
+
"X-Response-Id"
|
121
|
+
end
|
122
|
+
|
115
123
|
private
|
116
124
|
|
117
125
|
def request(params, parse_json = true, &block)
|
118
126
|
super(params, parse_json, &block)
|
119
127
|
rescue Excon::Errors::BadRequest => error
|
120
|
-
raise BadRequest.slurp
|
128
|
+
raise BadRequest.slurp(error, self)
|
121
129
|
rescue Excon::Errors::Conflict => error
|
122
|
-
raise Conflict.slurp
|
130
|
+
raise Conflict.slurp(error, self)
|
123
131
|
rescue Excon::Errors::NotFound => error
|
124
|
-
raise NotFound.slurp(error,
|
132
|
+
raise NotFound.slurp(error, self)
|
125
133
|
rescue Excon::Errors::ServiceUnavailable => error
|
126
|
-
raise ServiceUnavailable.slurp
|
134
|
+
raise ServiceUnavailable.slurp(error, self)
|
127
135
|
rescue Excon::Errors::InternalServerError => error
|
128
|
-
raise InternalServerError.slurp
|
136
|
+
raise InternalServerError.slurp(error, self)
|
129
137
|
rescue Excon::Errors::HTTPStatusError => error
|
130
|
-
raise ServiceError.slurp
|
138
|
+
raise ServiceError.slurp(error, self)
|
131
139
|
end
|
132
140
|
|
133
141
|
def authenticate
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class RackspaceV2
|
4
|
+
class Real
|
5
|
+
|
6
|
+
# Retrieves a list of flavors
|
7
|
+
# @return [Excon::Response] response:
|
8
|
+
# * body [Hash]:
|
9
|
+
# * flavors [Array]:
|
10
|
+
# * [Hash]:
|
11
|
+
# * id [String] - flavor id
|
12
|
+
# * links [Array] - flavor links
|
13
|
+
# * name [String] - flavor name
|
14
|
+
# * ram [Fixnum] - flavor ram
|
15
|
+
# * disk [Fixnum] - flavor disk
|
16
|
+
# * vcpus [Fixnum] - flavor vcpus
|
17
|
+
# @raise [Fog::Compute::RackspaceV2::NotFound] - HTTP 404
|
18
|
+
# @raise [Fog::Compute::RackspaceV2::BadRequest] - HTTP 400
|
19
|
+
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
20
|
+
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
21
|
+
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Flavors-d1e4188.html
|
22
|
+
def list_flavors_detail
|
23
|
+
request(
|
24
|
+
:expects => [200, 203],
|
25
|
+
:method => 'GET',
|
26
|
+
:path => 'flavors/detail'
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Mock
|
32
|
+
def list_flavors_detail
|
33
|
+
flavors = self.data[:flavors].values.map { |f| Fog::Rackspace::MockData.keep(f, 'id', 'name', 'links') }
|
34
|
+
response(:body => {"flavors" => flavors})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -4,29 +4,39 @@ module Fog
|
|
4
4
|
class Real
|
5
5
|
|
6
6
|
# Retrieves a list of images
|
7
|
+
# ==== Parameters
|
8
|
+
# * options<~String>:
|
9
|
+
# * 'name'<~String> - Filters the list of images by image name
|
10
|
+
# * 'limit'<~String> - Maximum number of objects to return
|
11
|
+
# * 'marker'<~String> - Only return objects whose name is greater than marker
|
12
|
+
# * 'status'<~String> - Filters the list of images by status
|
13
|
+
# * 'type'<~String> - Filters base Rackspace images or anyn custom server images that have been created
|
14
|
+
#
|
7
15
|
# @return [Excon::Response] response:
|
8
16
|
# * body [Hash]:
|
9
17
|
# * images [Array]:
|
10
18
|
# * [Hash]:
|
11
|
-
# * id [String] -
|
19
|
+
# * id [String] - image id
|
12
20
|
# * links [Array] - image links
|
13
21
|
# * name [String] - image name
|
14
22
|
# @raise [Fog::Compute::RackspaceV2::NotFound] - HTTP 404
|
15
23
|
# @raise [Fog::Compute::RackspaceV2::BadRequest] - HTTP 400
|
16
24
|
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
17
25
|
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
18
|
-
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/
|
19
|
-
def list_images
|
26
|
+
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Images-d1e4435.html
|
27
|
+
def list_images(options = {})
|
28
|
+
options = options.reject {|key, value| value.nil?}
|
20
29
|
request(
|
21
30
|
:expects => [200, 203],
|
22
31
|
:method => 'GET',
|
23
|
-
:path => 'images'
|
32
|
+
:path => 'images',
|
33
|
+
:query => {'format' => 'json'}.merge!(options)
|
24
34
|
)
|
25
35
|
end
|
26
36
|
end
|
27
37
|
|
28
38
|
class Mock
|
29
|
-
def list_images
|
39
|
+
def list_images(options = {})
|
30
40
|
images = self.data[:images].values
|
31
41
|
response(:body => {"images" => images})
|
32
42
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class RackspaceV2
|
4
|
+
class Real
|
5
|
+
|
6
|
+
# Retrieves a list of images
|
7
|
+
# ==== Parameters
|
8
|
+
# * options<~String>:
|
9
|
+
# * 'name'<~String> - Filters the list of images by image name
|
10
|
+
# * 'limit'<~String> - Maximum number of objects to return
|
11
|
+
# * 'marker'<~String> - Only return objects whose name is greater than marker
|
12
|
+
# * 'status'<~String> - Filters the list of images by status
|
13
|
+
# * 'type'<~String> - Filters base Rackspace images or anyn custom server images that have been created
|
14
|
+
#
|
15
|
+
# @return [Excon::Response] response:
|
16
|
+
# * body [Hash]:
|
17
|
+
# * images [Array]:
|
18
|
+
# * [Hash]:
|
19
|
+
# * id [String] - image id
|
20
|
+
# * links [Array] - image links
|
21
|
+
# * name [String] - image name
|
22
|
+
# * minDisk [Fixnum] - image minimum disk required
|
23
|
+
# * minRam [Fixnum] - image minimum ram required
|
24
|
+
# * created [String] - image creation date (ISO 8601 format)
|
25
|
+
# * updated [String] - date of most recent image update
|
26
|
+
# * state [String] - image status (e.g. ACTIVE, SAVING, ERROR)
|
27
|
+
# * progress [Fixnum] - image saving progress
|
28
|
+
#
|
29
|
+
# @raise [Fog::Compute::RackspaceV2::NotFound] - HTTP 404
|
30
|
+
# @raise [Fog::Compute::RackspaceV2::BadRequest] - HTTP 400
|
31
|
+
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
32
|
+
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
33
|
+
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Images-d1e4435.html
|
34
|
+
def list_images_detail(options = {})
|
35
|
+
options = options.reject {|key, value| value.nil?}
|
36
|
+
request(
|
37
|
+
:expects => [200, 203],
|
38
|
+
:method => 'GET',
|
39
|
+
:path => 'images/detail',
|
40
|
+
:query => {'format' => 'json'}.merge!(options)
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Mock
|
46
|
+
def list_images_detail(options = {})
|
47
|
+
images = self.data[:images].values
|
48
|
+
response(:body => {"images" => images})
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -24,6 +24,18 @@ module Fog
|
|
24
24
|
)
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
class Mock
|
29
|
+
def create_load_balancer(name, protocol, port, virtual_ips, nodes, options = {})
|
30
|
+
data = {"loadBalancer"=>{"name"=>name, "id"=>uniq_id, "protocol"=>protocol, "port"=>port, "algorithm"=>"RANDOM", "status"=>"BUILD",
|
31
|
+
"cluster"=>{"name"=>"ztm-n13.dfw1.lbaas.rackspace.net"}, "timeout"=>30, "created"=>{"time"=>"2013-08-20T20:52:44Z"},
|
32
|
+
"updated"=>{"time"=>"2013-08-20T20:52:44Z"}, "halfClosed"=>false, "connectionLogging"=>{"enabled"=>false}, "contentCaching"=>{"enabled"=>false}}}
|
33
|
+
data["virtual_ips"] = virtual_ips.collect {|n| {"virtualIps"=>[{"address"=>"192.237.192.152", "id"=>uniq_id, "type"=>n[:type], "ipVersion"=>"IPV4"}, {"address"=>"2001:4800:7901:0000:ba81:a6a5:0000:0002", "id"=>9153169, "type"=>"PUBLIC", "ipVersion"=>"IPV6"}], "sourceAddresses"=>{"ipv6Public"=>"2001:4800:7901::13/64", "ipv4Servicenet"=>"10.189.254.5", "ipv4Public"=>"166.78.44.5"}}
|
34
|
+
data["nodes"] = nodes.collect {|n| {"address"=>n[:address], "id"=>uniq_id, "type"=>"PRIMARY", "port"=>n[:port], "status"=>"ONLINE", "condition"=>"ENABLED", "weight"=>1}}
|
35
|
+
data = Excon::Response.new(:body => data, :status => 202)
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
29
41
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fog
|
2
|
+
module Rackspace
|
3
|
+
class LoadBalancers
|
4
|
+
class Real
|
5
|
+
def get_stats(load_balancer_id)
|
6
|
+
|
7
|
+
request(
|
8
|
+
:expects => 200,
|
9
|
+
:path => "loadbalancers/#{load_balancer_id}/stats",
|
10
|
+
:method => 'GET'
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_stats(load_balancer_id)
|
17
|
+
mock_data = {
|
18
|
+
'connectTimeOut' => 0,
|
19
|
+
'connectError' => 1,
|
20
|
+
'connectFailure' => 2,
|
21
|
+
'dataTimedOut' => 3,
|
22
|
+
'keepAliveTimedOut' => 4,
|
23
|
+
'maxConn' => 5
|
24
|
+
}
|
25
|
+
|
26
|
+
Excon::Response.new(:body => mock_data, :status => 200)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -12,6 +12,39 @@ module Fog
|
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def get_entity(entity_id)
|
18
|
+
response = Excon::Response.new
|
19
|
+
response.status = 200
|
20
|
+
response.body = {
|
21
|
+
"id" => entity_id,
|
22
|
+
"label"=>"mocked_fog_entitiy",
|
23
|
+
"ip_addresses"=>{
|
24
|
+
"private0_v4"=>"10.0.0.1"
|
25
|
+
},
|
26
|
+
"metadata"=>nil,
|
27
|
+
"managed"=>false,
|
28
|
+
"uri"=>"https://ord.servers.api.rackspacecloud.com/5555/servers/23kj2q4hk234",
|
29
|
+
"agent_id"=>nil,
|
30
|
+
"created_at"=> Time.now.to_i - 5000,
|
31
|
+
"updated_at"=> Time.now.to_i
|
32
|
+
}
|
33
|
+
response.headers = {
|
34
|
+
"Date"=> Time.now.utc.to_s,
|
35
|
+
"Content-Type"=>"application/json; charset=UTF-8",
|
36
|
+
"X-RateLimit-Limit"=>"50000",
|
37
|
+
"X-RateLimit-Remaining"=>"49627",
|
38
|
+
"X-RateLimit-Window"=>"24 hours",
|
39
|
+
"X-RateLimit-Type"=>"global",
|
40
|
+
"X-Response-Id"=>"j23jlk234jl2j34j",
|
41
|
+
"X-LB"=>"dfw1-maas-prod-api0",
|
42
|
+
"Vary"=>"Accept-Encoding",
|
43
|
+
"Transfer-Encoding"=>"chunked"
|
44
|
+
}
|
45
|
+
response
|
46
|
+
end
|
47
|
+
end
|
15
48
|
end
|
16
49
|
end
|
17
50
|
end
|
@@ -30,6 +30,13 @@ module Fog
|
|
30
30
|
self.send authentication_method, options
|
31
31
|
end
|
32
32
|
|
33
|
+
def request_without_retry(params, parse_json = true, &block)
|
34
|
+
response = @connection.request(request_params(params), &block)
|
35
|
+
|
36
|
+
process_response(response) if parse_json
|
37
|
+
response
|
38
|
+
end
|
39
|
+
|
33
40
|
def request(params, parse_json = true, &block)
|
34
41
|
first_attempt = true
|
35
42
|
begin
|
@@ -74,9 +74,9 @@ module Fog
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def initialize(options={})
|
77
|
-
require 'mime/types'
|
78
77
|
@rackspace_api_key = options[:rackspace_api_key]
|
79
78
|
@rackspace_username = options[:rackspace_username]
|
79
|
+
@rackspace_cdn_ssl = options[:rackspace_cdn_ssl]
|
80
80
|
end
|
81
81
|
|
82
82
|
def data
|
@@ -95,6 +95,10 @@ module Fog
|
|
95
95
|
@rackspace_region
|
96
96
|
end
|
97
97
|
|
98
|
+
def ssl?
|
99
|
+
!!@rackspace_cdn_ssl
|
100
|
+
end
|
101
|
+
|
98
102
|
end
|
99
103
|
|
100
104
|
class Real < Fog::Rackspace::Service
|
@@ -103,7 +107,6 @@ module Fog
|
|
103
107
|
attr_reader :rackspace_cdn_ssl
|
104
108
|
|
105
109
|
def initialize(options={})
|
106
|
-
require 'mime/types'
|
107
110
|
@rackspace_api_key = options[:rackspace_api_key]
|
108
111
|
@rackspace_username = options[:rackspace_username]
|
109
112
|
@rackspace_cdn_ssl = options[:rackspace_cdn_ssl]
|
@@ -134,7 +137,7 @@ module Fog
|
|
134
137
|
# @return [Boolean] return true if service is returning SSL-Secured URLs in public_url methods
|
135
138
|
# @see Directory#public_url
|
136
139
|
def ssl?
|
137
|
-
|
140
|
+
!!rackspace_cdn_ssl
|
138
141
|
end
|
139
142
|
|
140
143
|
# Resets presistent service connections
|
data/lib/fog/rackspace.rb
CHANGED
@@ -19,7 +19,7 @@ module Fog
|
|
19
19
|
"[#{status} | #{transaction_id}] #{super}"
|
20
20
|
end
|
21
21
|
|
22
|
-
def self.slurp(error)
|
22
|
+
def self.slurp(error, service=nil)
|
23
23
|
data = nil
|
24
24
|
message = nil
|
25
25
|
status_code = nil
|
@@ -45,8 +45,6 @@ module Fog
|
|
45
45
|
new_error
|
46
46
|
end
|
47
47
|
|
48
|
-
private
|
49
|
-
|
50
48
|
def set_transaction_id(error, service)
|
51
49
|
return unless service && service.respond_to?(:request_id_header) && error.response
|
52
50
|
@transaction_id = error.response.headers[service.request_id_header]
|
@@ -69,14 +67,16 @@ module Fog
|
|
69
67
|
#TODO - Need to find a better way to print out these validation errors when they are thrown
|
70
68
|
attr_reader :validation_errors
|
71
69
|
|
72
|
-
def self.slurp(error)
|
70
|
+
def self.slurp(error, service=nil)
|
73
71
|
new_error = super(error)
|
74
72
|
unless new_error.response_data.nil? or new_error.response_data['badRequest'].nil?
|
75
73
|
new_error.instance_variable_set(:@validation_errors, new_error.response_data['badRequest']['validationErrors'])
|
76
74
|
end
|
77
75
|
|
76
|
+
status_code = error.response ? error.response.status : nil
|
78
77
|
new_error.instance_variable_set(:@status_code, status_code)
|
79
78
|
new_error.set_transaction_id(error, service)
|
79
|
+
new_error
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
@@ -130,7 +130,10 @@ module Fog
|
|
130
130
|
|
131
131
|
# CGI.escape, but without special treatment on spaces
|
132
132
|
def self.escape(str,extra_exclude_chars = '')
|
133
|
-
|
133
|
+
# '-' is a special character inside a regex class so it must be first or last.
|
134
|
+
# Add extra excludes before the final '-' so it always remains trailing, otherwise
|
135
|
+
# an unwanted range is created by mistake.
|
136
|
+
str.gsub(/([^a-zA-Z0-9_.#{extra_exclude_chars}-]+)/) do
|
134
137
|
'%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
|
135
138
|
end
|
136
139
|
end
|
data/lib/fog/riakcs/usage.rb
CHANGED
@@ -15,7 +15,7 @@ module Fog
|
|
15
15
|
include Utils
|
16
16
|
|
17
17
|
def self.data
|
18
|
-
@data ||= Hash.new do |hash, key|
|
18
|
+
@data ||= Hash.new do |hash, key|
|
19
19
|
hash[key] = {}
|
20
20
|
end
|
21
21
|
end
|
@@ -24,7 +24,7 @@ module Fog
|
|
24
24
|
@data = nil
|
25
25
|
end
|
26
26
|
|
27
|
-
def initialize(options = {})
|
27
|
+
def initialize(options = {})
|
28
28
|
configure_uri_options(options)
|
29
29
|
end
|
30
30
|
|
@@ -41,7 +41,6 @@ module Fog
|
|
41
41
|
include Utils
|
42
42
|
|
43
43
|
def initialize(options = {})
|
44
|
-
require 'mime/types'
|
45
44
|
require 'multi_json'
|
46
45
|
|
47
46
|
configure_uri_options(options)
|
data/lib/fog/storage.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Using vCloud API via fog
|
2
|
+
_contributor @singhgarima_
|
3
|
+
|
4
|
+
For more information about fog [README](/README.md), or visit their website
|
5
|
+
[fog.io](www.fog.io).
|
6
|
+
|
7
|
+
## Vcloud API
|
8
|
+
|
9
|
+
Some useful links to get started on the vCloud API:
|
10
|
+
|
11
|
+
- [http://www.vmware.com/pdf/vcd_15_api_guide.pdf](http://www.vmware.com/pdf/vcd_15_api_guide.pdf)
|
12
|
+
- [vCloud API Programming Guide](http://pubs.vmware.com/vcd-51/index.jsp?topic=%2Fcom.vmware.vcloud.api.doc_51%2FGUID-86CA32C2-3753-49B2-A471-1CE460109ADB.html)
|
13
|
+
|
14
|
+
## Terminology
|
15
|
+
|
16
|
+
- Organization: An Organization is the fundamental vCloud Director grouping
|
17
|
+
that contains users, the vApps that they create, and the resources the vApps
|
18
|
+
use. It is a top-level container in a cloud that contains one or more
|
19
|
+
Organization Virtual Data Centers (Org vDCs) and Catalog entities. It owns
|
20
|
+
all the virtual resources for a cloud instance and can have many Org vDCs.[1]
|
21
|
+
|
22
|
+
- vApp: VMware vApp is a format for packaging and managing applications. A vApp
|
23
|
+
can contain multiple virtual machines.[2]
|
24
|
+
|
25
|
+
- VM: A virtualized personal computer environment in which a guest
|
26
|
+
operating system and associated application software can run. Multiple virtual
|
27
|
+
machines can operate on the same managed host machine concurrently.[3]
|
28
|
+
|
29
|
+
- Catalogs & Catalog-Items: Catalog is used in organizations for storing content.
|
30
|
+
Example: base images. Each item stored in catalog is referred as catalog item.
|
31
|
+
|
32
|
+
- vDC: Virtual Data Center. These are of two kinds provider vDCs (accessible to
|
33
|
+
multiple organizations), and organization vDCs (accessible only by a given
|
34
|
+
organization). In fog we refer to organization vDCs.
|
35
|
+
|
36
|
+
- Networks: You can setup various internal networks and assign various internal
|
37
|
+
ip ranges to them
|
38
|
+
|
39
|
+
## What is the difference between a virtual appliance and a virtual machine?
|
40
|
+
|
41
|
+
A virtual machine is a tightly isolated software container created to run on
|
42
|
+
virtualized platforms. It has four key virtualized resources (CPU, RAM,
|
43
|
+
Storage, and Networking); but requires the installation of an Operating System
|
44
|
+
and runs on one or more applications. A virtual appliance functions very much
|
45
|
+
like a virtual machine, possessing the four key characteristics of
|
46
|
+
compatibility, isolation, encapsulation, and hardware independence. However, a
|
47
|
+
virtual appliance contains a pre-installed, pre-configured Operating System
|
48
|
+
and an application stack optimized to provide a specific set of services.[3]
|
49
|
+
|
50
|
+
**References**
|
51
|
+
|
52
|
+
- [1] http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026316
|
53
|
+
- [2] http://www.vmware.com/pdf/vsphere4/r40/vsp_40_admin_guide.pdf
|
54
|
+
- [3] http://www.vmware.com/technical-resources/virtualization-topics/virtual-appliances/faqs
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Creating a connection
|
2
|
+
|
3
|
+
connection = Fog::Compute.new(
|
4
|
+
:provider => :vcloud,
|
5
|
+
:vcloud_username => "username@org-name",
|
6
|
+
:vcloud_password => password,
|
7
|
+
:vcloud_host => vendor-api-endpoint-host,
|
8
|
+
:vcloud_default_vdc => default_vdc_uri,
|
9
|
+
:connection_options => {
|
10
|
+
:ssl_verify_peer => false,
|
11
|
+
:omit_default_port => true
|
12
|
+
}
|
13
|
+
)
|
14
|
+
|
15
|
+
- Refer to links in [vcloud/examples/README.md](/lib/fog/vcloud/examples/REAME.md)
|
16
|
+
for find various different uris
|
17
|
+
- connection_options are passed down to `excon`, which is used by fog to make
|
18
|
+
http requests.
|
19
|
+
- We using `omit_default_port`, as currently excon adds port to host entry
|
20
|
+
in headers, which might not be compatible with various vendors.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Creating a vApp
|
2
|
+
|
3
|
+
connection.servers.create(
|
4
|
+
:vdc_uri => vdc-uuid,
|
5
|
+
:catalog_item_uri => catalog-uuid,
|
6
|
+
:name => vApp-name,
|
7
|
+
:network_uri => network-uri,
|
8
|
+
:network_name => network-name,
|
9
|
+
:connection_options => {
|
10
|
+
:ssl_verify_peer => false,
|
11
|
+
:omit_default_port => true
|
12
|
+
}
|
13
|
+
)
|
14
|
+
|
15
|
+
- Not most of the uris can be found by understanding the vcloud api
|
16
|
+
eg various network information can be retrieved by
|
17
|
+
`connection.servers.service.networks`
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Get network information
|
2
|
+
|
3
|
+
- To see all networks list
|
4
|
+
|
5
|
+
connection.servers.service.networks
|
6
|
+
|
7
|
+
- To see details of a particular network
|
8
|
+
|
9
|
+
selected_nw = connection.servers.service.networks.detect { |n| n.name == 'Default' }
|
10
|
+
connection.servers.service.get_network(selected_nw.href)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Get network information
|
2
|
+
|
3
|
+
- To see all vApps list
|
4
|
+
|
5
|
+
connection.servers.service.vapps
|
6
|
+
|
7
|
+
- To see details of a particular vApp
|
8
|
+
|
9
|
+
selected_vapp = connection.servers.service.vapps.detect { |n| n.name == 'vapp-name' }
|
10
|
+
connection.servers.service.get_vapp(selected_vapp.href)
|