aggkit 0.4.4.11050 → 0.4.4.12292

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e382cdb9cfb986897ccc243f7c91f544c4834531
4
- data.tar.gz: 1443f0a041c67d7c0adf82837a946a8b026d16fa
3
+ metadata.gz: c7e60deba3fa62e58fca16ad17c510ad79184ac9
4
+ data.tar.gz: 52b36d4af259d772575b8b1f869b3ddc02ef7178
5
5
  SHA512:
6
- metadata.gz: d6e652bf997f8de37bbc90b4e40fe94dcaf31aeb2806d98783a79d3c1ecc8602377c530e0b36fc79a4a779202a0af0f0b406bf777163e34ed6a0809ff0d7859f
7
- data.tar.gz: d672dbe8d83d3354f72918927ed3b155a01ea0f5830faf33ca89497833ad5373ffc6e62710fdd6c36a308d09657967998a481215c077752c6d7a40539b60052f
6
+ metadata.gz: 543131a585b51005c7d40c31825f0bbfed6ae5e17903510bcc1afdd85f907f51cf84f3a9fa81be9a77f0035da019ff545119f17e3fe269ae86b3f29ba9fe3a74
7
+ data.tar.gz: 7404283ebc889e58b061dcf0179d6a9cfec1da120cf00214f59e4c8d817737cdbe78ae6e1e47e4588f7df20845d0a59362b0379b057314bd3109faffbb905b3e
data/Gemfile CHANGED
@@ -9,6 +9,7 @@ group :test do
9
9
  gem 'rspec-retry'
10
10
  gem 'rspec-set'
11
11
  gem 'rspec_junit_formatter'
12
- gem 'simplecov'
12
+ gem 'simplecov', require: false
13
+ gem 'simplecov-console', require: false
13
14
  end
14
15
 
data/Gemfile.lock CHANGED
@@ -10,6 +10,7 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
+ ansi (1.5.0)
13
14
  awesome_print (1.8.0)
14
15
  diff-lcs (1.3)
15
16
  diplomat (2.0.5)
@@ -43,8 +44,15 @@ GEM
43
44
  docile (~> 1.1)
44
45
  json (>= 1.8, < 3)
45
46
  simplecov-html (~> 0.10.0)
47
+ simplecov-console (0.5.0)
48
+ ansi
49
+ simplecov
50
+ terminal-table
46
51
  simplecov-html (0.10.2)
52
+ terminal-table (1.8.0)
53
+ unicode-display_width (~> 1.1, >= 1.1.1)
47
54
  tty-tree (0.2.0)
55
+ unicode-display_width (1.6.0)
48
56
 
49
57
  PLATFORMS
50
58
  ruby
@@ -59,6 +67,7 @@ DEPENDENCIES
59
67
  rspec-set
60
68
  rspec_junit_formatter
61
69
  simplecov
70
+ simplecov-console
62
71
 
63
72
  BUNDLED WITH
64
73
  1.16.2
