tiller 1.1.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d77cf5dbfb18a7c01748c26f85a1750db39cdf64
4
- data.tar.gz: 7c6495941198eb295f8bc77aa596836ba4c1b1bb
3
+ metadata.gz: d19ad6cc81b20acaf13f251a62861df1bc3a7d50
4
+ data.tar.gz: 95c3cd5651079891d414743303672085eb901610
5
5
  SHA512:
6
- metadata.gz: 62be132162a6b83147e771070d663f1e9218a83f92e0a120b74f8adc1d3e44c163eab8f6bbf5eb50106f776c50d6181f1538f451d8e039fb491b323a48c6a78a
7
- data.tar.gz: 8782973e32397059a0be3406a946274f3f3afe521bf07893202c5e7f5c42f697b646419a2547ee6ee6eb2651d86c4f356ed6d0e04117802697f930671e58ef82
6
+ metadata.gz: a6d9446383c8025ee6d0ea10da9b3078b0675d17332829e86e3b05106a6a5072152de8f6104ee0271486e99b230336a19b77d63a489436cc4a05e841f2a01fc9
7
+ data.tar.gz: ddf4ac3e4fedab07bfe8a4ef1452c86b0022dd74acf9357b2f1159def7c8817a0e369f1f53cb6f25fd06d062a078845596b3b18d1d520b1940d199efa9393014
data/bin/tiller CHANGED
@@ -35,6 +35,10 @@ EXIT_SUCCESS = 0
35
35
  module Tiller
36
36
 
37
37
  puts "tiller v#{VERSION} (https://github.com/markround/tiller) <github@markround.com>"
38
+ if RUBY_VERSION < SUPPORTED_RUBY_VERSION
39
+ puts "Warning : Support for Ruby versions < #{SUPPORTED_RUBY_VERSION} is deprecated."
40
+ puts " See http://tiller.readthedocs.io/en/latest/requirements/"
41
+ end
38
42
 
39
43
  class << self
40
44
  attr_accessor :config, :log, :templates, :tiller
@@ -94,6 +98,35 @@ module Tiller
94
98
  data_classes = loader(DataSource, config['data_sources'])
95
99
  template_classes = loader(TemplateSource, config['template_sources'])
96
100
 
101
+ # dynamic_values in top-level config (https://github.com/markround/tiller/issues/58)
102
+ # We create a temporary copy of our config hash, and iterate over it, fetching values from each datasource in turn
103
+ # and then merging the values back into the main config hash as we go along.
104
+ # Due to needing binding functions only present in Ruby >= 2.1.0, this feature is not present on older Ruby versions.
105
+ # See See http://tiller.readthedocs.io/en/latest/requirements/ for Ruby support policy and background.
106
+ if config.assoc('dynamic_values') && RUBY_VERSION >= "2.1.0"
107
+ log.debug('Parsing top-level values for ERb syntax')
108
+ # Deep copy for our temp config
109
+ temp_config = Marshal.load(Marshal.dump(config))
110
+ data_classes.each do |data_class|
111
+ temp_config.deep_traverse do |path,value|
112
+ # We skip anything under environments block (Unless it's the "common" over-ride block) as these
113
+ # may contain values we want to replace with template-specific values later on.
114
+ next if path.include?('environments') and ! path.include?('common')
115
+
116
+ if value.is_a?(String) && value.include?('<%')
117
+ begin
118
+ parsed_value = Tiller::render(value, direct_render: true, namespace: data_class.new.global_values)
119
+ log.debug("Parsed ERb of #{path.join('/')} as #{parsed_value}", dedup: false)
120
+ config.deep_merge!((path + [parsed_value]).reverse.reduce { |s,e| { e => s } })
121
+ rescue NameError => e
122
+ # This happens if there is no value provided by the currently active datasource. If so,
123
+ # we simply catch the error and proceed without merging anything.
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+
97
130
  log.info('Template sources loaded ' + template_classes.to_s)
98
131
  log.info('Data sources loaded ' + data_classes.to_s)
99
132
  if (config.key?('helpers'))
@@ -323,6 +356,4 @@ module Tiller
323
356
 
324
357
  end
325
358
 
326
-
327
-
328
359
  end
@@ -26,7 +26,7 @@ class DefaultsDataSource < Tiller::DataSource
26
26
  # If we have YAML files in defaults.d, also merge them
27
27
  # We do this even if the main defaults were loaded from the v2 format config
28
28
  if File.directory? defaults_dir
29
- Dir.glob(File.join(defaults_dir,'*.yaml')).each do |d|
29
+ Dir.glob(File.join(defaults_dir,'*.yaml')).sort().each do |d|
30
30
  yaml = YAML.load(open(d))
31
31
  Tiller::log.debug("Loading defaults from #{d}")
32
32
  @defaults_hash.deep_merge!(yaml) if yaml != false
@@ -21,15 +21,15 @@ module Tiller
21
21
  end
22
22
 
23
23
  # Quick hack to remove duplicate informational messages
24
- def info(msg)
24
+ def info(msg, options={})
25
25
  super(msg) unless self.messages.include?(msg)
26
- self.messages.push(msg)
26
+ self.messages.push(msg) if options.fetch(:dedup, true)
27
27
  end
28
28
 
29
29
  # Quick hack to remove duplicate informational messages
30
- def debug(msg)
30
+ def debug(msg, options={})
31
31
  super(msg) unless self.messages.include?(msg)
32
- self.messages.push(msg)
32
+ self.messages.push(msg) if options.fetch(:dedup, true)
33
33
  end
34
34
 
35
35
  end
@@ -1,20 +1,30 @@
1
1
  module Tiller
2
2
  def self.render(template, options={})
3
3
 
4
+ # This is only ever used when we parse top-level values for ERb syntax, we pass in each
5
+ # datasource's global_values as a distinct namespace
6
+ if options.has_key?(:namespace)
7
+ b = binding
8
+ ns = options[:namespace]
9
+ ns.each { |k, v| b.local_variable_set(k, v) }
10
+ return ERB.new(template, nil, '-').result(ns.instance_eval { b })
11
+ end
12
+
13
+ ns = OpenStruct.new(Tiller::tiller)
14
+
4
15
  # This is used for rendering content in dynamic configuration files
5
16
  if options.has_key?(:direct_render)
6
17
  content = template
7
- ns = OpenStruct.new(Tiller::tiller)
8
18
  return ERB.new(content, nil, '-').result(ns.instance_eval { binding })
9
19
  end
10
20
 
11
21
  if Tiller::templates.key?(template)
12
22
  content = Tiller::templates[template]
13
- ns = OpenStruct.new(Tiller::tiller)
14
23
  ERB.new(content, nil, '-').result(ns.instance_eval { binding })
15
24
  else
16
25
  Tiller::log.warn("Warning : Requested render of non-existant template #{template}")
17
26
  ""
18
27
  end
19
28
  end
29
+
20
30
  end
@@ -1,2 +1,3 @@
1
1
  # http://semver.org/
2
- VERSION="1.1.0"
2
+ VERSION="1.2.0"
3
+ SUPPORTED_RUBY_VERSION="2.2.0"
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: 1.1.0
4
+ version: 1.2.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: 2017-04-24 00:00:00.000000000 Z
11
+ date: 2017-06-09 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