scaltainer 0.1.3 → 0.1.4
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 +4 -4
- data/README.md +58 -1
- data/exe/scaltainer +2 -2
- data/lib/scaltainer/command.rb +5 -2
- data/lib/scaltainer/runner.rb +15 -5
- data/lib/scaltainer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ff62795b21afacc40d04790673b5695f0ef86cb
|
4
|
+
data.tar.gz: bc4946701f80b23c6b16976518f546fd41cc278c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24760c131990d3e4a7401d1ddaae1240340fb3be1df55f21ef759dc4a90fdf615864b7b4aefd763822e30f0904fe0fd2de89b386716db841fbc5723e095ea297
|
7
|
+
data.tar.gz: 157ffea30dace9c2426ebc6c7014ed2b645824be62d540eef3e72a3d68b07842a1cc132c0e62f74de39c65ddc239a845844a1bac9241041030008cf52c91294e
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
[](https://travis-ci.org/hammady/scaltainer)
|
2
2
|
[](https://coveralls.io/github/hammady/scaltainer?branch=master)
|
3
|
+
[](https://badge.fury.io/rb/scaltainer)
|
3
4
|
|
4
5
|
# Scaltainer
|
5
6
|
|
@@ -41,7 +42,12 @@ Example:
|
|
41
42
|
|
42
43
|
scaltainer -f /path/to/configuration/file.yml --state-file /path/to/different/state/file.yml
|
43
44
|
|
44
|
-
Typically
|
45
|
+
Typically one would want to repeatedly call scaltainer every minute or so. To do this
|
46
|
+
specify the wait time between repetitions using the `-w` parameter in seconds:
|
47
|
+
|
48
|
+
scaltainer -w 60
|
49
|
+
|
50
|
+
This will repeatedly call scaltainer every 60 seconds, sleeping in between.
|
45
51
|
|
46
52
|
## Configuration
|
47
53
|
|
@@ -120,6 +126,57 @@ The configuration file (determined by `-f FILE` command line parameter) should b
|
|
120
126
|
|
121
127
|
More details about configuration parameters can be found in [HireFire docs](https://help.hirefire.io/guides).
|
122
128
|
|
129
|
+
## Docker installation and usage
|
130
|
+
|
131
|
+
Scaltainer is availabe on Docker Hub, so you can `docker run` it:
|
132
|
+
|
133
|
+
docker run -it --rm rayyanqcri/scaltainer
|
134
|
+
|
135
|
+
Which will print the usage. To add arguments, just append them:
|
136
|
+
|
137
|
+
docker run -it --rm rayyanqcri/scaltainer -f scaltainer.yml
|
138
|
+
|
139
|
+
Scaltainer should typically be run as a minutely cron service.
|
140
|
+
If you are using [rayyanqcri/swarm-scheduler](https://github.com/rayyanqcri/swarm-scheduler),
|
141
|
+
a service definition for scaltainer is typically something like this:
|
142
|
+
|
143
|
+
version: '3.3'
|
144
|
+
services:
|
145
|
+
scaltainer:
|
146
|
+
image: rayyanqcri/scaltainer:latest
|
147
|
+
command: -f /scaltainer.yml --state-file /tmp/scaltainer-state.yml
|
148
|
+
volumes:
|
149
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
150
|
+
environment:
|
151
|
+
- DOCKER_URL=unix:///var/run/docker.sock
|
152
|
+
- DOCKER_SECRETS_PATH_GLOB={/run/secrets/*}
|
153
|
+
- RESPONSE_TIME_WINDOW=3
|
154
|
+
configs:
|
155
|
+
- source: scaltainer
|
156
|
+
target: /scaltainer.yml
|
157
|
+
secrets:
|
158
|
+
- scaltainer
|
159
|
+
deploy:
|
160
|
+
replicas: 0
|
161
|
+
restart_policy:
|
162
|
+
condition: none
|
163
|
+
placement:
|
164
|
+
constraints:
|
165
|
+
- node.role == manager
|
166
|
+
configs:
|
167
|
+
scaltainer:
|
168
|
+
file: scaltainer.yml
|
169
|
+
secrets:
|
170
|
+
scaltainer:
|
171
|
+
file: scaltainer.env
|
172
|
+
|
173
|
+
Where `scaltainer.env` is a file containing HireFire and NewRelic secrets:
|
174
|
+
|
175
|
+
HIREFIRE_TOKEN=
|
176
|
+
NEW_RELIC_API_KEY=
|
177
|
+
|
178
|
+
And `scaltainer.yml` is the scaltainer configuration file.
|
179
|
+
|
123
180
|
## Development
|
124
181
|
|
125
182
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/exe/scaltainer
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'scaltainer'
|
4
4
|
|
5
5
|
begin
|
6
|
-
configfile, statefile, logger = Scaltainer::Command.parse ARGV
|
7
|
-
Scaltainer::Runner.new configfile, statefile, logger
|
6
|
+
configfile, statefile, logger, wait = Scaltainer::Command.parse ARGV
|
7
|
+
Scaltainer::Runner.new configfile, statefile, logger, wait
|
8
8
|
rescue => e
|
9
9
|
$stderr.puts e.message
|
10
10
|
$stderr.puts e.backtrace
|
data/lib/scaltainer/command.rb
CHANGED
@@ -4,7 +4,7 @@ require "optparse"
|
|
4
4
|
module Scaltainer
|
5
5
|
class Command
|
6
6
|
def self.parse(args)
|
7
|
-
configfile, statefile = 'scaltainer.yml', nil
|
7
|
+
configfile, statefile, wait = 'scaltainer.yml', nil, 0
|
8
8
|
OptionParser.new do |opts|
|
9
9
|
opts.banner = "Usage: scaltainer [options]"
|
10
10
|
opts.on("-f", "--conf-file FILE", "Specify configuration file (default: scaltainer.yml)") do |file|
|
@@ -13,6 +13,9 @@ module Scaltainer
|
|
13
13
|
opts.on("--state-file FILE", "Specify state file (default: <conf-file>.state)") do |file|
|
14
14
|
statefile = file
|
15
15
|
end
|
16
|
+
opts.on("-w", "--wait SECONDS", "Specify wait time between repeated calls, 0 for no repetition (default: 0)") do |w|
|
17
|
+
wait = w.to_i
|
18
|
+
end
|
16
19
|
opts.on_tail("-h", "--help", "Show this message") do
|
17
20
|
puts opts
|
18
21
|
puts "\nEnvironment variables: \n"
|
@@ -35,7 +38,7 @@ module Scaltainer
|
|
35
38
|
logger = Logger.new(STDOUT)
|
36
39
|
logger.level = %w(debug info warn error fatal unknown).find_index((ENV['LOG_LEVEL'] || '').downcase) || 1
|
37
40
|
|
38
|
-
return configfile, statefile, logger
|
41
|
+
return configfile, statefile, logger, wait
|
39
42
|
end
|
40
43
|
|
41
44
|
private
|
data/lib/scaltainer/runner.rb
CHANGED
@@ -2,7 +2,7 @@ require "yaml"
|
|
2
2
|
|
3
3
|
module Scaltainer
|
4
4
|
class Runner
|
5
|
-
def initialize(configfile, statefile, logger)
|
5
|
+
def initialize(configfile, statefile, logger, wait)
|
6
6
|
@logger = logger
|
7
7
|
@default_service_config = {
|
8
8
|
"min" => 0,
|
@@ -16,14 +16,24 @@ module Scaltainer
|
|
16
16
|
Docker.logger = @logger
|
17
17
|
state = get_state(statefile) || {}
|
18
18
|
endpoint = config["endpoint"]
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
service_type_web = ServiceTypeWeb.new(endpoint)
|
20
|
+
service_type_worker = ServiceTypeWorker.new(endpoint)
|
21
|
+
loop do
|
22
|
+
run config, state, service_type_web, service_type_worker
|
23
|
+
save_state statefile, state
|
24
|
+
sleep wait
|
25
|
+
break if wait == 0
|
26
|
+
end
|
23
27
|
end
|
24
28
|
|
25
29
|
private
|
26
30
|
|
31
|
+
def run(config, state, service_type_web, service_type_worker)
|
32
|
+
service_prefix = config["stack_name"]
|
33
|
+
iterate_services config["web_services"], service_prefix, service_type_web, state
|
34
|
+
iterate_services config["worker_services"], service_prefix, service_type_worker, state
|
35
|
+
end
|
36
|
+
|
27
37
|
def get_state(statefile)
|
28
38
|
YAML.load_file statefile if File.exists? statefile
|
29
39
|
end
|
data/lib/scaltainer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaltainer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hossam Hammady
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|