erb-hiera 0.1.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 +7 -0
- data/README.md +7 -0
- data/bin/erb-hiera +7 -0
- data/lib/erb-hiera/cli.rb +35 -0
- data/lib/erb-hiera/directory.rb +27 -0
- data/lib/erb-hiera/hiera.rb +23 -0
- data/lib/erb-hiera/manifest.rb +18 -0
- data/lib/erb-hiera/version.rb +5 -0
- data/lib/erb-hiera.rb +52 -0
- metadata +136 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ea64b7716377b7b90cdfd4669a64e4bf033d1f64
|
4
|
+
data.tar.gz: fb9cb28457b2d6ddcecd0b2bac13f305bd4f99f1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9f6de6ccad5887a6ee433d546a4b919f813561918f50e7515b99f5a9e5bbcc165d6cda8e45e9ce650a6f73b0bb18233b9b5d83b8a123f163751186d035b315b0
|
7
|
+
data.tar.gz: fb1ac2c5895715d6b55b201b30122d1b65cccc42d7a1e5e4f8e9a24515a46ae0ddfc039d2ad18bd8daa0924dc07d35aae74b3a796a0e37ef7969408ffa96f7be
|
data/README.md
ADDED
data/bin/erb-hiera
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "trollop"
|
2
|
+
|
3
|
+
module ErbHiera
|
4
|
+
module CLI
|
5
|
+
def self.parse
|
6
|
+
option_parser = Trollop::Parser.new do
|
7
|
+
opt :config, "specify config file", :type => :string
|
8
|
+
opt :hiera_config, "specify hiera config file", :type => :string
|
9
|
+
opt :verbose, "print compiled templates"
|
10
|
+
opt :debug, "print backtrace on error"
|
11
|
+
opt :dry_run, "don't write out files"
|
12
|
+
end
|
13
|
+
|
14
|
+
options = Trollop.with_standard_exception_handling(option_parser) do
|
15
|
+
# show help if no cli args are provided
|
16
|
+
raise Trollop::HelpNeeded if ARGV.empty?
|
17
|
+
|
18
|
+
option_parser.parse ARGV
|
19
|
+
end
|
20
|
+
|
21
|
+
# validate cli args
|
22
|
+
raise ArgumentError, "config file not specified" unless options[:config_given]
|
23
|
+
raise ArgumentError, "config file not readable" unless File.readable?(options[:config])
|
24
|
+
|
25
|
+
raise ArgumentError, "hiera config file not specified" unless options[:hiera_config_given]
|
26
|
+
raise ArgumentError, "hiera config file not readable" unless File.readable?(options[:hiera_config])
|
27
|
+
|
28
|
+
options
|
29
|
+
rescue => error
|
30
|
+
puts error
|
31
|
+
puts error.backtrace if options[:debug]
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module ErbHiera
|
2
|
+
module Directory
|
3
|
+
def self.bin
|
4
|
+
File.dirname(__FILE__)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.root
|
8
|
+
File.join(bin, "..")
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.output(manifest)
|
12
|
+
Match.path(manifest, /manifest\/(.*)/)
|
13
|
+
end
|
14
|
+
|
15
|
+
module Match
|
16
|
+
def self.path(path, regexp)
|
17
|
+
result = path.match(regexp)
|
18
|
+
|
19
|
+
if result.length != 2
|
20
|
+
raise StandardError, "failed to match regexp for path: #{regexp}/#{path}"
|
21
|
+
end
|
22
|
+
|
23
|
+
result[1]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "hiera"
|
2
|
+
|
3
|
+
module ErbHiera
|
4
|
+
module Hiera
|
5
|
+
def self.hiera(key)
|
6
|
+
hiera = ::Hiera.new(:config => options[:hiera_config])
|
7
|
+
::Hiera.logger = "noop"
|
8
|
+
value = hiera.lookup(key, nil, ErbHiera.scope, nil, :priority)
|
9
|
+
|
10
|
+
unless value
|
11
|
+
puts "\nerror: cannot find value for key: #{key}"
|
12
|
+
exit 1
|
13
|
+
end
|
14
|
+
|
15
|
+
puts "# #{key}: #{value}" if ErbHiera.options[:verbose]
|
16
|
+
value
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.get_binding
|
20
|
+
binding
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ErbHiera
|
2
|
+
module Manifest
|
3
|
+
def self.info(manifest, out_file)
|
4
|
+
puts heading(out_file)
|
5
|
+
puts "#"
|
6
|
+
puts "# scope:"
|
7
|
+
puts "#{ErbHiera.scope.to_yaml.to_s.gsub(/^/, '# ')}"
|
8
|
+
puts "#"
|
9
|
+
puts "# in: #{manifest}"
|
10
|
+
puts "# out: #{out_file}"
|
11
|
+
puts "#"
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.heading(out_file)
|
15
|
+
"\n# #{out_file.gsub(/.*\/conf\//, '').split("/").join(" / ")}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/erb-hiera.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "erb"
|
4
|
+
require "yaml"
|
5
|
+
require "fileutils"
|
6
|
+
|
7
|
+
require "erb-hiera/version"
|
8
|
+
require "erb-hiera/cli"
|
9
|
+
require "erb-hiera/directory"
|
10
|
+
require "erb-hiera/hiera"
|
11
|
+
require "erb-hiera/manifest"
|
12
|
+
|
13
|
+
module ErbHiera
|
14
|
+
class << self
|
15
|
+
attr_accessor :options, :scope
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.run
|
19
|
+
@options = CLI.parse
|
20
|
+
|
21
|
+
mappings.each do |config|
|
22
|
+
ErbHiera.scope = config["scope"]
|
23
|
+
in_dir = config["in_dir"]
|
24
|
+
out_dir = config["out_dir"]
|
25
|
+
|
26
|
+
manifests(in_dir).each do |manifest|
|
27
|
+
out_file = File.join(out_dir ,manifest.gsub(in_dir, ""))
|
28
|
+
|
29
|
+
Manifest.info(manifest, out_file) if options[:verbose]
|
30
|
+
|
31
|
+
erb = ERB.new(File.read(manifest), nil, "-").result(Hiera.get_binding)
|
32
|
+
|
33
|
+
puts erb if options[:verbose]
|
34
|
+
|
35
|
+
unless options[:dry_run]
|
36
|
+
FileUtils.mkdir_p File.dirname(out_file) unless Dir.exists?(File.dirname(out_file))
|
37
|
+
File.write(out_file, erb)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def self.mappings
|
46
|
+
YAML.load_file(options[:config])
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.manifests(dir)
|
50
|
+
Dir.glob(File.join(dir, "**", "*.yaml"))
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: erb-hiera
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rob Wilson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: hiera
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: trollop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Generate documents from a scope, ERB template(s) and Hiera data
|
98
|
+
email: roobert@gmail.com
|
99
|
+
executables:
|
100
|
+
- erb-hiera
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- README.md
|
105
|
+
- bin/erb-hiera
|
106
|
+
- lib/erb-hiera.rb
|
107
|
+
- lib/erb-hiera/cli.rb
|
108
|
+
- lib/erb-hiera/directory.rb
|
109
|
+
- lib/erb-hiera/hiera.rb
|
110
|
+
- lib/erb-hiera/manifest.rb
|
111
|
+
- lib/erb-hiera/version.rb
|
112
|
+
homepage: https://github.com/roobert/erb-hiera
|
113
|
+
licenses:
|
114
|
+
- MIT
|
115
|
+
metadata: {}
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 2.6.8
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: ERB Hiera Document Generator
|
136
|
+
test_files: []
|