tiller 0.7.3 → 0.7.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tiller +4 -4
  3. data/lib/tiller/api.rb +1 -1
  4. data/lib/tiller/api/handlers/templates.rb +5 -5
  5. data/lib/tiller/data/defaults.rb +17 -3
  6. data/lib/tiller/data/file.rb +1 -1
  7. data/lib/tiller/data/xml_file.rb +1 -1
  8. data/lib/tiller/logger.rb +1 -1
  9. data/lib/tiller/util.rb +1 -1
  10. metadata +2 -26
  11. data/examples/defaults.d/common.yaml +0 -9
  12. data/examples/defaults.d/defaults.d/app.conf.yaml +0 -2
  13. data/examples/defaults.d/defaults.d/global.yaml +0 -2
  14. data/examples/defaults.d/defaults.yaml +0 -5
  15. data/examples/defaults.d/environments/production.yaml +0 -4
  16. data/examples/defaults.d/environments/staging.yaml +0 -5
  17. data/examples/defaults.d/templates/app.conf.erb +0 -9
  18. data/examples/defaults/common.yaml +0 -9
  19. data/examples/defaults/defaults.yaml +0 -5
  20. data/examples/defaults/environments/production.yaml +0 -4
  21. data/examples/defaults/environments/staging.yaml +0 -5
  22. data/examples/defaults/templates/app.conf.erb +0 -9
  23. data/examples/json/common.yaml +0 -6
  24. data/examples/json/environments/array.yaml +0 -4
  25. data/examples/json/environments/simple_keys.yaml +0 -4
  26. data/examples/json/templates/array.erb +0 -4
  27. data/examples/json/templates/simple_keys.erb +0 -4
  28. data/examples/plugins/etc/tiller/common.yaml +0 -37
  29. data/examples/plugins/etc/tiller/environments/production.yaml +0 -27
  30. data/examples/plugins/etc/tiller/environments/staging.yaml +0 -24
  31. data/examples/plugins/etc/tiller/templates/sensu_client.erb +0 -8
  32. data/examples/plugins/lib/tiller/data/dummy.rb +0 -25
  33. data/examples/plugins/lib/tiller/data/network.rb +0 -15
  34. data/examples/plugins/lib/tiller/template/dummy.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ad52aeecb758099a50e137c5cfac27f3f3b8426
4
- data.tar.gz: a6a6f0e8fa396b6588ee1172c51ad62f928e10a2
3
+ metadata.gz: 81f462b7034a8c815eb6e561948cba295dbf3761
4
+ data.tar.gz: 5254ffc7b3ea0e2811fc44be2e54f8ff80e48e65
5
5
  SHA512:
6
- metadata.gz: 1140c813c8fcf4e324b09ee8dd540146a8889633fa255facadd06a40ea7ef530880185f997bb1d5be15b11c14206f2cb367dc8c464e0561c905a2e4f5c728649
7
- data.tar.gz: 64e11eb53ba02884144ef9f240d99bbea81136d6b4eba96ee8c7e7a9aec5c5d9abc5aabc619b7229ac7f4fc2fe95c9360407c7c307e2ef851f9cd1ef3d313103
6
+ metadata.gz: 6ce3e1d4b293f1b74ddabb9e8681b62a17016e27962713a8821393572354cd8aa23bc8b81ec07144e289ccfe20b7960b593658bb624f2dfeb8e929b59c530f90
7
+ data.tar.gz: 8c37b29ade6d27a3fe9cad11b36d2e80ecd954f14a2b12adc3897146e727cd62ba6b25e3d38a0e28feef2c83d579656d35d6e180df475cea120a9beaf6d33508
data/bin/tiller CHANGED
@@ -8,7 +8,7 @@
8
8
  #
9
9
  # Mark Dastmalchi-Round <github@markround.com>
10
10
 
11
- VERSION = '0.7.3'
11
+ VERSION = '0.7.4'
12
12
 
13
13
  require 'erb'
14
14
  require 'ostruct'
@@ -45,7 +45,7 @@ module Tiller
45
45
  begin
46
46
  common_file = File.join(config[:tiller_base], 'common.yaml')
47
47
  config.merge!(YAML.load(open(common_file)))
