scaltainer 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.org/hammady/scaltainer.svg?branch=master)](https://travis-ci.org/hammady/scaltainer)
|
2
2
|
[![Coverage Status](https://coveralls.io/repos/github/hammady/scaltainer/badge.svg?service=github&branch=master)](https://coveralls.io/github/hammady/scaltainer?branch=master)
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/scaltainer.svg)](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
|