data/bin/aggexec ADDED
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'aggkit'
4
+
5
+ UTIL = File.basename(__FILE__)
6
+
7
+ if ENV['CONSUL_HTTP_ADDR'].to_s.empty?
8
+ ENV['CONSUL_HTTP_ADDR'] = "http://#{ENV['CONSUL_HOST'] || 'localhost'}:8500"
9
+ end
10
+
11
+ @opts = {
12
+ consul: ENV['CONSUL_HTTP_ADDR'],
13
+ depends: [],
14
+ prefixes: [],
15
+ templates: []
16
+ }
17
+
18
+ @opts[:exec] = (begin
19
+ idx = ARGV.index {|a| a.strip == '--' } + 1
20
+ ARGV[idx..-1]
21
+ rescue StandardError
22
+ []
23
+ end)
24
+
25
+ parser = Aggkit::OptionParser.new do |o|
26
+ o.banner = "Usage: #{UTIL} [options]"
27
+
28
+ o.on("--consul=#{@opts[:consul]}", 'Set consul http address. CONSUL_HTTP_ADDR env can be used instead') do |consul|
29
+ ENV['CONSUL_HTTP_ADDR'] = Aggkit::Consul.consul_addr(consul)
30
+ @opts[:consul] = ENV['CONSUL_HTTP_ADDR']
31
+ end
32
+
33
+ o.on('--depends=mq,db,router...', 'Set list of services to wait for ready before start') do |list|
34
+ @opts[:depends] += list.to_s.split(/[ ;,|]/).map(&:to_s).reject(&:empty?)
35
+ end
36
+
37
+ o.on('--prefix=kv/folder/path', 'Consul KV prefix to load envs from. Multiple prefixes are merged from left to right.') do |prefix|
38
+ @opts[:prefixes] << prefix.strip
39
+ end
40
+
41
+ o.on('--service=<SERVICE>', 'Showrtcut for --prefix=services/env/<SERVICE>. Multiple prefixes are merged from left to right.') do |service|
42
+ @opts[:prefixes] << "services/env/#{service}".strip
43
+ end
44
+
45
+ o.on('--templates=<FOLDER>', 'Folder for recursive ensubst *.in templates. Multiple prefixes are merged from left to right.') do |folder|
46
+ @opts[:templates] << folder.strip
47
+ end
48
+
49
+ end
50
+ parser.parse!
51
+
52
+ @opts[:depends] = @opts[:depends].select(:present?)
53
+ @opts[:prefixes] = @opts[:prefixes].select(:present?)
54
+ @opts[:templates] = @opts[:templates].select(:present?)
55
+
56
+ die 'exec script must be provided' if @opts[:exec].empty?
57
+
58
+ # Wait for consul
59
+ Aggkit::Consul.wait_for_consul(@opts[:consul])
60
+
61
+ # Wait for dependencies
62
+ @opts[:depends].each(&Aggkit::Consul.method(:wait_for_service).curry.call(@opts[:consul]))
63
+
64
+ # Load env from consul
65
+ @opts[:prefixes].each(&Aggkit::Consul.method(:load_envs_from_consul).curry.call(@opts[:consul]))
66
+
67
+ # Preprocess template files
68
+ Aggkit::Consul.envsubst(*@opts[:templates])
69
+
70
+ exec(*@opts[:exec])
71
+
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  class AbstractIO
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  class AbstractProcess
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  class Error < StandardError
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  require 'java'
2
3
  require 'jruby'
3
4
 
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  require 'fileutils'
2
3
 