48
- rescue Exception => e
48
+ rescue StandardError => e
49
49
  abort "Error : Could not open common configuration file!\n#{e}"
50
50
  end
51
51
 
@@ -152,7 +152,7 @@ module Tiller
152
152
  # config is redundant in target_values, remove it for the final status hash.
153
153
  all_templates[template] = {
154
154
  'merged_values' => tiller,
155
- 'target_values' => target_values.reject{|k,v| k=='config'}
155
+ 'target_values' => target_values.reject{|k,_v| k=='config'}
156
156
  }
157
157
 
158
158
  # Set permissions if we are running as root
@@ -189,7 +189,7 @@ module Tiller
189
189
 
190
190
  if config[:no_exec] == false && config.key?('exec')
191
191
  # All templates created, so let's start the replacement process
192
- puts "Executing #{config['exec'].to_s}..."
192
+ puts "Executing #{config['exec']}..."
193
193
 
194
194
  # Spawn and wait so API can continue to run
195
195
  child_pid = launch(config['exec'], :verbose => config[:verbose])
@@ -25,7 +25,7 @@ def tiller_api(tiller_api_hash)
25
25
  begin
26
26
  socket = server.accept
27
27
  request = socket.gets
28
- (method, uri, http_version) = request.split
28
+ (method, uri, _http_version) = request.split
29
29
 
30
30
  if uri =~ /^\/v([0-9]+)\//
31
31
  api_version = uri.split('/')[1]
@@ -4,11 +4,11 @@ require 'tiller/api/handlers/404'
4
4
  def handle_templates(api_version, tiller_api_hash)
5
5
  case api_version
6
6
  when 'v1'
7
- {
8
- :content => dump_json(tiller_api_hash['templates'].keys),
9
- :status => '200 OK'
10
- }
7
+ {
8
+ :content => dump_json(tiller_api_hash['templates'].keys),
9
+ :status => '200 OK'
10
+ }
11
11
  else
12
12
  handle_404
13
- end
14
13
  end
14
+ end
@@ -4,7 +4,7 @@ require 'yaml'
4
4
  # Thanks, StackOverflow ;)
5
5
  class ::Hash
6
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 }
7
+ merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
8
8
  self.merge!(second, &merger)
9
9
  end
10
10
  end
@@ -52,7 +52,15 @@ class DefaultsDataSource < Tiller::DataSource
52
52
 
53
53
  if @defaults_hash.key?(template_name)
54
54
  values = @defaults_hash[template_name]
55
- values.key?('config') ? values['config'] : values
55
+ if values.is_a? Hash
56
+ values.key?('config') ? values['config'] : values
57
+ else
58
+ # Previous versions of Tiller didn't throw an error when we had an empty
59
+ # template config definition in a defaults file. Tiller 0.7.3 "broke" this, so while it's arguably the
60
+ # correct thing to bail out, in the interests of backwards-compatibility, we now instead log a warning and continue.
61
+ @log.warn("Warning, empty config for #{template_name}")
62
+ Hash.new
63
+ end
56
64
  else
57
65
  Hash.new
58
66
  end
@@ -61,7 +69,13 @@ class DefaultsDataSource < Tiller::DataSource
61
69
  def target_values(template_name)
62
70
  if @defaults_hash.key?(template_name)
63
71
  values = @defaults_hash[template_name]
64
- values.key?('target') ? values : Hash.new
72
+ if values.is_a? Hash
73
+ values.key?('target') ? values : Hash.new
74
+ else
75
+ # See comments for values function.
76
+ @log.warn("Warning, empty config for #{template_name}")
77
+ Hash.new
78
+ end
65
79
  else
66
80
  Hash.new
67
81
  end
@@ -24,7 +24,7 @@ class FileDataSource < Tiller::DataSource
24
24
  "#{@config[:environment]}.yaml")
25
25
  @config_hash = YAML.load(open(env_file))
26
26
  rescue
27
- abort ("Error : Could not load environment file #{env_file}")
27
+ abort("Error : Could not load environment file #{env_file}")
28
28
  end
29
29
  end
30
30
  end
@@ -20,7 +20,7 @@ class XmlFileDataSource < Tiller::DataSource
20
20
  @log.info('Opening XML file : ' + path)
