marathon_deploy 0.1.45 → 0.1.46

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODg4ZmU2NTEyZDJhMGQwNDY3YjlhNGU1YTI0ZWUxNGQxNGMyYzk3Mw==
4
+ YjMyZWMxN2MyZDhlYjUzNTUwMWI5NTU3Y2Q3OTFlNDJjMDk3NDY0NA==
5
5
  data.tar.gz: !binary |-
6
- OGNkZmYxZjNkM2E4MmNkMDdiYmViYjQ5ZmY3MTE1YTY1MjIyMzg0Yw==
6
+ OWFlYjI5NTgwOGY4YjBhNThkZWM2NDdjMDE1OGFmZDkxOGU2NjA4NA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YjFiODcwZjlhMjllOTYwMWVkNmRjYmZkNzQwYmQ5YWFiNDI2YTcyZTg5MjZk
10
- MjBlMjgwMjRiNjI5MTYyNDA1YWQ1ZjA3OTA0ZWIzOGRmNThhZjYwZTlhNzEx
11
- OTI2Y2RhYWRhN2M4OWM0ZTBmMTNlNWFlN2RjMjIzMDIyOTI0MmM=
9
+ MWUyMjE2NDQxNTNmN2M1MDgyYmQzNmMzNjVhMjg4ZDFkOGQ2ODlmMjBhMjhk
10
+ MWVjZjdkMGIwZjJkMmY0MzIzYjg1ZTY0MjM4ZGUxZDBjYjk3Zjc3NzJmMjEz
11
+ YTFkZWE4MWU4YTFiNDU4NjU2NGQ1NTAzZWE1ZmE5OWNhYjYxMjk=
12
12
  data.tar.gz: !binary |-
13
- MzU3ZjdlYTIzZDUwNTNhMjQ5ZDcwYzczMGRmZjZhNWFjMGVkNGEyMTA4ZmU1
14
- MmRmOGM1NjQ5ZmViZGFjZjI4OTJmNmMzOGJkZTZmMjBkMzA5MjVkMWRmYzA0
15
- ZDAwNDI3YTBjY2VjYTZlOGY4ZDgwNTRkMzljOWEzZmRmMjBlNTc=
13
+ NjJjOWJmMTk0YzcyMzNlMDYzYjBjMDk5NWM4MWMzNGJjNzhiYjg4YWRhNzUz
14
+ OWQ1MzQ4MzQxMTRjMTQyMzNlZTZlZTRiMDllOWExYmY3Y2U1MzQ0ZDNlNTEx
15
+ MWI4NTA2NGNmMzYyYTQxYzk3N2E3MGRjYzc4ZTQ3MWJlYjM2MDc=
@@ -60,7 +60,7 @@ module MarathonDeploy
60
60
  elapsedTime = '%.2f' % (Time.now - startTime)
61
61
  $LOG.info("Deployment with deploymentId #{@deploymentId} ended (Total deployment time #{elapsedTime}s)")
62
62
  end
63
- end
63
+ end
64
64
  end
65
65
 
66
66
  def wait_for_application(message = "Deployment of application #{@application.id} in progress")
@@ -102,7 +102,7 @@ module MarathonDeploy
102
102
  $LOG.debug("Healthy instances running: " + healthy.join(','))
103
103
  break
104
104
  else
105
- $LOG.info("#{healthy.size} healthy instances seen, #{@application.instances} healthy instances expected, retrying in in #{HEALTHY_WAIT_RECHECK_INTERVAL}s")
105
+ $LOG.info("#{healthy.size} healthy instances seen, #{@application.instances} healthy instances expected, retrying in #{HEALTHY_WAIT_RECHECK_INTERVAL}s")
106
106
  end
107
107
  end
108
108
  sleep(HEALTHY_WAIT_RECHECK_INTERVAL)
@@ -136,11 +136,10 @@ module MarathonDeploy
136
136
  def update_app(force=false)
137
137
  url = @url + MarathonDefaults::MARATHON_APPS_REST_PATH + @application.id
138
138
  url += force ? '?force=true' : ''
139
- $LOG.debug("Updating app #{@application.id} #{url}")
139
+ $LOG.debug("Updating app #{@application.id} #{url}")
140
140
  response = HttpUtil.put(url,@application.json)
141
141
  @deploymentId = Utils.response_body(response)[:deploymentId]
142
142
  return response
143
-
144
143
  end
