fog-maestrodev 1.18.0.20131126183714 → 1.18.0.20131127194823
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.
- checksums.yaml +8 -8
- data/fog.gemspec +2 -2
- data/lib/fog/brightbox/compute/image_selector.rb +1 -1
- data/lib/fog/brightbox/compute/shared.rb +8 -10
- data/lib/fog/brightbox/compute.rb +7 -9
- data/lib/fog/brightbox/models/compute/api_client.rb +1 -1
- data/lib/fog/brightbox/models/compute/application.rb +1 -4
- data/lib/fog/brightbox/models/compute/cloud_ip.rb +8 -5
- data/lib/fog/brightbox/models/compute/collaboration.rb +0 -2
- data/lib/fog/brightbox/models/compute/collaborations.rb +1 -1
- data/lib/fog/brightbox/models/compute/firewall_policy.rb +2 -4
- data/lib/fog/brightbox/models/compute/firewall_rule.rb +1 -1
- data/lib/fog/brightbox/models/compute/image.rb +1 -3
- data/lib/fog/brightbox/models/compute/load_balancer.rb +5 -8
- data/lib/fog/brightbox/models/compute/server.rb +28 -20
- data/lib/fog/brightbox/models/compute/server_group.rb +9 -11
- data/lib/fog/brightbox/models/compute/zone.rb +1 -1
- data/lib/fog/brightbox/oauth2.rb +3 -3
- data/lib/fog/google/compute.rb +16 -6
- data/lib/fog/google/models/compute/disk.rb +7 -1
- data/lib/fog/google/models/compute/operation.rb +42 -0
- data/lib/fog/google/models/compute/operations.rb +26 -0
- data/lib/fog/google/models/compute/server.rb +7 -1
- data/lib/fog/google/requests/compute/delete_disk.rb +11 -8
- data/lib/fog/google/requests/compute/delete_global_operation.rb +29 -0
- data/lib/fog/google/requests/compute/delete_server.rb +11 -7
- data/lib/fog/google/requests/compute/delete_zone_operation.rb +33 -0
- data/lib/fog/google/requests/compute/{delete_operation.rb → get_global_operation.rb} +5 -6
- data/lib/fog/google/requests/compute/get_zone_operation.rb +58 -0
- data/lib/fog/google/requests/compute/insert_disk.rb +12 -7
- data/lib/fog/google/requests/compute/insert_server.rb +12 -7
- data/lib/fog/google/requests/compute/list_zone_operations.rb +1 -0
- data/tests/brightbox/models/compute/server_tests.rb +7 -9
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDljMmI1YzY4MmE4YmJiOWU4Y2Q4YjA1NDFjNGZjYWUxZDZhMjg5Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
M2Y3MjkyNjgyYjU4ZWQyMWYwOGRiMmRjNDhiOWM5NGU1ODdkMjE0ZQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Nzg1NDY3OGM4YzQxOTVjM2QyYTgzZGYwM2VhMTBiMDc3ZjhiZTA4YTJiZGUz
|
10
|
+
OTY0YWRjNGVjM2Y4NzNjNjllMDE3NzFiMThiNjIzM2NlMWI0NGNhYjg4MGY0
|
11
|
+
N2U1MTUxYmZmNDllYzIwMGRlNWJhOGY2ZTE4ZDlkYjZjNDRlYjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2E1ZmUwMmEzOWYxNWM1YzdjZGIwZDIxYWYwZjNmZmMyYmEwOTJiYjA1OWVm
|
14
|
+
Mjc1Njk1ZWQ5MDBlZWM1YzhmMTMxNTZiM2ZjMTdlNGRjYjAxZTZjMDcwMzJl
|
15
|
+
YjQzYTlhNWFiNjlkODRmM2ViOTNkYzdjNzk4ZjljYWI3ZGY5Njc=
|
data/fog.gemspec
CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
|
|
6
6
|
## If your rubyforge_project name is different, then edit it and comment out
|
7
7
|
## the sub! line in the Rakefile
|
8
8
|
s.name = 'fog-maestrodev'
|
9
|
-
s.version = '1.18.0.
|
10
|
-
s.date = '2013-11-
|
9
|
+
s.version = '1.18.0.20131127194823'
|
10
|
+
s.date = '2013-11-27'
|
11
11
|
s.rubyforge_project = 'fog'
|
12
12
|
|
13
13
|
## Make sure your summary is short. The description may be as long
|
@@ -32,7 +32,7 @@ module Fog
|
|
32
32
|
img["official"] == true &&
|
33
33
|
img["arch"] == "i686" &&
|
34
34
|
img["name"] =~ /ubuntu/i
|
35
|
-
end.sort do |a,b|
|
35
|
+
end.sort do |a, b|
|
36
36
|
# Reverse sort so "raring" > "precise" and "13.10" > "13.04"
|
37
37
|
b["name"].downcase <=> a["name"].downcase
|
38
38
|
end.first["id"]
|
@@ -63,7 +63,7 @@ module Fog
|
|
63
63
|
# Request account can be changed at anytime and changes behaviour of future requests
|
64
64
|
@scoped_account = @configured_account
|
65
65
|
|
66
|
-
credential_options = {:username => username, :password => password}
|
66
|
+
credential_options = { :username => username, :password => password }
|
67
67
|
@credentials = CredentialSet.new(client_id, client_secret, credential_options)
|
68
68
|
|
69
69
|
# If existing tokens have been cached, allow continued use of them in the service
|
@@ -175,7 +175,7 @@ module Fog
|
|
175
175
|
@default_image_id = Fog.credentials[:brightbox_default_image] || select_default_image
|
176
176
|
end
|
177
177
|
|
178
|
-
|
178
|
+
private
|
179
179
|
|
180
180
|
# This makes a request of the API based on the configured setting for
|
181
181
|
# token management.
|
@@ -200,13 +200,11 @@ module Fog
|
|
200
200
|
#
|
201
201
|
# @return [Excon::Response]
|
202
202
|
def managed_token_request(options)
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
response = authenticated_request(options)
|
209
|
-
end
|
203
|
+
get_access_token unless access_token_available?
|
204
|
+
authenticated_request(options)
|
205
|
+
rescue Excon::Errors::Unauthorized
|
206
|
+
get_access_token
|
207
|
+
authenticated_request(options)
|
210
208
|
end
|
211
209
|
|
212
210
|
# This request makes an authenticated request of the API using currently
|
@@ -221,7 +219,7 @@ module Fog
|
|
221
219
|
headers = options[:headers] || {}
|
222
220
|
headers.merge!("Authorization" => "OAuth #{@credentials.access_token}", "Content-Type" => "application/json")
|
223
221
|
options[:headers] = headers
|
224
|
-
# TODO This is just a wrapper around a call to Excon::Connection#request
|
222
|
+
# TODO: This is just a wrapper around a call to Excon::Connection#request
|
225
223
|
# so can be extracted from Compute by passing in the connection,
|
226
224
|
# credentials and options
|
227
225
|
@connection.request(options)
|
@@ -166,7 +166,7 @@ module Fog
|
|
166
166
|
_request
|
167
167
|
end
|
168
168
|
|
169
|
-
|
169
|
+
private
|
170
170
|
|
171
171
|
def _request
|
172
172
|
raise Fog::Errors::MockNotImplemented
|
@@ -236,7 +236,7 @@ module Fog
|
|
236
236
|
_wrapped_request(method, path, expected_responses, parameters)
|
237
237
|
end
|
238
238
|
|
239
|
-
|
239
|
+
private
|
240
240
|
|
241
241
|
# Wrapped request is the non-standard form of request introduced by mistake
|
242
242
|
#
|
@@ -256,20 +256,18 @@ module Fog
|
|
256
256
|
|
257
257
|
# Select the account to scope for this request
|
258
258
|
account = scoped_account(parameters.fetch(:account_id, nil))
|
259
|
-
if account
|
260
|
-
request_options[:query] = { :account_id => account }
|
261
|
-
end
|
259
|
+
request_options[:query] = { :account_id => account } if account
|
262
260
|
|
263
261
|
request_options[:body] = Fog::JSON.encode(parameters) unless parameters.empty?
|
264
262
|
|
265
263
|
response = make_request(request_options)
|
266
264
|
|
267
|
-
# FIXME We should revert to returning the Excon::Request after a suitable
|
265
|
+
# FIXME: We should revert to returning the Excon::Request after a suitable
|
268
266
|
# configuration option is in place to switch back to this incorrect behaviour
|
269
|
-
|
270
|
-
Fog::JSON.decode(response.body)
|
271
|
-
else
|
267
|
+
if response.body.empty?
|
272
268
|
response
|
269
|
+
else
|
270
|
+
Fog::JSON.decode(response.body)
|
273
271
|
end
|
274
272
|
end
|
275
273
|
|
@@ -3,9 +3,7 @@ require 'fog/core/model'
|
|
3
3
|
module Fog
|
4
4
|
module Compute
|
5
5
|
class Brightbox
|
6
|
-
|
7
6
|
class Application < Fog::Model
|
8
|
-
|
9
7
|
identity :id
|
10
8
|
attribute :url
|
11
9
|
attribute :name
|
@@ -15,12 +13,11 @@ module Fog
|
|
15
13
|
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
|
16
14
|
options = {
|
17
15
|
:name => name
|
18
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
16
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
19
17
|
data = service.create_application(options)
|
20
18
|
merge_attributes(data)
|
21
19
|
true
|
22
20
|
end
|
23
|
-
|
24
21
|
end
|
25
22
|
end
|
26
23
|
end
|
@@ -26,13 +26,16 @@ module Fog
|
|
26
26
|
attribute :port_translators
|
27
27
|
attribute :name
|
28
28
|
|
29
|
+
# Attempt to map or point the Cloud IP to the destination resource.
|
30
|
+
#
|
31
|
+
# @param [Object] destination
|
32
|
+
#
|
29
33
|
def map(destination)
|
30
34
|
requires :identity
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
final_destination = destination.id
|
35
|
+
if destination.respond_to?(:mapping_identity)
|
36
|
+
final_destination = destination.mapping_identity
|
37
|
+
elsif destination.respond_to?(:identity)
|
38
|
+
final_destination = destination.identity
|
36
39
|
else
|
37
40
|
final_destination = destination
|
38
41
|
end
|
@@ -31,7 +31,7 @@ module Fog
|
|
31
31
|
def invite(email, role)
|
32
32
|
return nil if email.nil? || email == ""
|
33
33
|
return nil if role.nil? || role == ""
|
34
|
-
options = {:email => email, :role => role}
|
34
|
+
options = { :email => email, :role => role }
|
35
35
|
data = service.create_collaboration(options)
|
36
36
|
new(data)
|
37
37
|
end
|
@@ -26,7 +26,7 @@ module Fog
|
|
26
26
|
:server_group => server_group_id,
|
27
27
|
:name => name,
|
28
28
|
:description => description
|
29
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
29
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
30
30
|
data = service.create_firewall_policy(options)
|
31
31
|
merge_attributes(data)
|
32
32
|
true
|
@@ -54,12 +54,10 @@ module Fog
|
|
54
54
|
|
55
55
|
def destroy
|
56
56
|
requires :identity
|
57
|
-
|
57
|
+
service.destroy_firewall_policy(identity)
|
58
58
|
true
|
59
59
|
end
|
60
|
-
|
61
60
|
end
|
62
|
-
|
63
61
|
end
|
64
62
|
end
|
65
63
|
end
|
@@ -35,7 +35,7 @@ module Fog
|
|
35
35
|
:destination => destination,
|
36
36
|
:destination_port => destination_port,
|
37
37
|
:icmp_type_name => icmp_type_name
|
38
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
38
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
39
39
|
data = service.create_firewall_rule(options)
|
40
40
|
merge_attributes(data)
|
41
41
|
true
|
@@ -47,7 +47,7 @@ module Fog
|
|
47
47
|
:name => name,
|
48
48
|
:username => username,
|
49
49
|
:description => description
|
50
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
50
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
51
51
|
data = service.create_image(options)
|
52
52
|
merge_attributes(data)
|
53
53
|
true
|
@@ -58,9 +58,7 @@ module Fog
|
|
58
58
|
service.destroy_image(identity)
|
59
59
|
true
|
60
60
|
end
|
61
|
-
|
62
61
|
end
|
63
|
-
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -52,7 +52,7 @@ module Fog
|
|
52
52
|
:name => name,
|
53
53
|
:certificate_pem => certificate_pem,
|
54
54
|
:certificate_private_key => certificate_private_key
|
55
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
55
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
56
56
|
data = service.create_load_balancer(options)
|
57
57
|
merge_attributes(data)
|
58
58
|
true
|
@@ -94,16 +94,13 @@ module Fog
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
|
97
|
+
private
|
98
98
|
|
99
99
|
def time_or_original(value)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
value
|
104
|
-
end
|
100
|
+
Time.parse(value)
|
101
|
+
rescue TypeError, ArgumentError
|
102
|
+
value
|
105
103
|
end
|
106
|
-
|
107
104
|
end
|
108
105
|
end
|
109
106
|
end
|
@@ -37,7 +37,7 @@ module Fog
|
|
37
37
|
attribute :zone
|
38
38
|
attribute :server_type
|
39
39
|
|
40
|
-
def initialize(attributes={})
|
40
|
+
def initialize(attributes = {})
|
41
41
|
# Call super first to initialize the service object for our default image
|
42
42
|
super
|
43
43
|
self.image_id ||= service.default_image
|
@@ -83,10 +83,10 @@ module Fog
|
|
83
83
|
def reboot(use_hard_reboot = true)
|
84
84
|
requires :identity
|
85
85
|
if ready?
|
86
|
-
|
87
|
-
soft_reboot
|
88
|
-
else
|
86
|
+
if use_hard_reboot
|
89
87
|
hard_reboot
|
88
|
+
else
|
89
|
+
soft_reboot
|
90
90
|
end
|
91
91
|
else
|
92
92
|
# Not able to reboot if not ready in the first place
|
@@ -137,23 +137,23 @@ module Fog
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def private_ip_address
|
140
|
-
|
141
|
-
interfaces.first["ipv4_address"]
|
142
|
-
else
|
140
|
+
if interfaces.empty?
|
143
141
|
nil
|
142
|
+
else
|
143
|
+
interfaces.first["ipv4_address"]
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
147
|
def public_ip_address
|
148
|
-
|
149
|
-
cloud_ips.first["public_ip"]
|
150
|
-
else
|
148
|
+
if cloud_ips.empty?
|
151
149
|
nil
|
150
|
+
else
|
151
|
+
cloud_ips.first["public_ip"]
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
155
|
def ready?
|
156
|
-
|
156
|
+
state == "active"
|
157
157
|
end
|
158
158
|
|
159
159
|
def activate_console
|
@@ -171,20 +171,28 @@ module Fog
|
|
171
171
|
:zone => zone_id,
|
172
172
|
:user_data => user_data,
|
173
173
|
:server_groups => server_groups
|
174
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
175
|
-
|
176
|
-
|
177
|
-
|
174
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
175
|
+
|
176
|
+
options.merge!(:server_type => flavor_id) unless flavor_id.nil? || flavor_id == ""
|
177
|
+
|
178
178
|
data = service.create_server(options)
|
179
179
|
merge_attributes(data)
|
180
180
|
true
|
181
181
|
end
|
182
182
|
|
183
|
-
|
183
|
+
# Replaces the server's identifier with it's interface's identifier for Cloud IP mapping
|
184
|
+
#
|
185
|
+
# @return [String] the identifier to pass to a Cloud IP mapping request
|
186
|
+
def mapping_identity
|
187
|
+
interfaces.first["id"]
|
188
|
+
end
|
189
|
+
|
190
|
+
private
|
191
|
+
|
184
192
|
# Hard reboots are fast, avoiding the OS by doing a "power off"
|
185
193
|
def hard_reboot
|
186
194
|
stop
|
187
|
-
wait_for { !
|
195
|
+
wait_for { !ready? }
|
188
196
|
start
|
189
197
|
end
|
190
198
|
|
@@ -194,11 +202,11 @@ module Fog
|
|
194
202
|
# @todo Needs cleaner error handling when the OS times out
|
195
203
|
def soft_reboot
|
196
204
|
shutdown
|
197
|
-
# FIXME Using side effect of wait_for's (evaluated block) to detect timeouts
|
205
|
+
# FIXME: Using side effect of wait_for's (evaluated block) to detect timeouts
|
198
206
|
begin
|
199
|
-
wait_for(20) { !
|
207
|
+
wait_for(20) { !ready? }
|
200
208
|
start
|
201
|
-
rescue Fog::Errors::Timeout
|
209
|
+
rescue Fog::Errors::Timeout
|
202
210
|
false
|
203
211
|
end
|
204
212
|
end
|
@@ -3,7 +3,6 @@ require 'fog/core/model'
|
|
3
3
|
module Fog
|
4
4
|
module Compute
|
5
5
|
class Brightbox
|
6
|
-
|
7
6
|
# A server group is a collection of servers
|
8
7
|
#
|
9
8
|
# Certain actions can accept a server group and affect all members
|
@@ -24,15 +23,15 @@ module Fog
|
|
24
23
|
options = {
|
25
24
|
:name => name,
|
26
25
|
:description => description
|
27
|
-
}.delete_if {|k,v| v.nil? || v == "" }
|
26
|
+
}.delete_if { |k, v| v.nil? || v == "" }
|
28
27
|
data = service.create_server_group(options)
|
29
28
|
merge_attributes(data)
|
30
29
|
true
|
31
30
|
end
|
32
31
|
|
33
32
|
def servers
|
34
|
-
srv_ids = server_ids.
|
35
|
-
srv_ids.
|
33
|
+
srv_ids = server_ids.map { |srv| srv["id"] }
|
34
|
+
srv_ids.map do |srv_id|
|
36
35
|
service.servers.get(srv_id)
|
37
36
|
end
|
38
37
|
end
|
@@ -41,7 +40,7 @@ module Fog
|
|
41
40
|
#
|
42
41
|
# @param [Array] identifiers array of server identifier strings to add
|
43
42
|
# @return [Fog::Compute::ServerGroup]
|
44
|
-
def add_servers
|
43
|
+
def add_servers(identifiers)
|
45
44
|
requires :identity
|
46
45
|
options = {
|
47
46
|
:servers => server_references(identifiers)
|
@@ -54,7 +53,7 @@ module Fog
|
|
54
53
|
#
|
55
54
|
# @param [Array] identifiers array of server identifier strings to remove
|
56
55
|
# @return [Fog::Compute::ServerGroup]
|
57
|
-
def remove_servers
|
56
|
+
def remove_servers(identifiers)
|
58
57
|
requires :identity
|
59
58
|
options = {
|
60
59
|
:servers => server_references(identifiers)
|
@@ -68,7 +67,7 @@ module Fog
|
|
68
67
|
# @param [Array] identifiers array of server identifier strings to move
|
69
68
|
# @param [String] destination_group_id destination server group identifier
|
70
69
|
# @return [Fog::Compute::ServerGroup]
|
71
|
-
def move_servers
|
70
|
+
def move_servers(identifiers, destination_group_id)
|
72
71
|
requires :identity
|
73
72
|
options = {
|
74
73
|
:servers => server_references(identifiers),
|
@@ -84,12 +83,11 @@ module Fog
|
|
84
83
|
true
|
85
84
|
end
|
86
85
|
|
87
|
-
|
86
|
+
protected
|
88
87
|
|
89
|
-
def server_references
|
90
|
-
identifiers.map {|id| {"server" => id} }
|
88
|
+
def server_references(identifiers)
|
89
|
+
identifiers.map { |id| { "server" => id } }
|
91
90
|
end
|
92
|
-
|
93
91
|
end
|
94
92
|
end
|
95
93
|
end
|
data/lib/fog/brightbox/oauth2.rb
CHANGED
@@ -18,7 +18,7 @@ module Fog::Brightbox::OAuth2
|
|
18
18
|
header_content = "#{credentials.client_id}:#{credentials.client_secret}"
|
19
19
|
encoded_credentials = Base64.encode64(header_content).chomp
|
20
20
|
|
21
|
-
connection.request(
|
21
|
+
connection.request(
|
22
22
|
:path => "/token",
|
23
23
|
:expects => 200,
|
24
24
|
:headers => {
|
@@ -27,7 +27,7 @@ module Fog::Brightbox::OAuth2
|
|
27
27
|
},
|
28
28
|
:method => 'POST',
|
29
29
|
:body => Fog::JSON.encode(token_strategy.authorization_body_data)
|
30
|
-
|
30
|
+
)
|
31
31
|
end
|
32
32
|
|
33
33
|
# Encapsulates credentials required to request access tokens from the
|
@@ -152,7 +152,7 @@ module Fog::Brightbox::OAuth2
|
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
|
-
private
|
155
|
+
private
|
156
156
|
|
157
157
|
# This updates the current credentials if passed a valid response
|
158
158
|
#
|
data/lib/fog/google/compute.rb
CHANGED
@@ -29,13 +29,16 @@ module Fog
|
|
29
29
|
request :get_network
|
30
30
|
request :get_zone
|
31
31
|
request :get_snapshot
|
32
|
+
request :get_global_operation
|
33
|
+
request :get_zone_operation
|
32
34
|
|
33
35
|
request :delete_disk
|
34
36
|
request :delete_firewall
|
35
37
|
request :delete_image
|
36
38
|
request :delete_network
|
37
|
-
request :delete_operation
|
38
39
|
request :delete_server
|
40
|
+
request :delete_global_operation
|
41
|
+
request :delete_zone_operation
|
39
42
|
|
40
43
|
request :insert_disk
|
41
44
|
request :insert_firewall
|
@@ -59,6 +62,9 @@ module Fog
|
|
59
62
|
model :disk
|
60
63
|
collection :disks
|
61
64
|
|
65
|
+
model :operation
|
66
|
+
collection :operations
|
67
|
+
|
62
68
|
model :snapshot
|
63
69
|
collection :snapshots
|
64
70
|
|
@@ -73,10 +79,10 @@ module Fog
|
|
73
79
|
@api_version = 'v1beta16'
|
74
80
|
end
|
75
81
|
|
76
|
-
def build_excon_response(body)
|
82
|
+
def build_excon_response(body, status=200)
|
77
83
|
response = Excon::Response.new
|
78
84
|
response.body = body
|
79
|
-
if response.body["error"]
|
85
|
+
if response.body and response.body["error"]
|
80
86
|
response.status = response.body["error"]["code"]
|
81
87
|
msg = response.body["error"]["errors"].map{|error| error["message"]}.join(", ")
|
82
88
|
case response.status
|
@@ -86,7 +92,7 @@ module Fog
|
|
86
92
|
raise Fog::Errors::Error.new(msg)
|
87
93
|
end
|
88
94
|
else
|
89
|
-
response.status =
|
95
|
+
response.status = status
|
90
96
|
end
|
91
97
|
response
|
92
98
|
end
|
@@ -763,7 +769,8 @@ module Fog
|
|
763
769
|
}
|
764
770
|
end,
|
765
771
|
:images => {},
|
766
|
-
:disks => {}
|
772
|
+
:disks => {},
|
773
|
+
:operations => {}
|
767
774
|
}
|
768
775
|
end
|
769
776
|
end
|
@@ -782,6 +789,9 @@ module Fog
|
|
782
789
|
self.class.data(api_version).delete(@project)
|
783
790
|
end
|
784
791
|
|
792
|
+
def random_operation
|
793
|
+
"operation-#{Fog::Mock.random_numbers(13)}-#{Fog::Mock.random_hex(13)}-#{Fog::Mock.random_hex(8)}"
|
794
|
+
end
|
785
795
|
end
|
786
796
|
|
787
797
|
class Real
|
@@ -842,7 +852,7 @@ module Fog
|
|
842
852
|
# result = Google::APIClient::Result
|
843
853
|
# returns Excon::Response
|
844
854
|
def build_response(result)
|
845
|
-
build_excon_response(Fog::JSON.decode(result.body))
|
855
|
+
build_excon_response(result.body.nil? ? nil : Fog::JSON.decode(result.body), result.status)
|
846
856
|
end
|
847
857
|
|
848
858
|
end
|
@@ -38,7 +38,13 @@ module Fog
|
|
38
38
|
|
39
39
|
def destroy
|
40
40
|
requires :name, :zone_name
|
41
|
-
service.delete_disk(name, zone_name)
|
41
|
+
operation = service.delete_disk(name, zone_name)
|
42
|
+
# wait until "RUNNING" or "DONE" to ensure the operation doesn't fail, raises exception on error
|
43
|
+
Fog.wait_for do
|
44
|
+
operation = service.get_zone_operation(zone_name, operation.body["name"])
|
45
|
+
operation.body["status"] != "PENDING"
|
46
|
+
end
|
47
|
+
operation
|
42
48
|
end
|
43
49
|
|
44
50
|
def zone
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class Google
|
6
|
+
|
7
|
+
class Operation < Fog::Model
|
8
|
+
|
9
|
+
identity :name
|
10
|
+
|
11
|
+
attribute :kind, :aliases => 'kind'
|
12
|
+
attribute :id, :aliases => 'id'
|
13
|
+
attribute :creation_timestamp, :aliases => 'creationTimestamp'
|
14
|
+
attribute :zone_name, :aliases => 'zone'
|
15
|
+
attribute :status, :aliases => 'status'
|
16
|
+
attribute :self_link, :aliases => 'selfLink'
|
17
|
+
|
18
|
+
def ready?
|
19
|
+
self.status == DONE_STATE
|
20
|
+
end
|
21
|
+
|
22
|
+
def pending?
|
23
|
+
self.status == PENDING_STATE
|
24
|
+
end
|
25
|
+
|
26
|
+
def reload
|
27
|
+
requires :identity
|
28
|
+
|
29
|
+
data = collection.get(identity, zone)
|
30
|
+
new_attributes = data.attributes
|
31
|
+
merge_attributes(new_attributes)
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
PENDING_STATE = "PENDING"
|
36
|
+
RUNNING_STATE = "RUNNING"
|
37
|
+
DONE_STATE = "DONE"
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/google/models/compute/operation'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Compute
|
6
|
+
class Google
|
7
|
+
|
8
|
+
class Operations < Fog::Collection
|
9
|
+
|
10
|
+
model Fog::Compute::Google::Operation
|
11
|
+
|
12
|
+
def get(identity, zone=nil)
|
13
|
+
if zone.nil?
|
14
|
+
response = service.get_global_operation(identity)
|
15
|
+
else
|
16
|
+
response = service.get_zone_operation(zone, identity)
|
17
|
+
end
|
18
|
+
return nil if response.nil?
|
19
|
+
new(response.body)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -30,7 +30,13 @@ module Fog
|
|
30
30
|
|
31
31
|
def destroy
|
32
32
|
requires :name, :zone
|
33
|
-
service.delete_server(name, zone)
|
33
|
+
operation = service.delete_server(name, zone)
|
34
|
+
# wait until "RUNNING" or "DONE" to ensure the operation doesn't fail, raises exception on error
|
35
|
+
Fog.wait_for do
|
36
|
+
operation = service.get_zone_operation(zone_name, operation.body["name"])
|
37
|
+
operation.body["status"] != "PENDING"
|
38
|
+
end
|
39
|
+
operation
|
34
40
|
end
|
35
41
|
|
36
42
|
def image
|
@@ -6,23 +6,26 @@ module Fog
|
|
6
6
|
|
7
7
|
def delete_disk(disk_name, zone_name)
|
8
8
|
get_disk(disk_name, zone_name)
|
9
|
-
self.data[:disks].delete disk_name
|
10
9
|
|
11
|
-
|
10
|
+
operation = self.random_operation
|
11
|
+
self.data[:operations][operation] = {
|
12
12
|
"kind" => "compute#operation",
|
13
|
-
"id" =>
|
14
|
-
"name" =>
|
13
|
+
"id" => Fog::Mock.random_numbers(19).to_s,
|
14
|
+
"name" => operation,
|
15
15
|
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
|
16
16
|
"operationType" => "delete",
|
17
17
|
"targetLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks/#{disk_name}",
|
18
|
-
"targetId" => "
|
19
|
-
"status" =>
|
18
|
+
"targetId" => self.data[:disks][disk_name]["id"],
|
19
|
+
"status" => Fog::Compute::Google::Operation::PENDING_STATE,
|
20
20
|
"user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
|
21
21
|
"progress" => 0,
|
22
22
|
"insertTime" => Time.now.iso8601,
|
23
23
|
"startTime" => Time.now.iso8601,
|
24
|
-
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations
|
25
|
-
}
|
24
|
+
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations/#{operation}"
|
25
|
+
}
|
26
|
+
self.data[:disks].delete disk_name
|
27
|
+
|
28
|
+
build_response(:body => self.data[:operations][operation])
|
26
29
|
end
|
27
30
|
|
28
31
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
|
5
|
+
class Mock
|
6
|
+
|
7
|
+
def delete_global_operation(operation)
|
8
|
+
Fog::Mock.not_implemented
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
class Real
|
14
|
+
# https://developers.google.com/compute/docs/reference/latest/globalOperations
|
15
|
+
|
16
|
+
def delete_global_operation(operation)
|
17
|
+
api_method = @compute.global_operations.delete
|
18
|
+
parameters = {
|
19
|
+
'project' => @project,
|
20
|
+
'operation' => operation
|
21
|
+
}
|
22
|
+
|
23
|
+
result = self.build_result(api_method, parameters)
|
24
|
+
response = self.build_response(result)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -28,21 +28,25 @@ module Fog
|
|
28
28
|
server = self.data[:servers][server_name]
|
29
29
|
server["status"] = "STOPPED"
|
30
30
|
server["mock-deletionTimestamp"] = Time.now.iso8601
|
31
|
-
|
31
|
+
|
32
|
+
operation = self.random_operation
|
33
|
+
self.data[:operations][operation] = {
|
32
34
|
"kind" => "compute#operation",
|
33
|
-
"id" =>
|
34
|
-
"name" =>
|
35
|
+
"id" => Fog::Mock.random_numbers(19).to_s,
|
36
|
+
"name" => operation,
|
35
37
|
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
|
36
38
|
"operationType" => "delete",
|
37
39
|
"targetLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}",
|
38
|
-
"targetId" => "
|
39
|
-
"status" =>
|
40
|
+
"targetId" => self.data[:servers][server_name]["id"],
|
41
|
+
"status" => Fog::Compute::Google::Operation::PENDING_STATE,
|
40
42
|
"user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
|
41
43
|
"progress" => 0,
|
42
44
|
"insertTime" => Time.now.iso8601,
|
43
45
|
"startTime" => Time.now.iso8601,
|
44
|
-
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations
|
45
|
-
}
|
46
|
+
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations/#{operation}"
|
47
|
+
}
|
48
|
+
|
49
|
+
build_response(:body => self.data[:operations][operation])
|
46
50
|
end
|
47
51
|
|
48
52
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
|
5
|
+
class Mock
|
6
|
+
|
7
|
+
def delete_zone_operation(zone, operation)
|
8
|
+
Fog::Mock.not_implemented
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
class Real
|
14
|
+
# https://developers.google.com/compute/docs/reference/latest/zoneOperations
|
15
|
+
|
16
|
+
def delete_zone_operation(zone_name, operation)
|
17
|
+
if zone_name.start_with? 'http'
|
18
|
+
zone_name = zone_name.split('/')[-1]
|
19
|
+
end
|
20
|
+
api_method = @compute.zone_operations.delete
|
21
|
+
parameters = {
|
22
|
+
'project' => @project,
|
23
|
+
'zone' => zone_name,
|
24
|
+
'operation' => operation
|
25
|
+
}
|
26
|
+
|
27
|
+
result = self.build_result(api_method, parameters)
|
28
|
+
response = self.build_response(result)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -4,27 +4,26 @@ module Fog
|
|
4
4
|
|
5
5
|
class Mock
|
6
6
|
|
7
|
-
def
|
7
|
+
def get_global_operation(operation)
|
8
8
|
Fog::Mock.not_implemented
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class Real
|
14
|
+
# https://developers.google.com/compute/docs/reference/latest/globalOperations
|
14
15
|
|
15
|
-
def
|
16
|
-
api_method = @compute.
|
16
|
+
def get_global_operation(operation)
|
17
|
+
api_method = @compute.global_operations.get
|
17
18
|
parameters = {
|
18
19
|
'project' => @project,
|
19
|
-
'operation' =>
|
20
|
+
'operation' => operation
|
20
21
|
}
|
21
22
|
|
22
23
|
result = self.build_result(api_method, parameters)
|
23
24
|
response = self.build_response(result)
|
24
25
|
end
|
25
|
-
|
26
26
|
end
|
27
|
-
|
28
27
|
end
|
29
28
|
end
|
30
29
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
|
5
|
+
class Mock
|
6
|
+
|
7
|
+
def get_zone_operation(zone_name, operation)
|
8
|
+
operation = self.data[:operations][operation]
|
9
|
+
if operation
|
10
|
+
case operation["status"]
|
11
|
+
when Fog::Compute::Google::Operation::PENDING_STATE
|
12
|
+
operation["status"] = Fog::Compute::Google::Operation::RUNNING_STATE
|
13
|
+
operation["progress"] = 50
|
14
|
+
else
|
15
|
+
operation["status"] = Fog::Compute::Google::Operation::DONE_STATE
|
16
|
+
operation["progress"] = 100
|
17
|
+
end
|
18
|
+
else
|
19
|
+
operation = {
|
20
|
+
"error" => {
|
21
|
+
"errors" => [
|
22
|
+
{
|
23
|
+
"domain" => "global",
|
24
|
+
"reason" => "notFound",
|
25
|
+
"message" => "The resource 'projects/#{project}/zones/#{zone_name}/operations/#{operation}' was not found"
|
26
|
+
}
|
27
|
+
],
|
28
|
+
"code" => 404,
|
29
|
+
"message" => "The resource 'projects/#{project}/zones/#{zone_name}/operations/#{operation}' was not found"
|
30
|
+
}
|
31
|
+
}
|
32
|
+
end
|
33
|
+
build_response(:body => operation)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Real
|
38
|
+
# https://developers.google.com/compute/docs/reference/latest/zoneOperations
|
39
|
+
|
40
|
+
def get_zone_operation(zone_name, operation)
|
41
|
+
if zone_name.start_with? 'http'
|
42
|
+
zone_name = zone_name.split('/')[-1]
|
43
|
+
end
|
44
|
+
|
45
|
+
api_method = @compute.zone_operations.get
|
46
|
+
parameters = {
|
47
|
+
'project' => @project,
|
48
|
+
'zone' => zone_name,
|
49
|
+
'operation' => operation
|
50
|
+
}
|
51
|
+
|
52
|
+
result = self.build_result(api_method, parameters)
|
53
|
+
response = self.build_response(result)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -16,9 +16,10 @@ module Fog
|
|
16
16
|
end
|
17
17
|
get_zone(zone_name)
|
18
18
|
|
19
|
+
id = Fog::Mock.random_numbers(19).to_s
|
19
20
|
self.data[:disks][disk_name] = {
|
20
21
|
"kind" => "compute#disk",
|
21
|
-
"id" =>
|
22
|
+
"id" => id,
|
22
23
|
"creationTimestamp" => Time.now.iso8601,
|
23
24
|
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
|
24
25
|
"status" => "READY",
|
@@ -27,20 +28,24 @@ module Fog
|
|
27
28
|
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks/#{disk_name}"
|
28
29
|
}
|
29
30
|
|
30
|
-
|
31
|
+
operation = self.random_operation
|
32
|
+
self.data[:operations][operation] = {
|
31
33
|
"kind" => "compute#operation",
|
32
|
-
"id" =>
|
33
|
-
"name" =>
|
34
|
+
"id" => Fog::Mock.random_numbers(19).to_s,
|
35
|
+
"name" => operation,
|
34
36
|
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
|
35
37
|
"operationType" => "insert",
|
36
38
|
"targetLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks/#{disk_name}",
|
37
|
-
"
|
39
|
+
"targetId" => id,
|
40
|
+
"status" => Fog::Compute::Google::Operation::PENDING_STATE,
|
38
41
|
"user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
|
39
42
|
"progress" => 0,
|
40
43
|
"insertTime" => Time.now.iso8601,
|
41
44
|
"startTime" => Time.now.iso8601,
|
42
|
-
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations
|
43
|
-
}
|
45
|
+
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations/#{operation}"
|
46
|
+
}
|
47
|
+
|
48
|
+
build_response(:body => self.data[:operations][operation])
|
44
49
|
end
|
45
50
|
|
46
51
|
end
|
@@ -37,9 +37,10 @@ module Fog
|
|
37
37
|
end
|
38
38
|
get_zone(zone_name)
|
39
39
|
|
40
|
+
id = Fog::Mock.random_numbers(19).to_s
|
40
41
|
self.data[:servers][server_name] = {
|
41
42
|
"kind" => "compute#instance",
|
42
|
-
"id" =>
|
43
|
+
"id" => id,
|
43
44
|
"creationTimestamp" => Time.now.iso8601,
|
44
45
|
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
|
45
46
|
"status" => "PROVISIONING",
|
@@ -85,20 +86,24 @@ module Fog
|
|
85
86
|
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}"
|
86
87
|
}
|
87
88
|
|
88
|
-
|
89
|
+
operation = self.random_operation
|
90
|
+
self.data[:operations][operation] = {
|
89
91
|
"kind" => "compute#operation",
|
90
|
-
"id" =>
|
91
|
-
"name" =>
|
92
|
+
"id" => Fog::Mock.random_numbers(19).to_s,
|
93
|
+
"name" => operation,
|
92
94
|
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
|
93
95
|
"operationType" => "insert",
|
94
96
|
"targetLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}",
|
95
|
-
"
|
97
|
+
"targetId" => id,
|
98
|
+
"status" => Fog::Compute::Google::Operation::PENDING_STATE,
|
96
99
|
"user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
|
97
100
|
"progress" => 0,
|
98
101
|
"insertTime" => Time.now.iso8601,
|
99
102
|
"startTime" => Time.now.iso8601,
|
100
|
-
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations
|
101
|
-
}
|
103
|
+
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations/#{operation}"
|
104
|
+
}
|
105
|
+
|
106
|
+
build_response(:body => self.data[:operations][operation])
|
102
107
|
end
|
103
108
|
|
104
109
|
end
|
@@ -1,21 +1,19 @@
|
|
1
1
|
Shindo.tests("Fog::Compute[:brightbox] | Server model", ["brightbox"]) do
|
2
|
-
|
3
2
|
pending if Fog.mocking?
|
4
3
|
|
5
4
|
tests("success") do
|
6
|
-
|
7
|
-
|
8
|
-
@server = Brightbox::Compute::TestSupport.get_test_server
|
9
|
-
server_id = @server.id
|
10
|
-
end
|
5
|
+
@server = Brightbox::Compute::TestSupport.get_test_server
|
6
|
+
server_id = @server.id
|
11
7
|
|
12
8
|
tests("#dns_name") do
|
13
|
-
pending if Fog.mocking?
|
14
9
|
returns("public.#{@server.fqdn}") { @server.dns_name }
|
15
10
|
end
|
16
11
|
|
17
|
-
|
18
|
-
@server.
|
12
|
+
tests("#mapping_identity") do
|
13
|
+
first_interface_id = @server.interfaces.first["id"]
|
14
|
+
returns(first_interface_id) { @server.mapping_identity }
|
19
15
|
end
|
16
|
+
|
17
|
+
@server.destroy
|
20
18
|
end
|
21
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-maestrodev
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.18.0.
|
4
|
+
version: 1.18.0.20131127194823
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- geemus (Wesley Beary)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
@@ -2194,6 +2194,8 @@ files:
|
|
2194
2194
|
- lib/fog/google/models/compute/flavors.rb
|
2195
2195
|
- lib/fog/google/models/compute/image.rb
|
2196
2196
|
- lib/fog/google/models/compute/images.rb
|
2197
|
+
- lib/fog/google/models/compute/operation.rb
|
2198
|
+
- lib/fog/google/models/compute/operations.rb
|
2197
2199
|
- lib/fog/google/models/compute/server.rb
|
2198
2200
|
- lib/fog/google/models/compute/servers.rb
|
2199
2201
|
- lib/fog/google/models/compute/snapshot.rb
|
@@ -2214,18 +2216,21 @@ files:
|
|
2214
2216
|
- lib/fog/google/parsers/storage/get_service.rb
|
2215
2217
|
- lib/fog/google/requests/compute/delete_disk.rb
|
2216
2218
|
- lib/fog/google/requests/compute/delete_firewall.rb
|
2219
|
+
- lib/fog/google/requests/compute/delete_global_operation.rb
|
2217
2220
|
- lib/fog/google/requests/compute/delete_image.rb
|
2218
2221
|
- lib/fog/google/requests/compute/delete_network.rb
|
2219
|
-
- lib/fog/google/requests/compute/delete_operation.rb
|
2220
2222
|
- lib/fog/google/requests/compute/delete_server.rb
|
2223
|
+
- lib/fog/google/requests/compute/delete_zone_operation.rb
|
2221
2224
|
- lib/fog/google/requests/compute/get_disk.rb
|
2222
2225
|
- lib/fog/google/requests/compute/get_firewall.rb
|
2226
|
+
- lib/fog/google/requests/compute/get_global_operation.rb
|
2223
2227
|
- lib/fog/google/requests/compute/get_image.rb
|
2224
2228
|
- lib/fog/google/requests/compute/get_machine_type.rb
|
2225
2229
|
- lib/fog/google/requests/compute/get_network.rb
|
2226
2230
|
- lib/fog/google/requests/compute/get_server.rb
|
2227
2231
|
- lib/fog/google/requests/compute/get_snapshot.rb
|
2228
2232
|
- lib/fog/google/requests/compute/get_zone.rb
|
2233
|
+
- lib/fog/google/requests/compute/get_zone_operation.rb
|
2229
2234
|
- lib/fog/google/requests/compute/insert_disk.rb
|
2230
2235
|
- lib/fog/google/requests/compute/insert_firewall.rb
|
2231
2236
|
- lib/fog/google/requests/compute/insert_image.rb
|