21
21
  begin
22
22
  xml = Crack::XML.parse(File.open(path))
23
- rescue Exception => e
23
+ rescue StandardError => e
24
24
  abort "Error : Could not parse XML file #{path}\n#{e}"
25
25
  end
26
26
  struct = {}
@@ -10,7 +10,7 @@ module Tiller
10
10
  self.level = Logger::INFO if config[:verbose]
11
11
  self.level = Logger::DEBUG if config[:debug]
12
12
 
13
- self.formatter = proc do |severity, datetime, progname, msg|
13
+ self.formatter = proc do |_severity, _datetime, _progname, msg|
14
14
  "#{msg}\n"
15
15
  end
16
16
 
@@ -23,7 +23,7 @@ def signal(sig, pid, options={})
23
23
  end
24
24
 
25
25
  # Launch the replacement process.
26
- def launch(cmd, options={})
26
+ def launch(cmd, _options={})
27
27
  # If an array, then we use a different form of spawn() which
28
28
  # avoids a subshell. See https://github.com/markround/tiller/issues/8
29
29
  if cmd.is_a?(Array)
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.7.3
4
+ version: 0.7.4
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-10-28 00:00:00.000000000 Z
11
+ date: 2015-11-24 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
@@ -20,30 +20,6 @@ extensions: []
20
20
  extra_rdoc_files: []
21
21
  files:
22
22
  - bin/tiller
23
- - examples/defaults.d/common.yaml
24
- - examples/defaults.d/defaults.d/app.conf.yaml
25
- - examples/defaults.d/defaults.d/global.yaml
26
- - examples/defaults.d/defaults.yaml
27
- - examples/defaults.d/environments/production.yaml
28
- - examples/defaults.d/environments/staging.yaml
29
- - examples/defaults.d/templates/app.conf.erb
30
- - examples/defaults/common.yaml
31
- - examples/defaults/defaults.yaml
32
- - examples/defaults/environments/production.yaml
33
- - examples/defaults/environments/staging.yaml
34
- - examples/defaults/templates/app.conf.erb
35
- - examples/json/common.yaml
36
- - examples/json/environments/array.yaml
37
- - examples/json/environments/simple_keys.yaml
38
- - examples/json/templates/array.erb
39
- - examples/json/templates/simple_keys.erb
40
- - examples/plugins/etc/tiller/common.yaml
41
- - examples/plugins/etc/tiller/environments/production.yaml
42
- - examples/plugins/etc/tiller/environments/staging.yaml
43
- - examples/plugins/etc/tiller/templates/sensu_client.erb
44
- - examples/plugins/lib/tiller/data/dummy.rb
45
- - examples/plugins/lib/tiller/data/network.rb
46
- - examples/plugins/lib/tiller/template/dummy.rb
47
23
  - lib/tiller/api.rb
48
24
  - lib/tiller/api/handlers/404.rb
49
25
  - lib/tiller/api/handlers/config.rb
