tiller 0.5.2 → 0.6.0
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/bin/tiller +18 -16
- data/lib/tiller/data/zookeeper.rb +63 -0
- data/lib/tiller/datasource.rb +5 -4
- data/lib/tiller/defaults.rb +16 -0
- data/lib/tiller/template/zookeeper.rb +41 -0
- data/lib/tiller/templatesource.rb +6 -5
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d1e95b4ed6d8c7c7e65adbf5787aaff5d30fe8b
|
4
|
+
data.tar.gz: 28ab01c02e3c27788fcf6e5b66f4e108cc446abe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2425f1fc476a59129657a3e14e91b1d25550f3c78444f05e7a3bea813c3c01fd7f990f3a54238ac0b9c47f702ca6761626b9e2de53764d04fbf8cf76a186e0b
|
7
|
+
data.tar.gz: 6ed9f45e89fcb49380d1e1889d91caf238a59d2241b9359185f81f6e424b3885dacf9a28a65ffb453f479a429febf20669417c8eb68dfeafe0f686f2b5a2de2f
|
data/bin/tiller
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# didn't have an existing gem named after it!
|
5
5
|
# Mark Dastmalchi-Round <github@markround.com>
|
6
6
|
|
7
|
-
VERSION = '0.
|
7
|
+
VERSION = '0.6.0'
|
8
8
|
|
9
9
|
require 'erb'
|
10
10
|
require 'ostruct'
|
@@ -53,17 +53,6 @@ module Tiller
|
|
53
53
|
puts 'Data sources loaded ' + data_classes.to_s
|
54
54
|
end
|
55
55
|
|
56
|
-
# Get all Templates for the given environment
|
57
|
-
templates = {}
|
58
|
-
template_classes.each do |template_class|
|
59
|
-
ts = template_class.new(config)
|
60
|
-
ts.templates.each do |t|
|
61
|
-
templates[t] = ts.template(t)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
puts "Templates to build #{templates.keys}" if config[:verbose]
|
66
|
-
|
67
56
|
# Now go through all our data sources and start to assemble our global_values
|
68
57
|
# hash. As hashes are getting merged, new values will take precedence over
|
69
58
|
# older ones, and a warning will be displayed.
|
@@ -71,17 +60,30 @@ module Tiller
|
|
71
60
|
# templates.
|
72
61
|
global_values = { 'environment' => config[:environment] }
|
73
62
|
data_classes.each do |data_class|
|
63
|
+
# Now need to see if any of the common.yaml values have been over-ridden by a datasource
|
64
|
+
# e.g. environment-specific execs and so on. We do this first so that connection strings
|
65
|
+
# to datasources (e.g. zookeeper) can be included in the config before we obtain any
|
66
|
+
# values.
|
67
|
+
config.merge!(data_class.new(config).common) do |key, old, new|
|
68
|
+
warn_merge(key, old, new, 'common', data_class.to_s)
|
69
|
+
end
|
70
|
+
|
74
71
|
global_values.merge!(data_class.new(config).global_values) do |key, old, new|
|
75
72
|
warn_merge(key, old, new, 'global', data_class.to_s)
|
76
73
|
end
|
74
|
+
end
|
77
75
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
# Get all Templates for the given environment
|
77
|
+
templates = {}
|
78
|
+
template_classes.each do |template_class|
|
79
|
+
ts = template_class.new(config)
|
80
|
+
ts.templates.each do |t|
|
81
|
+
templates[t] = ts.template(t)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
puts "Templates to build #{templates.keys}" if config[:verbose]
|
86
|
+
|
85
87
|
# Now we go through each template we've identified, and get the
|
86
88
|
# values for each one.
|
87
89
|
all_templates = {}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'zk'
|
3
|
+
require 'pp'
|
4
|
+
require 'timeout'
|
5
|
+
|
6
|
+
class ZookeeperDataSource < Tiller::DataSource
|
7
|
+
|
8
|
+
def setup
|
9
|
+
# Set our defaults if not specified
|
10
|
+
@zk_config = Tiller::Zookeeper::Defaults
|
11
|
+
|
12
|
+
raise 'No zookeeper configuration block' unless @config.has_key?('zookeeper')
|
13
|
+
@zk_config.merge!(@config['zookeeper'])
|
14
|
+
|
15
|
+
# Sanity check
|
16
|
+
['uri'].each {|c| raise "Missing Zookeeper configuration #{c}" unless @zk_config.has_key?(c)}
|
17
|
+
|
18
|
+
uri = @zk_config['uri']
|
19
|
+
timeout = @zk_config['timeout']
|
20
|
+
|
21
|
+
begin
|
22
|
+
@zk = Timeout::timeout(timeout) { ZK.new(uri) }
|
23
|
+
rescue
|
24
|
+
raise "Could not connect to Zookeeper cluster : #{uri}"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def values(template_name)
|
30
|
+
path = @zk_config['values']['template']
|
31
|
+
.gsub('%e',@config[:environment])
|
32
|
+
.gsub('%t',template_name)
|
33
|
+
|
34
|
+
get_values(path)
|
35
|
+
end
|
36
|
+
|
37
|
+
def global_values
|
38
|
+
path = @zk_config['values']['global'].gsub('%e',@config[:environment])
|
39
|
+
puts "Fetching Zookeeper globals from #{path}" if @config[:verbose]
|
40
|
+
get_values(path)
|
41
|
+
end
|
42
|
+
|
43
|
+
def target_values(template_name)
|
44
|
+
path = @zk_config['values']['target']
|
45
|
+
.gsub('%e',@config[:environment])
|
46
|
+
.gsub('%t',template_name)
|
47
|
+
get_values(path)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Helper method, not used by DataSource API
|
51
|
+
def get_values(path)
|
52
|
+
values = {}
|
53
|
+
if @zk.exists?(path)
|
54
|
+
keys = @zk.children(path)
|
55
|
+
keys.each do |key|
|
56
|
+
value = @zk.get("#{path}/#{key}")
|
57
|
+
values[key] = value[0]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
values
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
data/lib/tiller/datasource.rb
CHANGED
@@ -4,9 +4,9 @@ module Tiller
|
|
4
4
|
# template) and target_values (meta data about a template, e.g. target
|
5
5
|
# location, permissions, owner and so on)
|
6
6
|
class DataSource
|
7
|
-
|
8
|
-
#
|
9
|
-
@config =
|
7
|
+
|
8
|
+
# Every plugin gets this hash, which is the full parsed config
|
9
|
+
@config ={}
|
10
10
|
|
11
11
|
def initialize(config)
|
12
12
|
@config = config
|
@@ -19,7 +19,8 @@ module Tiller
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# This is where we override any of the common.yaml settings per environment.
|
22
|
-
# EG, the exec: parameter and so on.
|
22
|
+
# EG, the exec: parameter and so on. Also can be used for things like
|
23
|
+
# network service connection strings (e.g. Zookeeper) and so on.
|
23
24
|
def common
|
24
25
|
{}
|
25
26
|
end
|
data/lib/tiller/defaults.rb
CHANGED
@@ -16,3 +16,19 @@ module Tiller
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
+
# Defaults for the Zookeeper data and template sources
|
20
|
+
module Tiller::Zookeeper
|
21
|
+
|
22
|
+
Defaults = {
|
23
|
+
'timeout' => 5,
|
24
|
+
'templates' => '/tiller/%e',
|
25
|
+
|
26
|
+
'values' => {
|
27
|
+
'global' => '/tiller/globals',
|
28
|
+
'template' => '/tiller/%e/%t/values',
|
29
|
+
'target' => '/tiller/%e/%t/target_values'
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class ZookeeperTemplateSource < Tiller::TemplateSource
|
2
|
+
|
3
|
+
def setup
|
4
|
+
# Set our defaults if not specified
|
5
|
+
@zk_config = Tiller::Zookeeper::Defaults
|
6
|
+
|
7
|
+
raise 'No zookeeper configuration block' unless @config.has_key?('zookeeper')
|
8
|
+
@zk_config.merge!(@config['zookeeper'])
|
9
|
+
|
10
|
+
# Sanity check
|
11
|
+
['uri'].each {|c| raise "Missing Zookeeper configuration #{c}" unless @zk_config.has_key?(c)}
|
12
|
+
|
13
|
+
uri = @zk_config['uri']
|
14
|
+
timeout = @zk_config['timeout']
|
15
|
+
|
16
|
+
begin
|
17
|
+
@zk = Timeout::timeout(timeout) { ZK.new(uri) }
|
18
|
+
rescue
|
19
|
+
raise "Could not connect to Zookeeper cluster : #{uri}"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def templates
|
25
|
+
path = @zk_config['templates'].gsub('%e',@config[:environment])
|
26
|
+
puts "Fetching Zookeeper templates from #{path}" if @config[:verbose]
|
27
|
+
templates = []
|
28
|
+
if @zk.exists?(path)
|
29
|
+
templates = @zk.children(path)
|
30
|
+
end
|
31
|
+
|
32
|
+
templates
|
33
|
+
end
|
34
|
+
|
35
|
+
def template(template_name)
|
36
|
+
path = @zk_config['templates'].gsub('%e',@config[:environment]) + "/#{template_name}"
|
37
|
+
@zk.get(path)[0]
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
@@ -3,12 +3,13 @@ module Tiller
|
|
3
3
|
# Subclasses provide templates (an array), and individual template contents
|
4
4
|
# (a string containing ERB data)
|
5
5
|
class TemplateSource
|
6
|
-
|
7
|
-
#
|
8
|
-
@config =
|
6
|
+
|
7
|
+
# Every plugin gets this hash, which is the full parsed config
|
8
|
+
@config = {}
|
9
9
|
|
10
10
|
def initialize(config)
|
11
11
|
@config = config
|
12
|
+
setup
|
12
13
|
end
|
13
14
|
|
14
15
|
# This is where any post-initialisation logic happens
|
@@ -17,11 +18,11 @@ module Tiller
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def templates
|
20
|
-
|
21
|
+
{}
|
21
22
|
end
|
22
23
|
|
23
24
|
def template
|
24
|
-
|
25
|
+
""
|
25
26
|
end
|
26
27
|
|
27
28
|
def ping
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tiller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Dastmalchi-Round
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A tool to create configuration files from a variety of sources, particularly
|
14
14
|
useful for Docker containers. See https://github.com/markround/tiller for examples
|
@@ -56,12 +56,14 @@ files:
|
|
56
56
|
- lib/tiller/data/environment_json.rb
|
57
57
|
- lib/tiller/data/file.rb
|
58
58
|
- lib/tiller/data/random.rb
|
59
|
+
- lib/tiller/data/zookeeper.rb
|
59
60
|
- lib/tiller/datasource.rb
|
60
61
|
- lib/tiller/defaults.rb
|
61
62
|
- lib/tiller/json.rb
|
62
63
|
- lib/tiller/loader.rb
|
63
64
|
- lib/tiller/options.rb
|
64
65
|
- lib/tiller/template/file.rb
|
66
|
+
- lib/tiller/template/zookeeper.rb
|
65
67
|
- lib/tiller/templatesource.rb
|
66
68
|
- lib/tiller/util.rb
|
67
69
|
homepage: http://www.markround.com
|