tiller 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/tiller +27 -8
- data/examples/defaults.d/common.yaml +9 -0
- data/examples/defaults.d/defaults.d/app.conf.yaml +2 -0
- data/examples/defaults.d/defaults.d/global.yaml +2 -0
- data/examples/defaults.d/defaults.yaml +5 -0
- data/examples/defaults.d/environments/production.yaml +4 -0
- data/examples/defaults.d/environments/staging.yaml +5 -0
- data/examples/defaults.d/templates/app.conf.erb +9 -0
- data/examples/defaults/common.yaml +9 -0
- data/examples/defaults/defaults.yaml +5 -0
- data/examples/defaults/environments/production.yaml +4 -0
- data/examples/defaults/environments/staging.yaml +5 -0
- data/examples/defaults/templates/app.conf.erb +9 -0
- data/lib/tiller/data/defaults.rb +40 -0
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6aa333d19e0893f11f9eb96e2b676beb5e5cc453
|
4
|
+
data.tar.gz: 99928301c66ea05edaa4ad90da59cb56d550008c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b2c666d5b7ca26051c2cbb1fa22da3eae3d47e6a44772d938284f145bc71b4b31da3e25d4586496a5ff6f77a08ae8f56f6b808c6689fff5b30a383afc8c3e08
|
7
|
+
data.tar.gz: 6e2f2f1a075669c1918ae2005bef7b8a33654a8af8e0c27a693aeebc205d5346bb6e26eab672049229cf5a6e0994bda106e5bb5b7c07e32a63b3530f77061c39
|
data/bin/tiller
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# didn't have an existing gem named after it!
|
5
5
|
# Mark Round <github@markround.com>
|
6
6
|
|
7
|
-
VERSION = '0.
|
7
|
+
VERSION = '0.3.0'
|
8
8
|
|
9
9
|
require 'erb'
|
10
10
|
require 'ostruct'
|
@@ -105,17 +105,36 @@ module Tiller
|
|
105
105
|
data_sources = Array.new
|
106
106
|
template_sources |= config['template_sources']
|
107
107
|
data_sources |= config['data_sources']
|
108
|
-
|
109
|
-
|
108
|
+
|
109
|
+
# This looks a little counter-intuitive, but it's for a reason.
|
110
|
+
# We load things this way so that we get an array (data_sources, for example)
|
111
|
+
# That contains all the classes loaded, *in the order specified in common.yaml*
|
112
|
+
# This is very important, as it means we can specify the defaults DataSource
|
113
|
+
# first, for example and then let later DataSources override values from it.
|
114
|
+
# Otherwise, iterating through the available classes results in them being
|
115
|
+
# returned in no particular useful order.
|
116
|
+
template_classes = Array.new
|
117
|
+
template_sources.each do |t|
|
118
|
+
require "tiller/template/#{t}.rb"
|
119
|
+
template_classes |= TemplateSource.subclasses
|
120
|
+
end
|
121
|
+
|
122
|
+
data_classes = Array.new
|
123
|
+
data_sources.each do |d|
|
124
|
+
require "tiller/data/#{d}.rb"
|
125
|
+
data_classes |= DataSource.subclasses
|
126
|
+
end
|
127
|
+
|
110
128
|
|
111
129
|
if config[:verbose]
|
112
|
-
puts 'Template sources loaded ' +
|
113
|
-
puts 'Data sources loaded ' +
|
130
|
+
puts 'Template sources loaded ' + template_classes.to_s
|
131
|
+
puts 'Data sources loaded ' + data_classes.to_s
|
114
132
|
end
|
115
133
|
|
134
|
+
|
116
135
|
# Get all Templates for the given environment
|
117
136
|
templates = Hash.new
|
118
|
-
|
137
|
+
template_classes.each do |template_class|
|
119
138
|
ts = template_class.new(config)
|
120
139
|
ts.templates.each do |t|
|
121
140
|
templates[t] = ts.template(t)
|
@@ -130,7 +149,7 @@ module Tiller
|
|
130
149
|
# We also add in 'environment' to start with as it's very useful for all
|
131
150
|
# templates.
|
132
151
|
global_values = { 'environment' => config[:environment] }
|
133
|
-
|
152
|
+
data_classes.each do |data_class|
|
134
153
|
global_values.merge!(data_class.new(config).global_values) do |key, old, new|
|
135
154
|
warn_merge(key, old, new, 'global', data_class.to_s)
|
136
155
|
end
|
@@ -145,7 +164,7 @@ module Tiller
|
|
145
164
|
|
146
165
|
# Now we populate the hash with values from each DataSource, warning if we
|
147
166
|
# get duplicate values.
|
148
|
-
|
167
|
+
data_classes.each do |data_class|
|
149
168
|
dc = data_class.new(config)
|
150
169
|
if dc.values(template) != nil
|
151
170
|
values.merge!(dc.values(template)) do |key, old, new|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
# Defaults datasource for Tiller.
|
3
|
+
|
4
|
+
# Thanks, StackOverflow ;)
|
5
|
+
class ::Hash
|
6
|
+
def deep_merge!(second)
|
7
|
+
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
|
8
|
+
self.merge!(second, &merger)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class DefaultsDataSource < Tiller::DataSource
|
14
|
+
def setup
|
15
|
+
defaults_file = File.join(@config[:tiller_base], 'defaults.yaml')
|
16
|
+
defaults_dir = File.join(@config[:tiller_base], 'defaults.d')
|
17
|
+
@defaults_hash = Hash.new
|
18
|
+
|
19
|
+
# Read defaults in from defaults file
|
20
|
+
if File.file? defaults_file
|
21
|
+
@defaults_hash.deep_merge!(YAML.load(open(defaults_file)))
|
22
|
+
end
|
23
|
+
|
24
|
+
# If we have YAML files in defaults.d, also merge them
|
25
|
+
if File.directory? defaults_dir
|
26
|
+
Dir.glob(File.join(defaults_dir,'*.yaml')).each do |d|
|
27
|
+
@defaults_hash.deep_merge!(YAML.load(open(d)))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def global_values
|
33
|
+
@defaults_hash.key?('global') ? @defaults_hash['global'] : Hash.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def values(template_name)
|
37
|
+
@defaults_hash.key?(template_name) ? @defaults_hash[template_name] : Hash.new
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
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.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Round
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A tool to create configuration files in Docker containers from a variety
|
14
14
|
of sources. See https://github.com/markround/tiller for examples and documentation.
|
@@ -19,6 +19,18 @@ extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- bin/tiller
|
22
|
+
- examples/defaults.d/common.yaml
|
23
|
+
- examples/defaults.d/defaults.d/app.conf.yaml
|
24
|
+
- examples/defaults.d/defaults.d/global.yaml
|
25
|
+
- examples/defaults.d/defaults.yaml
|
26
|
+
- examples/defaults.d/environments/production.yaml
|
27
|
+
- examples/defaults.d/environments/staging.yaml
|
28
|
+
- examples/defaults.d/templates/app.conf.erb
|
29
|
+
- examples/defaults/common.yaml
|
30
|
+
- examples/defaults/defaults.yaml
|
31
|
+
- examples/defaults/environments/production.yaml
|
32
|
+
- examples/defaults/environments/staging.yaml
|
33
|
+
- examples/defaults/templates/app.conf.erb
|
22
34
|
- examples/json/common.yaml
|
23
35
|
- examples/json/environments/array.yaml
|
24
36
|
- examples/json/environments/simple_keys.yaml
|
@@ -38,6 +50,7 @@ files:
|
|
38
50
|
- lib/tiller/api/handlers/ping.rb
|
39
51
|
- lib/tiller/api/handlers/template.rb
|
40
52
|
- lib/tiller/api/handlers/templates.rb
|
53
|
+
- lib/tiller/data/defaults.rb
|
41
54
|
- lib/tiller/data/environment.rb
|
42
55
|
- lib/tiller/data/environment_json.rb
|
43
56
|
- lib/tiller/data/file.rb
|