@@ -1,9 +0,0 @@
1
- exec: date
2
-
3
- data_sources:
4
- - defaults
5
- - file
6
- - environment
7
-
8
- template_sources:
9
- - file
@@ -1,2 +0,0 @@
1
- app.conf.erb:
2
- port: '8080'
@@ -1,2 +0,0 @@
1
- global:
2
- domain_name: 'example.com'
@@ -1,5 +0,0 @@
1
- global:
2
- domain_name: 'example.com'
3
-
4
- app.conf.erb:
5
- port: '8080'
@@ -1,4 +0,0 @@
1
- app.conf.erb:
2
- target: /tmp/app.conf
3
- config:
4
- database: 'prd-db-1.example.com'
@@ -1,5 +0,0 @@
1
- app.conf.erb:
2
- target: /tmp/app.conf
3
- config:
4
- port: '8081'
5
- database: 'stg-db-1.dev.example.com'
@@ -1,9 +0,0 @@
1
- [http]
2
- http.port=<%= port %>
3
- http.hostname=<%= environment %>.<%= domain_name %>
4
-
5
- [smtp]
6
- mail_domain_name=<%= domain_name %>
7
-
8
- [db]
9
- db.host=<%= database %>
@@ -1,9 +0,0 @@
1
- exec: date
2
-
3
- data_sources:
4
- - defaults
5
- - file
6
- - environment
7
-
8
- template_sources:
9
- - file
@@ -1,5 +0,0 @@
1
- global:
2
- domain_name: 'example.com'
3
-
4
- app.conf.erb:
5
- port: '8080'
@@ -1,4 +0,0 @@
1
- app.conf.erb:
2
- target: /tmp/app.conf
3
- config:
4
- database: 'prd-db-1.example.com'
@@ -1,5 +0,0 @@
1
- app.conf.erb:
2
- target: /tmp/app.conf
3
- config:
4
- port: '8081'
5
- database: 'stg-db-1.dev.example.com'
@@ -1,9 +0,0 @@
1
- [http]
2
- http.port=<%= port %>
3
- http.hostname=<%= environment %>.<%= domain_name %>
4
-
5
- [smtp]
6
- mail_domain_name=<%= domain_name %>
7
-
8
- [db]
9
- db.host=<%= database %>
@@ -1,6 +0,0 @@
1
- data_sources:
2
- - environment_json
3
- - file
4
- template_sources:
5
- - file
6
- exec: sleep 600
@@ -1,4 +0,0 @@
1
- array.erb:
2
- target: /tmp/array.txt
3
- config:
4
- default_value: 'This may be overridden by the JSON data source'
@@ -1,4 +0,0 @@
1
- simple_keys.erb:
2
- target: /tmp/simple_keys.txt
3
- config:
4
- default_value: 'This may be overridden by the JSON data source'
@@ -1,4 +0,0 @@
1
- This is a list of all servers:
2
- <% servers.each do |server| %>
3
- Server : <%= server -%>
4
- <% end %>
@@ -1,4 +0,0 @@
1
- Default value : <%= default_value %>
2
-
3
- * Key 1 is : <%= key1 %>
4
- * Key 2 is : <%= key2 %>
@@ -1,37 +0,0 @@
1
- # Example configuration file, demonstrating how to use Tiller.
2
- #
3
- # These examples create two templates with different values depending on if you set the environment to
4
- # "production" or "staging".
5
- #
6
- # This would be called with the following environment variables set (e.g. from a bash prompt) :
7
- #
8
- # tiller_base=$PWD/examples/etc/tiller tiller_lib=$PWD/examples/lib tiller
9
- #
10
- # (Tiller uses the "production" environment if none is set). Or, for staging:
11
- #
12
- # environment=staging tiller_base=$PWD/examples/etc/tiller tiller_lib=$PWD/examples/lib tiller
13
- #
14
- # See the documentation for more details on how to use this in a Dockerfile.
15
-
16
- # exec: The executable to handover to after execution. In a Dockerfile, this would probably be /usr/bin/supervisord
17
- # Or some other daemon. For testing, /usr/bin/date (or similar) is a useful one-shot command that just exits,
18
- # so you can inspect your templates.
19
- exec: date
20
-
21
- # data_sources: Sources of data. Here, we're pulling in the provided FileDataSource and EnvironmentDataSource (ships with
22
- # this gem), and also the NetworkDataSource under examples/lib/tiller. This is found because we set tiller_lib when we
23
- # called the tiller executable. We're not pulling in the example DummyDataSource, because it also provides target_values,
24
- # so would overwrite the target_values from FileDataSource - you should only have one DataSource providing this information,
25
- # otherwise your templates may end up in strange places you didn't expect!
26
- data_sources:
27
- - file
28
- - environment
29
- - network
30
-
31
-
32
- # template_sources: Sources of templates, in priority order (first takes precendence). Again using the provided
33
- # FileTemplateSource (uses templates under <tiller_base>/templates), and also because we set tiller_lib, we can use
34
- # DummyTemplateSource which creates a single "dummy.erb" template.
35
- template_sources:
36
- - file
37
- - dummy
@@ -1,27 +0,0 @@
1
- # Here is an example configuration file for your production environment.
2
-
3
- # We override a setting from common.yaml for this environment.
4
- common:
5
- api_enable: true
6
- exec: env
7
-
8
- # First, we define the values for an example sensu_client template :
9
- sensu_client.erb:
10
- target: /etc/sensu/conf.d/client.json
11
- config:
12
- sensu_host: 'sensu.example.com'
13
- sensu_subscriptions:
14
- - common
15
- - physical
16
- - mongo
17
-
18
- # This is a dummy template provided by the DummyTemplateSource. You'll notice that because we're not pulling in
19
- # DummyDataSource, the dummy_global variable is not set, but the template is still built without an error (the
20
- # value is just left blank).
21
- dummy.erb:
22
- target: /tmp/files/dummy.txt
23
- owner: root
24
- group: wheel
25
- perms: 0644
26
- config:
27
- dummy: 'Text from a filesource - production environment'
@@ -1,24 +0,0 @@
1
- # Here is an example configuration file for your staging environment.
2
-
3
- # First, we define the values for an example sensu_client template. In this example, we changed to including a "virtual"
4
- # subscription instead of "physical", which was set in the production environment.
5
- sensu_client.erb:
6
- target: /etc/sensu/conf.d/client.json
7
- config:
8
- sensu_host: 'sensu.example.com'
9
- sensu_subscriptions:
10
- - common
11
- - virtual
12
- - mongo
13
-
14
- # This is a dummy template provided by the DummyTemplateSource. You'll notice that because we're not pulling in
15
- # DummyDataSource, the dummy_global variable is not set, but the template is still built without an error (the
16
- # value is just left blank). Here we also write the file to a different location that the one in the production
17
- # environment.
18
- dummy.erb:
19
- target: /tmp/files/dummy-staging.txt
20
- owner: root
21
- group: wheel
22
- perms: 0644
23
- config:
24
- dummy: 'Text from a filesource - staging environment'
@@ -1,8 +0,0 @@
1
- {
2
- "client": {
3
- "name": "<%= fqdn %>",
4
- "address": "<%= ipv4_addresses[0][3] %>",
5
- "subscriptions": <%= sensu_subscriptions %>,
6
- "safe_mode": "false"
7
- }
8
- }
@@ -1,25 +0,0 @@
1
- # This is a "dummy" datasource for Tiller. All it does is provide a single
2
- # global and local value, and shows how you can provide a hash of target values
3
- # to configure where templates are written.
4
- class DummyDataSource < Tiller::DataSource
5
- def global_values
6
- { 'dummy_global' => 'dummy global replacement text' }
7
- end
8
-
9
- def values(_template_name)
10
- { 'dummy' => 'dummy replacement text' }
11
- end
12
-
13
- # Dummy values, useful for testing. Will just result in the template being
14
- # built and written to /tmp/dummy. Remember that perms must be in octal
15
- # (no quotes). Note that as you have the environment name in the @config hash,
16
- # you can always return different values for different environments.
17
- def target_values(template_name)
18
- {
19
- 'target' => "/tmp/dummy/#{template_name}",
20
- 'user' => 'root',
21
- 'group' => 'root',
22
- 'perms' => 0644
23
- }
24
- end
25
- end
@@ -1,15 +0,0 @@
1
- require 'socket'
2
- # This is a quick example of a global datasource for Tiller.
3
- # It shows how you might provide some basic network-related information to your
4
- # templates. It's a super quick and hacky, but serves as a useful example.
5
- # You can then do things like <%= fqdn %> or <%= ipv4_addresses[0][3] %> in
6
- # your templates.
7
- class NetworkDataSource < Tiller::DataSource
8
- def global_values
9
- # Note, these rely on DNS being available and configured correctly!
10
- {
11
- 'fqdn' => Socket.gethostbyname(Socket.gethostname).first,
12
- 'ipv4_addresses' => Socket.getaddrinfo(Socket.gethostbyname(Socket.gethostname).first, nil, :INET)
13
- }
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # This is another quick example of how to create a template source.
2
- class DummyTemplateSource < Tiller::TemplateSource
3
- # Just provide a single dummy template
4
- def templates
5
- ['dummy.erb']
6
- end
7
-
8
- # And return some sample ERB content.
9
- # Note that as you have the environment name in the @config hash, you can
10
- # always return different templates for different environments.
11
- def template(_template_name)
12
- "This is a dummy template! <%= dummy %> \n "\
13
- 'Here is a global value <%= dummy_global %>'
14
- end
15
- end