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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e83fe8588dcb50e60dd1b55b3fccefa1957f553b
4
- data.tar.gz: fcaca1ceaa70b6145ce7c0de83246775cfb14627
3
+ metadata.gz: 6ff62795b21afacc40d04790673b5695f0ef86cb
4
+ data.tar.gz: bc4946701f80b23c6b16976518f546fd41cc278c
5
5
  SHA512:
6
- metadata.gz: e92dad052350902b89d6a1055daea1aedbb72b217a851767008b74cc7b5ad50f14124148eeb02ed3198480f39c428cb87b142dff733033e5fc8a1f6abcb8a8a2
7
- data.tar.gz: 290abee67df29b3bde1517d4f331b6562f58064312d6406463f45f7b3f2f9fc66dbfbd23a768c4f7fc3f46521473a379dd3bbec644b2b61aa2f2e6c4e399cea2
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, the above command should be put inside a cronjob that is triggered every minute or so.
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
@@ -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
@@ -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
- service_prefix = config["stack_name"]
20
- iterate_services config["web_services"], service_prefix, ServiceTypeWeb.new(endpoint), state
21
- iterate_services config["worker_services"], service_prefix, ServiceTypeWorker.new(endpoint), state
22
- save_state statefile, state
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
@@ -1,3 +1,3 @@
1
1
  module Scaltainer
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
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.3
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-13 00:00:00.000000000 Z
11
+ date: 2017-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler