cfoundry 0.3.57 → 0.3.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -0
- data/lib/cfoundry/baseclient.rb +4 -1
- data/lib/cfoundry/errors.rb +167 -68
- data/lib/cfoundry/uaaclient.rb +0 -7
- data/lib/cfoundry/v1/app.rb +5 -1
- data/lib/cfoundry/v1/base.rb +9 -20
- data/lib/cfoundry/v1/client.rb +2 -2
- data/lib/cfoundry/v1/service_instance.rb +1 -1
- data/lib/cfoundry/v1/user.rb +4 -0
- data/lib/cfoundry/v2/app.rb +5 -3
- data/lib/cfoundry/v2/base.rb +9 -17
- data/lib/cfoundry/v2/model.rb +4 -6
- data/lib/cfoundry/v2/organization.rb +2 -0
- data/lib/cfoundry/version.rb +1 -1
- metadata +4 -4
data/Rakefile
CHANGED
data/lib/cfoundry/baseclient.rb
CHANGED
@@ -328,7 +328,10 @@ module CFoundry
|
|
328
328
|
end
|
329
329
|
|
330
330
|
when Net::HTTPNotFound
|
331
|
-
raise CFoundry::NotFound
|
331
|
+
raise CFoundry::NotFound(response.code, response.body)
|
332
|
+
|
333
|
+
when Net::HTTPForbidden
|
334
|
+
raise CFoundry::Denied.new(response.code, response.body)
|
332
335
|
|
333
336
|
else
|
334
337
|
raise CFoundry::BadResponse.new(response.code, response.body)
|
data/lib/cfoundry/errors.rb
CHANGED
@@ -15,39 +15,42 @@ module CFoundry
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
class TargetRefused < Error
|
19
|
+
# Error message.
|
20
|
+
attr_reader :message
|
21
|
+
|
22
|
+
# Message varies as this represents various network errors.
|
23
|
+
def initialize(message)
|
24
|
+
@message = message
|
25
|
+
end
|
26
|
+
|
27
|
+
# Exception message.
|
28
|
+
def to_s
|
29
|
+
"target refused connection (#@message)"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
18
34
|
# Exception representing errors returned by the API.
|
19
35
|
class APIError < RuntimeError
|
20
36
|
class << self
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# Generic description for the exception.
|
25
|
-
attr_reader :description
|
26
|
-
|
27
|
-
private
|
37
|
+
def v2_classes
|
38
|
+
@v2_classes ||= {}
|
39
|
+
end
|
28
40
|
|
29
|
-
def
|
30
|
-
@
|
31
|
-
@description = description
|
41
|
+
def v1_classes
|
42
|
+
@v1_classes ||= {}
|
32
43
|
end
|
33
44
|
end
|
34
45
|
|
46
|
+
attr_reader :error_code, :description
|
47
|
+
|
35
48
|
# Create an APIError with a given error code and description.
|
36
49
|
def initialize(error_code = nil, description = nil)
|
37
50
|
@error_code = error_code
|
38
51
|
@description = description
|
39
52
|
end
|
40
53
|
|
41
|
-
# A number representing the error.
|
42
|
-
def error_code
|
43
|
-
@error_code || self.class.error_code
|
44
|
-
end
|
45
|
-
|
46
|
-
# A description of the error.
|
47
|
-
def description
|
48
|
-
@description || self.class.description
|
49
|
-
end
|
50
|
-
|
51
54
|
# Exception message.
|
52
55
|
def to_s
|
53
56
|
if error_code
|
@@ -58,65 +61,161 @@ module CFoundry
|
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
|
-
|
62
|
-
# getting info of unknown application).
|
63
|
-
class NotFound < APIError
|
64
|
-
setup(404, "entity not found or inaccessible")
|
65
|
-
end
|
64
|
+
class NotFound < APIError; end
|
66
65
|
|
67
|
-
|
68
|
-
class TargetRefused < APIError
|
69
|
-
@description = "target refused connection"
|
66
|
+
class Denied < APIError; end
|
70
67
|
|
71
|
-
|
72
|
-
attr_reader :message
|
68
|
+
class BadResponse < APIError; end
|
73
69
|
|
74
|
-
# Message varies as this represents various network errors.
|
75
|
-
def initialize(message)
|
76
|
-
@message = message
|
77
|
-
end
|
78
70
|
|
79
|
-
|
80
|
-
|
81
|
-
|
71
|
+
def self.define_error(class_name, v2_code, v1_code = nil)
|
72
|
+
base =
|
73
|
+
case class_name
|
74
|
+
when /NotFound$/
|
75
|
+
NotFound
|
76
|
+
else
|
77
|
+
APIError
|
78
|
+
end
|
79
|
+
|
80
|
+
klass = Class.new(base) do
|
81
|
+
define_method(:initialize) do |*args|
|
82
|
+
super
|
83
|
+
end
|
82
84
|
end
|
83
|
-
end
|
84
85
|
|
85
|
-
|
86
|
-
|
87
|
-
|
86
|
+
APIError.v1_classes[v1_code] = klass if v1_code
|
87
|
+
APIError.v2_classes[v2_code] = klass if v2_code
|
88
|
+
|
89
|
+
const_set(class_name, klass)
|
88
90
|
end
|
89
91
|
|
90
|
-
# Exception raised when access is denied to something, either because the
|
91
|
-
# user is not logged in or is not an administrator.
|
92
|
-
class Denied < APIError
|
93
|
-
# Specific error code.
|
94
|
-
attr_reader :error_code
|
95
92
|
|
96
|
-
|
97
|
-
|
93
|
+
[
|
94
|
+
["InvalidAuthToken", 100],
|
98
95
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
description = "Operation not permitted")
|
103
|
-
@error_code = error_code
|
104
|
-
@description = description
|
105
|
-
end
|
106
|
-
end
|
96
|
+
["QuotaDeclined", 1000],
|
97
|
+
["MessageParseError", 1001],
|
98
|
+
["InvalidRelation", 1002],
|
107
99
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
# Initialize, with the HTTP response code and body.
|
112
|
-
def initialize(code, body = nil)
|
113
|
-
@code = code
|
114
|
-
@body = body
|
115
|
-
end
|
100
|
+
["UserInvalid", 20001],
|
101
|
+
["UaaIdTaken", 20002],
|
102
|
+
["UserNotFound", 20003, 201],
|
116
103
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
104
|
+
["OrganizationInvalid", 30001],
|
105
|
+
["OrganizationNameTaken", 30002],
|
106
|
+
["OrganizationNotFound", 30003],
|
107
|
+
|
108
|
+
["SpaceInvalid", 40001],
|
109
|
+
["SpaceNameTaken", 40002],
|
110
|
+
["SpaceUserNotInOrg", 40003],
|
111
|
+
["SpaceNotFound", 40004],
|
112
|
+
|
113
|
+
["ServiceAuthTokenInvalid", 50001],
|
114
|
+
["ServiceAuthTokenLabelTaken", 50002],
|
115
|
+
["ServiceAuthTokenNotFound", 50003],
|
116
|
+
|
117
|
+
["ServiceInstanceNameInvalid", 60001],
|
118
|
+
["ServiceInstanceNameTaken", 60002],
|
119
|
+
["ServiceInstanceServiceBindingWrongSpace", 60003],
|
120
|
+
["ServiceInstanceInvalid", 60003],
|
121
|
+
["ServiceInstanceNotFound", 60004],
|
122
|
+
|
123
|
+
["RuntimeInvalid", 70001],
|
124
|
+
["RuntimeNameTaken", 70002],
|
125
|
+
["RuntimeNotFound", 70003],
|
126
|
+
|
127
|
+
["FrameworkInvalid", 80001],
|
128
|
+
["FrameworkNameTaken", 80002],
|
129
|
+
["FrameworkNotFound", 80003],
|
130
|
+
|
131
|
+
["ServiceBindingInvalid", 90001],
|
132
|
+
["ServiceBindingDifferentSpaces", 90002],
|
133
|
+
["ServiceBindingAppServiceTaken", 90003],
|
134
|
+
["ServiceBindingNotFound", 90004],
|
135
|
+
|
136
|
+
["AppInvalid", 100001, 300],
|
137
|
+
["AppNameTaken", 100002],
|
138
|
+
["AppNotFound", 100004, 301],
|
139
|
+
|
140
|
+
["ServicePlanInvalid", 110001],
|
141
|
+
["ServicePlanNameTaken", 110002],
|
142
|
+
["ServicePlanNotFound", 110003],
|
143
|
+
|
144
|
+
["ServiceInvalid", 120001],
|
145
|
+
["ServiceLabelTaken", 120002],
|
146
|
+
["ServiceNotFound", 120003, 500],
|
147
|
+
|
148
|
+
["DomainInvalid", 130001],
|
149
|
+
["DomainNotFound", 130002],
|
150
|
+
["DomainNameTaken", 130003],
|
151
|
+
|
152
|
+
["LegacyApiWithoutDefaultSpace", 140001],
|
153
|
+
|
154
|
+
["AppPackageInvalid", 150001],
|
155
|
+
["AppPackageNotFound", 150002],
|
156
|
+
|
157
|
+
["AppBitsUploadInvalid", 160001],
|
158
|
+
|
159
|
+
["StagingError", 170001],
|
160
|
+
|
161
|
+
["SnapshotNotFound", 180001],
|
162
|
+
["ServiceGatewayError", 180002, 503],
|
163
|
+
["ServiceNotImplemented", 180003],
|
164
|
+
["SDSNotAvailable", 180004],
|
165
|
+
|
166
|
+
["FileError", 190001],
|
167
|
+
|
168
|
+
["StatsError", 200001],
|
169
|
+
|
170
|
+
["RouteInvalid", 210001],
|
171
|
+
["RouteNotFound", 210002],
|
172
|
+
["RouteHostTaken", 210003],
|
173
|
+
|
174
|
+
["InstancesError", 220001],
|
175
|
+
|
176
|
+
["BillingEventQueryInvalid", 230001],
|
177
|
+
|
178
|
+
# V1 Errors
|
179
|
+
["BadRequest", nil, 100],
|
180
|
+
["DatabaseError", nil, 101],
|
181
|
+
["LockingError", nil, 102],
|
182
|
+
["SystemError", nil, 111],
|
183
|
+
|
184
|
+
["Forbidden", nil, 200],
|
185
|
+
["HttpsRequired", nil, 202],
|
186
|
+
|
187
|
+
["AppNoResources", nil, 302],
|
188
|
+
["AppFileNotFound", nil, 303],
|
189
|
+
["AppInstanceNotFound", nil, 304],
|
190
|
+
["AppStopped", nil, 305],
|
191
|
+
["AppFileError", nil, 306],
|
192
|
+
["AppInvalidRuntime", nil, 307],
|
193
|
+
["AppInvalidFramework", nil, 308],
|
194
|
+
["AppDebugDisallowed", nil, 309],
|
195
|
+
["AppStagingError", nil, 310],
|
196
|
+
|
197
|
+
["ResourcesUnknownPackageType", nil, 400],
|
198
|
+
["ResourcesMissingResource", nil, 401],
|
199
|
+
["ResourcesPackagingFailed", nil, 402],
|
200
|
+
|
201
|
+
["BindingNotFound", nil, 501],
|
202
|
+
["TokenNotFound", nil, 502],
|
203
|
+
["AccountTooManyServices", nil, 504],
|
204
|
+
["ExtensionNotImpl", nil, 505],
|
205
|
+
["UnsupportedVersion", nil, 506],
|
206
|
+
["SdsError", nil, 507],
|
207
|
+
["SdsNotFound", nil, 508],
|
208
|
+
|
209
|
+
["AccountNotEnoughMemory", nil, 600],
|
210
|
+
["AccountAppsTooMany", nil, 601],
|
211
|
+
["AccountAppTooManyUris", nil, 602],
|
212
|
+
|
213
|
+
["UriInvalid", nil, 700],
|
214
|
+
["UriAlreadyTaken", nil, 701],
|
215
|
+
["UriNotAllowed", nil, 702],
|
216
|
+
["StagingTimedOut", nil, 800],
|
217
|
+
["StagingFailed", nil, 801]
|
218
|
+
].each do |args|
|
219
|
+
define_error(*args)
|
121
220
|
end
|
122
221
|
end
|
data/lib/cfoundry/uaaclient.rb
CHANGED
@@ -85,13 +85,6 @@ module CFoundry
|
|
85
85
|
info = parse_json(response.body)
|
86
86
|
raise CFoundry::Denied.new(response.code, info[:message])
|
87
87
|
|
88
|
-
when Net::HTTPServerError
|
89
|
-
begin
|
90
|
-
raise_error(parse_json(response.body))
|
91
|
-
rescue MultiJson::DecodeError
|
92
|
-
raise BadResponse.new(response.code, response.body)
|
93
|
-
end
|
94
|
-
|
95
88
|
else
|
96
89
|
raise BadResponse.new(response.code, response.body)
|
97
90
|
end
|
data/lib/cfoundry/v1/app.rb
CHANGED
@@ -96,11 +96,15 @@ module CFoundry::V1
|
|
96
96
|
@diff = {}
|
97
97
|
end
|
98
98
|
|
99
|
+
def invalidate!
|
100
|
+
@manifest = nil
|
101
|
+
end
|
102
|
+
|
99
103
|
# Check if the application exists on the target.
|
100
104
|
def exists?
|
101
105
|
@client.base.app(@name)
|
102
106
|
true
|
103
|
-
rescue CFoundry::
|
107
|
+
rescue CFoundry::AppNotFound
|
104
108
|
false
|
105
109
|
end
|
106
110
|
|
data/lib/cfoundry/v1/base.rb
CHANGED
@@ -169,31 +169,20 @@ module CFoundry::V1
|
|
169
169
|
response.body
|
170
170
|
end
|
171
171
|
|
172
|
-
when Net::HTTPBadRequest, Net::HTTPForbidden
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
when Net::HTTPNotFound
|
177
|
-
raise CFoundry::NotFound
|
178
|
-
|
179
|
-
when Net::HTTPServerError
|
172
|
+
when Net::HTTPBadRequest, Net::HTTPForbidden, Net::HTTPNotFound,
|
173
|
+
Net::HTTPInternalServerError, Net::HTTPNotImplemented,
|
174
|
+
Net::HTTPBadGateWay
|
180
175
|
begin
|
181
|
-
|
176
|
+
info = parse_json(response.body)
|
177
|
+
cls = CFoundry::APIError.v1_classes[info[:code]]
|
178
|
+
|
179
|
+
raise (cls || CFoundry::APIError).new(info[:code], info[:description])
|
182
180
|
rescue MultiJson::DecodeError
|
183
|
-
|
181
|
+
super
|
184
182
|
end
|
185
183
|
|
186
184
|
else
|
187
|
-
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
def raise_error(info)
|
192
|
-
case info[:code]
|
193
|
-
when 402
|
194
|
-
raise CFoundry::UploadFailed.new(info[:description])
|
195
|
-
else
|
196
|
-
raise CFoundry::APIError.new(info[:code], info[:description])
|
185
|
+
super
|
197
186
|
end
|
198
187
|
end
|
199
188
|
end
|
data/lib/cfoundry/v1/client.rb
CHANGED
@@ -136,8 +136,8 @@ module CFoundry::V1
|
|
136
136
|
frameworks = []
|
137
137
|
fs.each do |name, meta|
|
138
138
|
runtimes = meta[:runtimes].collect do |r|
|
139
|
-
Runtime.new(r[:name], r[:description], nil,
|
140
|
-
|
139
|
+
Runtime.new(r[:name], r[:description], nil, r[:version],
|
140
|
+
r[:status], r[:series], r[:category])
|
141
141
|
end
|
142
142
|
|
143
143
|
frameworks <<
|
data/lib/cfoundry/v1/user.rb
CHANGED
data/lib/cfoundry/v2/app.rb
CHANGED
@@ -180,12 +180,14 @@ module CFoundry::V2
|
|
180
180
|
|
181
181
|
# Stop the application.
|
182
182
|
def stop!
|
183
|
-
|
183
|
+
self.state = "STOPPED"
|
184
|
+
update!
|
184
185
|
end
|
185
186
|
|
186
187
|
# Start the application.
|
187
188
|
def start!
|
188
|
-
|
189
|
+
self.state = "STARTED"
|
190
|
+
update!
|
189
191
|
end
|
190
192
|
|
191
193
|
# Restart the application.
|
@@ -235,7 +237,7 @@ module CFoundry::V2
|
|
235
237
|
# Check that all application instances are running.
|
236
238
|
def healthy?
|
237
239
|
# invalidate cache so the check is fresh
|
238
|
-
|
240
|
+
invalidate!
|
239
241
|
health == "RUNNING"
|
240
242
|
end
|
241
243
|
alias_method :running?, :healthy?
|
data/lib/cfoundry/v2/base.rb
CHANGED
@@ -59,7 +59,7 @@ module CFoundry::V2
|
|
59
59
|
end
|
60
60
|
|
61
61
|
define_method(:"delete_#{obj}") do |guid|
|
62
|
-
delete("v2", plural, guid
|
62
|
+
delete("v2", plural, guid)
|
63
63
|
true
|
64
64
|
end
|
65
65
|
|
@@ -131,7 +131,7 @@ module CFoundry::V2
|
|
131
131
|
payload = paginated[:resources]
|
132
132
|
|
133
133
|
while next_page = paginated[:next_url]
|
134
|
-
paginated = request_path(
|
134
|
+
paginated = request_path(Net::HTTP::Get, next_page, :accept => :json)
|
135
135
|
payload += paginated[:resources]
|
136
136
|
end
|
137
137
|
|
@@ -159,27 +159,19 @@ module CFoundry::V2
|
|
159
159
|
response.body
|
160
160
|
end
|
161
161
|
|
162
|
-
when Net::HTTPBadRequest
|
163
|
-
|
164
|
-
raise CFoundry::APIError.new(info[:code], info[:description])
|
165
|
-
|
166
|
-
when Net::HTTPUnauthorized, Net::HTTPForbidden
|
167
|
-
info = parse_json(response.body)
|
168
|
-
raise CFoundry::Denied.new(info[:code], info[:description])
|
169
|
-
|
170
|
-
when Net::HTTPNotFound
|
171
|
-
raise CFoundry::NotFound
|
172
|
-
|
173
|
-
when Net::HTTPServerError
|
162
|
+
when Net::HTTPBadRequest, Net::HTTPUnauthorized, Net::HTTPNotFound,
|
163
|
+
Net::HTTPNotImplemented, Net::HTTPServiceUnavailable
|
174
164
|
begin
|
175
165
|
info = parse_json(response.body)
|
176
|
-
|
166
|
+
cls = CFoundry::APIError.v2_classes[info[:code]]
|
167
|
+
|
168
|
+
raise (cls || CFoundry::APIError).new(info[:code], info[:description])
|
177
169
|
rescue MultiJson::DecodeError
|
178
|
-
|
170
|
+
super
|
179
171
|
end
|
180
172
|
|
181
173
|
else
|
182
|
-
|
174
|
+
super
|
183
175
|
end
|
184
176
|
end
|
185
177
|
|
data/lib/cfoundry/v2/model.rb
CHANGED
@@ -343,12 +343,10 @@ module CFoundry::V2
|
|
343
343
|
true
|
344
344
|
end
|
345
345
|
|
346
|
-
def update!
|
347
|
-
|
346
|
+
def update!
|
347
|
+
@manifest = @client.base.send(:"update_#{object_name}", @guid, @diff)
|
348
348
|
|
349
|
-
@
|
350
|
-
|
351
|
-
@diff.clear if diff == @diff
|
349
|
+
@diff.clear
|
352
350
|
|
353
351
|
true
|
354
352
|
end
|
@@ -370,7 +368,7 @@ module CFoundry::V2
|
|
370
368
|
def exists?
|
371
369
|
@client.base.send(object_name, @guid)
|
372
370
|
true
|
373
|
-
rescue CFoundry::
|
371
|
+
rescue CFoundry::NotFound
|
374
372
|
false
|
375
373
|
end
|
376
374
|
|
data/lib/cfoundry/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfoundry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 103
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 58
|
10
|
+
version: 0.3.58
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alex Suraci
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-11-
|
18
|
+
date: 2012-11-13 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|