145
144
 
146
145
  def rolling_restart
@@ -163,20 +162,14 @@ module MarathonDeploy
163
162
  # returns an array of taskIds which are alive
164
163
  def get_alive(value)
165
164
  raise ArgumentError, "value must be boolean true or false" unless (!!value == value)
166
- state = Array.new
167
165
  if (health_checks_defined?)
168
166
  apps = Array.new
169
-
170
- 5.times { |i|
171
- i+=1
172
- response = list_app
173
- response_body = Utils.response_body(response)
174
- apps = response_body[:app]
175
- break unless apps.nil?
176
- $LOG.info "Application #{@application.id} is not yet registered with Marathon. Waiting #{i} seconds then retrying ..."
177
- sleep i
178
- }
179
-
167
+ begin
168
+ apps = Utils.getValue(@url,@application,:app)
169
+ rescue Exception=>e
170
+ $LOG.info "EXCEPTION: #{e} Cannot determine apps"
171
+ end
172
+
180
173
  if (apps.nil? or apps.empty?)
181
174
  raise Error::DeploymentError, "Marathon API returned an empty app or nil json object for application #{@application.id}", caller
182
175
  else
@@ -208,25 +201,32 @@ module MarathonDeploy
208
201
  end
209
202
  return task_ids
210
203
  end
211
-
204
+
212
205
  def get_task_ids
213
- response = list_app
214
- response_body = Utils.response_body(response)
215
- return response_body[:app][:tasks].collect { |task| task[:id]}
206
+ begin
207
+ a = Utils.getValue(@url,@application,:app,:tasks).collect { |task| task[:id]}
208
+ return a
209
+ rescue Exception=>e
210
+ $LOG.info "EXCEPTION: #{e} Cannot determine task_ids"
211
+ end
216
212
  end
217
-
213
+
218
214
  def get_healthcheck_results
219
- response = list_app
220
- response_body = Utils.response_body(response)
221
- #puts JSON.pretty_generate(response_body)
222
- return response_body[:app][:tasks].collect { |task| task[:healthCheckResults]}
215
+ begin
216
+ a = Utils.getValue(@url,@application,:app,:tasks).collect { |task| task[:healthCheckResults]}
217
+ return a
218
+ rescue Exception=>e
219
+ $LOG.info "EXCEPTION: #{e} Cannot determine healthcheck_result"
220
+ end
223
221
  end
224
222
 
225
223
  def get_deployment_id
226
- response = list_app
227
- payload = Utils.response_body(response)
228
- return payload[:app][:deployments].first[:id] unless (payload[:app].nil?)
229
- return nil
224
+ begin
225
+ a = Utils.getValue(@url,@application,:app,:deployments,0)[:id]
226
+ return a
227
+ rescue Exception=>e
228
+ $LOG.info "EXCEPTION: #{e} Cannot determine deployment_id"
229
+ end
230
230
  end
231
231
 
232
232
  def list_all
@@ -299,4 +299,4 @@ module MarathonDeploy
299
299
  end
300
300
 
301
301
  end
302
- end
302
+ end
@@ -5,15 +5,22 @@ require 'marathon_deploy/error'
5
5
  module MarathonDeploy
6
6
  module HttpUtil
7
7
 
8
+ @@o_timeout = 60.0
9
+ @@r_timeout = 60.0
10
+ @@og_timeout = 60.0
11
+ @@rg_timeout = 60.0
12
+
8
13
  def self.put(url,payload)
9
14
  uri = construct_uri url
10
15
  begin
11
16
  http = Net::HTTP.new(uri.host, uri.port)
17
+ http.open_timeout = @@o_timeout
18
+ http.read_timeout = @@r_timeout
12
19
  req = Net::HTTP::Put.new(uri.request_uri)
13
20
  req.body = payload.to_json
14
21
  req["Content-Type"] = "application/json"
15
22
  response = http.request(req)
16
- rescue Errno::ECONNREFUSED => e
23
+ rescue Exception => e
17
24
  $LOG.error("Error calling marathon api: #{e.message}")
18
25
  exit!
19
26
  end
@@ -24,11 +31,13 @@ module MarathonDeploy
24
31
  uri = construct_uri url
25
32
  begin
26
33
  http = Net::HTTP.new(uri.host, uri.port)
34
+ http.open_timeout = @@o_timeout
35
+ http.read_timeout = @@r_timeout
27
36
  req = Net::HTTP::Post.new(uri.request_uri)