3
4
  module Aggkit
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  module Unix
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  module Unix
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  module Unix
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess::Unix::Platform
3
4
  SIZEOF = {
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess::Unix::Platform
3
4
  SIZEOF = {
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess::Unix::Platform
3
4
  SIZEOF = {
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess::Unix::Platform
3
4
  SIZEOF = {
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  require 'thread'
2
3
 
3
4
  module Aggkit
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  module Unix
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  module Unix
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  module Aggkit
2
3
  module ChildProcess
3
4
  VERSION = '0.9.0'
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  require "ffi"
2
3
  require "rbconfig"
3
4
 
@@ -1,3 +1,4 @@
1
+ #skip coverage
1
2
  require 'aggkit/childprocess/version'
2
3
  require 'aggkit/childprocess/errors'
3
4
  require 'aggkit/childprocess/abstract_process'
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'English'
4
+
5
+ module Aggkit
6
+
7
+ module Consul
8
+
9
+ def load_envs(string, env = ENV)
10
+ envs = Dotenv::Parser.new(string).call
11
+ envs.each_pair do |k, v|
12
+ env[k] = v
13
+ end
14
+ envs
15
+ end
16
+
17
+ def consul_addr addr_or_host
18
+ if addr_or_host['http']
19
+ addr_or_host
20
+ else
21
+ "http://#{addr_or_host}:8500"
22
+ end
23
+ end
24
+
25
+ def load_envs_from_consul(consul, prefix)
26
+ consul_http = consul_addr(consul)
27
+ envs = Aggkit::Exec.capture!("aggconsul --consul=#{consul_http} --env #{prefix} --pristine -d", "Can't load envs from #{prefix}")
28
+ load_envs(envs)
29
+ end
30
+
31
+ def wait_for_consul consul
32
+ consul_http = consul_addr(consul)
33
+ Aggkit::Exec.execute!("aggwait -t 30 -i 5 --consul-addr=#{consul_http} --consul", 'Timeout for consul service')
34
+ end
35
+
36
+ def wait_for_service consul, service
37
+ consul_http = consul_addr(consul)
38
+ Aggkit::Exec.execute!("aggwait -t 60 -i 5 --consul-addr=#{consul_http} --consul-service #{service}", "Timeout for #{service} service")
39
+ end
40
+
41
+ def envsubst(*paths)
42
+ paths = paths.flatten.map{|c| c.to_s.strip }.reject(&:empty?)
43
+ paths.each do |path|
44
+ Dir.glob("#{path}/**/*.in") do |templ|
45
+ envsubst_file(templ, templ.sub(/\.in$/, ''))
46
+ end
47
+ end
48
+ end
49
+
50
+ def envsubst_file(templ, output = nil)
51
+ output ||= templ.sub(/\.in$/, '')
52
+ Aggkit::Exec.die('filename must ends with .in or output must be provided') if output.strip == templ.strip
53
+ cmd = "cat '#{templ}' | envsubst > '#{output}'"
54
+ Aggkit::Exec.execute!(cmd, "envsubst failed: #{cmd}")
55
+ end
56
+
57
+ extend ::Aggkit::Consul
58
+
59
+ end
60
+
61
+ end
62
+
@@ -0,0 +1,44 @@
1
+ module Aggkit
2
+
3
+ module Exec
4
+
5
+ def error(message)
6
+ STDERR.puts "Error: #{message}"
7
+ end
8
+
9
+ def die(message, code: 1)
10
+ error(message)
11
+ exit!(code)
12
+ end
13
+
14
+ def capture(cmd)
15
+ puts "Capturing: #{cmd}"
16
+ io = IO.popen(cmd)
17
+ io.read.strip
18
+ ensure
19
+ io.close rescue nil
20
+ end
21
+
22
+ def capture!(cmd, error = nil)
23
+ output = capture(cmd)
24
+ error = error ? "#{error}: Execution failed" : 'Execution failed'
25
+ die(error) unless $?&.success?
26
+
27
+ output
28
+ rescue Exception => e
29
+ error = error ? "#{error}: #{e.inspect}" : "Execution failed: #{e.inspect}"
30
+ die(error)
31
+ end
32
+
33
+ def execute!(cmd, error = nil)
34
+ puts "Executing: #{cmd}"
35
+ error = error ? "#{error}: Execution failed" : 'Execution failed'
36
+ die(error) unless system(cmd)
37
+ end
38
+
39
+ extend ::Aggkit::Exec
40
+
41
+ end
42
+
43
+ end
44
+
data/lib/aggkit.rb CHANGED
@@ -6,6 +6,8 @@ require 'dotenv'
6
6
  require 'aggkit/version'
7
7
  require 'aggkit/option_parser'
8
8
  require 'aggkit/childprocess'
9
+ require 'aggkit/exec'
10
+ require 'aggkit/consul'
9
11
  require 'aggkit/watcher'
10
12
  require 'aggkit/runner'
11
13
  require 'aggkit/env'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aggkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4.11050
4
+ version: 0.4.4.12292
5
5
  platform: ruby
6
6
  authors:
7
7
  - Godko Ivan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-04-29 00:00:00.000000000 Z
12
+ date: 2019-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: diplomat
@@ -103,6 +103,7 @@ executables:
103
103
  - agg
104
104
  - aggci
105
105
  - aggconsul
106
+ - aggexec
106
107
  - agggen
107
108
  - agglock
108
109
  - aggmerge
@@ -127,6 +128,7 @@ files:
127
128
  - bin/agg
128
129
  - bin/aggci
129
130
  - bin/aggconsul
131
+ - bin/aggexec
130
132
  - bin/agggen
131
133
  - bin/agglock
132
134
  - bin/aggmerge
@@ -167,7 +169,9 @@ files:
167
169
  - lib/aggkit/childprocess/windows/process_builder.rb
168
170
  - lib/aggkit/childprocess/windows/structs.rb
169
171
  - lib/aggkit/ci.rb
172
+ - lib/aggkit/consul.rb
170
173
  - lib/aggkit/env.rb
174
+ - lib/aggkit/exec.rb
171
175
  - lib/aggkit/option_parser.rb
172
176
  - lib/aggkit/runner.rb
173
177
  - lib/aggkit/version.rb