hiera-examiner 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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/hiera-examiner +10 -0
  3. data/lib/hiera-examiner.rb +102 -0
  4. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 75995a51092b3e500d8c5f564b74e3aa6c584387
4
+ data.tar.gz: af86a32b73b60ef46b27af16d0aa1e167f91295c
5
+ SHA512:
6
+ metadata.gz: 8eaef8d209fa6ac42152709240e2d1b69e112ed0163adb8fb33dd7d2ebc6e7d06f1c8fa22b02b420313f05a19695d7fb8d03677512ffdc8de9fb5933f8751c0a
7
+ data.tar.gz: 323b2f5539f9e0a199636cdbb8ddd482c054fc8f7b4065e6eaa02c3731e35ad66c35a3f9f0210edad12939a7c0ac4c05dc58f52745c0ab0b1232b3c8f775432d
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'hiera-examiner'
4
+ examiner = HieraExaminer.new()
5
+
6
+ if (ARGV[1])
7
+ HieraExaminer.new(ARGV[1])
8
+ end
9
+
10
+ examiner.explain(ARGV[0])
@@ -0,0 +1,102 @@
1
+ class HieraExaminer
2
+ require 'rubygems'
3
+ require 'hiera'
4
+ require 'hiera/backend'
5
+ require 'puppet'
6
+ require 'colorize'
7
+
8
+ def initialize(conf = "/vagrant/puppet/hiera/hiera.yaml")
9
+ @conf = conf
10
+ end
11
+
12
+ def yamlLookup(key)
13
+ scope = YAML.load("")
14
+ hiera = Hiera.new(:config => @conf)
15
+ value = {val: nil, file: nil}
16
+ Hiera::Backend.datasourcefiles('yaml', scope, 'yaml') { |source, file|
17
+ yaml = YAML.load_file(file)
18
+ if (yaml.has_key?(key) && value[:val] == nil)
19
+ value = {val: yaml[key], file: file}
20
+ end
21
+ }
22
+ return value
23
+ end
24
+
25
+ def hieraLookup(key)
26
+ scope = YAML.load("")
27
+ hiera = Hiera.new(:config => @conf)
28
+ return hiera.lookup(key, @conf, scope)
29
+ end
30
+
31
+ def explain(key)
32
+ puts "#{key.red}\n#{explainDetail(key, '', true)}"
33
+ end
34
+
35
+ def explainDetail(key, prefix = '', showSource = false, yamlFileParam = '')
36
+ startExp = /%{hiera\('/
37
+ endExp = /'\)}/
38
+
39
+ firstIndex = key.index(startExp)
40
+
41
+ if (firstIndex)
42
+ newIndex = firstIndex + 9
43
+ endIndex = key.index(endExp) - 1
44
+ padding = "#{prefix}#{' '.rjust((firstIndex + 2) - prefix.length)}"
45
+ yamlMap = yamlLookup(key[newIndex..endIndex])
46
+ yamlVal = yamlMap[:val]
47
+ yamlFile = yamlMap[:file]
48
+
49
+ newVal = ''
50
+ keyVal = key
51
+ if (firstIndex == 0)
52
+ keyVal = "#{key[0..endIndex + 3].bold.red}#{key[endIndex + 4..-1]}"
53
+ newVal += "#{yamlVal}#{key[endIndex + 4..-1]}"
54
+ else
55
+ keyVal = "#{key[0..firstIndex - 1]}#{key[firstIndex..endIndex + 3].bold.red}#{key[endIndex + 4..-1]}"
56
+ newVal += "#{key[0..firstIndex - 1]}#{yamlVal}#{key[endIndex + 4..-1]}"
57
+ end
58
+
59
+ if (showSource && !yamlFileParam.empty?())
60
+ yamlFileString = " \u2794 #{yamlFileParam}"
61
+ res = "#{keyVal}#{yamlFileString.cyan}\n"
62
+ else
63
+ res = "#{keyVal}\n"
64
+ end
65
+
66
+ res += "#{padding}#{"\u2B07".yellow}\n"
67
+ if yamlVal
68
+ yamlFileString = " \u2794 #{yamlFile}"
69
+ yamlVal = "#{yamlVal.bold.green}#{yamlFileString.cyan}"
70
+ else
71
+ yamlVal = 'MISSING'.magenta.blink
72
+ end
73
+ res += "#{padding}#{yamlVal}"
74
+ if (newVal.index(startExp))
75
+ res += "\n#{explainDetail(newVal, prefix)}"
76
+ end
77
+
78
+ return res
79
+ else
80
+ hieraVal = hieraLookup(key)
81
+ yamlMap = yamlLookup(key)
82
+ yamlVal = yamlMap[:val]
83
+ yamlFile = yamlMap[:file]
84
+
85
+ if (hieraVal.empty?() && yamlVal.empty?())
86
+ puts 'Unknown value'
87
+ elsif (yamlVal.index(startExp))
88
+ if (showSource)
89
+ res = explainDetail(yamlVal, "#{prefix}|", true, yamlFile)
90
+ else
91
+ res = explainDetail(yamlVal, "#{prefix}|")
92
+ end
93
+ res = "|\n#{res}\n#{hieraVal.green}"
94
+ return res
95
+ else
96
+ res = "|\n#{yamlVal}"
97
+ return res
98
+ end
99
+ end
100
+ end
101
+
102
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hiera-examiner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Stortz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple hiera gem
14
+ email: astortz@redstonecontentsolutions.com
15
+ executables:
16
+ - hiera-examiner
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/hiera-examiner
21
+ - lib/hiera-examiner.rb
22
+ homepage: http://www.redstonecontentsolutions.com
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.4.5
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: ''
46
+ test_files: []