28
37
  req.body = payload.to_json
29
38
  req["Content-Type"] = "application/json"
30
39
  response = http.request(req)
31
- rescue Errno::ECONNREFUSED => e
40
+ rescue Exception => e
32
41
  message = "Error calling marathon api: #{e.message}"
33
42
  $LOG.error(message)
34
43
  raise Error::MarathonError, message, caller
@@ -45,9 +54,11 @@ module MarathonDeploy
45
54
  uri = construct_uri url
46
55
  begin
47
56
  http = Net::HTTP.new(uri.host, uri.port)
57
+ http.open_timeout = @@o_timeout
58
+ http.read_timeout = @@r_timeout
48
59
  req = Net::HTTP::Delete.new(uri.request_uri)
49
60
  response = http.request(req)
50
- rescue Errno::ECONNREFUSED => e
61
+ rescue Exception => e
51
62
  message = "Error calling marathon api: #{e.message}"
52
63
  $LOG.error(message)
53
64
  raise Error::MarathonError, message, caller
@@ -62,11 +73,14 @@ module MarathonDeploy
62
73
  def self.get(url)
63
74
  uri = construct_uri url
64
75
  begin
65
- http = Net::HTTP.new(uri.host, uri.port)
66
- req = Net::HTTP::Get.new(uri.request_uri)
67
- req["Content-Type"] = "application/json"
68
- response = http.request(req)
69
- rescue Errno::ECONNREFUSED => e
76
+ http = Net::HTTP.new(uri.host, uri.port)
77
+ http.open_timeout = @@og_timeout
78
+ http.read_timeout = @@rg_timeout
79
+ # http.set_debug_output($stdout)
80
+ req = Net::HTTP::Get.new(uri.request_uri)
81
+ req["Content-Type"] = "application/json"
82
+ response = http.request(req)
83
+ rescue Exception => e
70
84
  message = "Error calling marathon api: #{e.message}"
71
85
  $LOG.error(message)
72
86
  raise Error::MarathonError, message, caller
@@ -90,4 +104,4 @@ module MarathonDeploy
90
104
  end
91
105
 
92
106
  end
93
- end
107
+ end
@@ -78,4 +78,4 @@ module MarathonDeploy
78
78
  end
79
79
 
80
80
  end
81
- end
81
+ end
@@ -1,3 +1,5 @@
1
+ require 'marathon_deploy/marathon_defaults'
2
+
1
3
  module MarathonDeploy
2
4
  module Utils
3
5
 
@@ -23,11 +25,34 @@ module MarathonDeploy
23
25
  end
24
26
 
25
27
  def self.response_body(response)
26
- if (response.is_a?(Net::HTTPResponse) && !response.body.nil?)
27
- return deep_symbolize((JSON.parse(response.body)))
28
+ if (!response.body.nil? && !response.body.empty? && response.kind_of?(Net::HTTPSuccess))
29
+ begin
30
+ return deep_symbolize((JSON.parse(response.body)))
31
+ rescue Exception=>e
32
+ $LOG.info "EXCEPTION: #{e} Cannot parse JSON"
33
+ end
28
34
  end
29
35
  return nil
30
36
  end
31
-
37
+
38
+ def self.getValue(url,application,*keys)
39
+ value = nil
40
+ 5.times { |i|
41
+ i+=1
42
+ model = response_body(HttpUtil.get(url + MarathonDefaults::MARATHON_APPS_REST_PATH + application.id))
43
+ value = lookup(model, *keys) if (!model.nil? and !model.empty?)
44
+ break if (!value.nil? and !value.empty?)
45
+ $LOG.info "Application #{application.id} is not yet registered with Marathon. Waiting #{i} seconds then retrying ..."
46
+ sleep i
47
+ }
48
+ value
49
+ end
50
+
51
+ def self.lookup(model, key, *rest)
52
+ v = model[key]
53
+ return v if rest.empty?
54
+ v && lookup(v, *rest)
55
+ end
56
+
32
57
  end
33
- end
58
+ end
@@ -1,3 +1,3 @@
1
1
  module MarathonDeploy
2
- VERSION = "0.1.45"
2
+ VERSION = "0.1.46"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marathon_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.45
4
+ version: 0.1.46
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Colby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-01 00:00:00.000000000 Z
11
+ date: 2015-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger