marathon_deploy 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/simple-python-example.yaml +32 -0
- data/lib/marathon_deploy/application.rb +1 -1
- data/lib/marathon_deploy/deployment.rb +30 -14
- data/lib/marathon_deploy/macro.rb +1 -1
- data/lib/marathon_deploy/marathon_defaults.rb +1 -1
- data/lib/marathon_deploy/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35b3f25c8764a73dd299377a082c1bf279574ba3
|
4
|
+
data.tar.gz: f8db464c0a0165b0f16de1bda5c170b07c069e60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77cdd112a5424d33c3188391194ae099090ed7bd15b6a3e97ccdf20d0b42517491b5342a51ddba7288b481413e319b84a281c45277b244f822ce1c182990c7a9
|
7
|
+
data.tar.gz: cbee096acc67009a5b7183fc2eeb7a04890c94f54f09e1f715f43b47e27496f621132d0f8b1d37b60a33d38e0ad3280c2bbd3627ffccd2b232e921ce4984d4fe
|
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
id: python-example-stable
|
3
|
+
cmd: echo python stable `hostname` > index.html; python3 -m http.server 8080
|
4
|
+
mem: 16
|
5
|
+
cpus: 0.1
|
6
|
+
instances: 5
|
7
|
+
container:
|
8
|
+
type: DOCKER
|
9
|
+
docker:
|
10
|
+
image: ubuntu:14.04
|
11
|
+
network: BRIDGE
|
12
|
+
portMappings:
|
13
|
+
- containerPort: 8080
|
14
|
+
hostPort: 0
|
15
|
+
protocol: tcp
|
16
|
+
env:
|
17
|
+
SERVICE_TAGS: python,webapp,http,weight=100
|
18
|
+
SERVICE_NAME: python
|
19
|
+
healthChecks:
|
20
|
+
- portIndex: 0
|
21
|
+
protocol: TCP
|
22
|
+
gracePeriodSeconds: 30
|
23
|
+
intervalSeconds: 10
|
24
|
+
timeoutSeconds: 30
|
25
|
+
maxConsecutiveFailures: 3
|
26
|
+
- path: "/"
|
27
|
+
portIndex: 0
|
28
|
+
protocol: HTTP
|
29
|
+
gracePeriodSeconds: 30
|
30
|
+
intervalSeconds: 10
|
31
|
+
timeoutSeconds: 30
|
32
|
+
maxConsecutiveFailures: 3
|
@@ -22,7 +22,7 @@ module MarathonDeploy
|
|
22
22
|
case extension
|
23
23
|
when '.json'
|
24
24
|
@json = YamlJson.read_json(deployfile)
|
25
|
-
when '.yaml'
|
25
|
+
when '.yaml','.yml'
|
26
26
|
@json = YamlJson.yaml2json(deployfile)
|
27
27
|
else
|
28
28
|
message = "File extension #{extension} is not supported for deployment file #{deployfile}"
|
@@ -89,13 +89,13 @@ module MarathonDeploy
|
|
89
89
|
Timeout::timeout(HEALTHY_WAIT_TIMEOUT) do
|
90
90
|
loop do
|
91
91
|
break if (!health_checks_defined?)
|
92
|
-
sick = get_alive(
|
92
|
+
sick = get_alive(false)
|
93
93
|
elapsedTime = '%.2f' % (Time.now - startTime)
|
94
94
|
if (!sick.empty?)
|
95
95
|
$LOG.info("#{sick.size}/#{@application.instances} instances are not healthy, retrying in #{HEALTHY_WAIT_RECHECK_INTERVAL}s (elapsed time #{elapsedTime}s)")
|
96
96
|
$LOG.debug("Sick instances: " + sick.join(','))
|
97
|
-
else
|
98
|
-
healthy = get_alive(
|
97
|
+
else
|
98
|
+
healthy = get_alive(true)
|
99
99
|
if (healthy.size == @application.instances)
|
100
100
|
elapsedTime = '%.2f' % (Time.now - startTime)
|
101
101
|
$LOG.info("#{healthy.size} of #{@application.instances} expected instances are healthy (Total health-check time #{elapsedTime}s).")
|
@@ -160,28 +160,43 @@ module MarathonDeploy
|
|
160
160
|
####### PRIVATE METHODS ##########
|
161
161
|
private
|
162
162
|
|
163
|
-
|
164
|
-
|
165
|
-
|
163
|
+
# returns an array of taskIds which are alive
|
164
|
+
def get_alive(value)
|
165
|
+
raise ArgumentError, "value must be boolean true or false" unless (!!value == value)
|
166
|
+
state = Array.new
|
166
167
|
if (health_checks_defined?)
|
167
168
|
response = list_app
|
168
169
|
response_body = Utils.response_body(response)
|
169
170
|
if (response_body[:app].empty?)
|
170
171
|
raise Error::DeploymentError, "Marathon returned an empty app json object", caller
|
171
172
|
else
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
if
|
177
|
-
|
178
|
-
|
173
|
+
tasks = Hash.new
|
174
|
+
task_ids = Array.new
|
175
|
+
check_results = get_healthcheck_results.flatten
|
176
|
+
check_results.each do |task|
|
177
|
+
next if task.nil?
|
178
|
+
tasks[task[:taskId].to_s] ||= []
|
179
|
+
tasks[task[:taskId].to_s] << task[:alive]
|
180
|
+
end
|
181
|
+
|
182
|
+
tasks.each do |k,v|
|
183
|
+
if (value)
|
184
|
+
# if there are only alive=true for all healthchecks for this instance
|
185
|
+
if (v.uniq.length == 1 && v.uniq.first == value)
|
186
|
+
task_ids << k
|
187
|
+
end
|
188
|
+
else
|
189
|
+
# if alive=false is seen for any healthchecks for this instance
|
190
|
+
if (v.include?(value))
|
191
|
+
task_ids << k
|
192
|
+
end
|
193
|
+
end
|
179
194
|
end
|
180
195
|
end
|
181
196
|
else
|
182
197
|
$LOG.info("No health checks defined. Cannot determine application health of #{@application.id}.")
|
183
198
|
end
|
184
|
-
return
|
199
|
+
return task_ids
|
185
200
|
end
|
186
201
|
|
187
202
|
def get_task_ids
|
@@ -193,6 +208,7 @@ module MarathonDeploy
|
|
193
208
|
def get_healthcheck_results
|
194
209
|
response = list_app
|
195
210
|
response_body = Utils.response_body(response)
|
211
|
+
#puts JSON.pretty_generate(response_body)
|
196
212
|
return response_body[:app][:tasks].collect { |task| task[:healthCheckResults]}
|
197
213
|
end
|
198
214
|
|
@@ -48,7 +48,7 @@ module MarathonDeploy
|
|
48
48
|
def self.expand_macros(data)
|
49
49
|
processed = ""
|
50
50
|
macros = get_macros(data).uniq
|
51
|
-
$LOG.debug("Macros found in deploy file: #{macros.join(',')}")
|
51
|
+
$LOG.debug("Macros found in deploy file: #{macros.join(',')}") unless (macros.empty?)
|
52
52
|
undefined = get_undefined_macros(macros)
|
53
53
|
if (!undefined.empty?)
|
54
54
|
raise Error::UndefinedMacroError, "Macros found in deploy file without defined environment variables: #{undefined.join(',')}", caller
|
@@ -7,7 +7,7 @@ module MarathonDeploy
|
|
7
7
|
|
8
8
|
DEPLOYMENT_RECHECK_INTERVAL = 3
|
9
9
|
DEPLOYMENT_TIMEOUT = 300
|
10
|
-
HEALTHY_WAIT_TIMEOUT =
|
10
|
+
HEALTHY_WAIT_TIMEOUT = 300
|
11
11
|
HEALTHY_WAIT_RECHECK_INTERVAL = 3
|
12
12
|
PRODUCTION_ENVIRONMENT_NAME = 'PRODUCTION'
|
13
13
|
DEFAULT_ENVIRONMENT_NAME = 'INTEGRATION'
|
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.0.
|
4
|
+
version: 0.0.3
|
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-05-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logger
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- examples/nohealthchecks.yaml
|
92
92
|
- examples/public-search-germany-webapp.pre.json
|
93
93
|
- examples/run.sh
|
94
|
+
- examples/simple-python-example.yaml
|
94
95
|
- examples/testout.json
|
95
96
|
- examples/testout.yaml
|
96
97
|
- input.txt
|
@@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
128
|
version: '0'
|
128
129
|
requirements: []
|
129
130
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.4.
|
131
|
+
rubygems_version: 2.4.6
|
131
132
|
signing_key:
|
132
133
|
specification_version: 4
|
133
134
|
summary: Mesos/Marathon deployment tool.
|