hieracles 0.1.4 → 0.1.5
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +8 -2
- data/hc.1 +52 -9
- data/hieracles.gemspec +1 -0
- data/lib/hieracles/config.rb +2 -1
- data/lib/hieracles/interpolate.rb +23 -0
- data/lib/hieracles/node.rb +3 -2
- data/lib/hieracles/optparse.rb +12 -3
- data/lib/hieracles.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c2b378bf82fee62a7577b514281f9ed47af9886
|
4
|
+
data.tar.gz: 6af4a764f1138d3e274b5f72752d2602f32d3966
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64d4bd38c3e9859edd3c2583180f640fc318eae6f0dfbcf336f38d22b0b4ede390a1589f6c2d9b7b81c73f66ca5c85872015ec3f1dcd498b13937c2d023ef55e
|
7
|
+
data.tar.gz: 3f1e85e5a9dd5e726e1542be700c7a7e2838e017ee32bfff962d02b43985900956b0e7db50c95a7c0465dc5b9fba2691829de34c1a1c831e666f0d7a4f103380
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
Hieracles Changelog
|
2
2
|
=======================
|
3
3
|
|
4
|
+
### 0.1.5 - 2015-11-15
|
5
|
+
- add `interactive` new option `-i` for having
|
6
|
+
CLI user promtped to fill up missing scope vars
|
7
|
+
- implement interpolation adapted from the code of hiera
|
8
|
+
- fixed the single option parsing for `-i`
|
9
|
+
|
4
10
|
### 0.1.4 - 2015-11-13
|
5
11
|
- no real change, just preparing for BSD port
|
6
12
|
|
data/README.md
CHANGED
@@ -83,6 +83,7 @@ Usage
|
|
83
83
|
-v - displays version
|
84
84
|
-y <fact_file> - facts in yaml format
|
85
85
|
-j <fact_file> - facts in json format
|
86
|
+
-i - interactive mode
|
86
87
|
|
87
88
|
|
88
89
|
About facts aka. scope
|
@@ -99,7 +100,6 @@ Like with Hiera CLI you can use hieracles with defined top-scope variables. Thos
|
|
99
100
|
You can define a default scope in your configuration file `defaultscope` in `~/.confg/hieracles/config.yml`. For example:
|
100
101
|
|
101
102
|
---
|
102
|
-
colors: true
|
103
103
|
classpath: farm_modules/%s/manifests/init.pp
|
104
104
|
hierafile: dev/hiera-local.yaml
|
105
105
|
encpath: enc
|
@@ -113,6 +113,10 @@ In order the scope with be built from:
|
|
113
113
|
- if `-y <file>` option (or `-j`) is present the `defaultscope` in the config file will be totally ignored
|
114
114
|
- the `-p key=value` option with overide variable per variable
|
115
115
|
|
116
|
+
Note that if the scope var is not defined or if the file declared in hiera config is not found, this entry is silently ignored.
|
117
|
+
|
118
|
+
An option, `-i` enables the `interactive mode` in which you are prompted to fill up for undefined scope variables encountered in the hiera config file. This behavior can be made systematic by enabling `interactive: true` in hieracles configuration file.
|
119
|
+
|
116
120
|
|
117
121
|
Completion
|
118
122
|
-------------
|
@@ -122,13 +126,15 @@ If you use [oh-my-zsh][omz] put it in `~/.oh-my-zsh/completions`
|
|
122
126
|
|
123
127
|
wget -O ~/.oh-my-zsh/completions/_hc https://raw.githubusercontent.com/Gandi/hieracles/master/tools/completion/_hc
|
124
128
|
echo 'compdef _hc hc "bundle exec hc"' >> ~/.zshrc
|
125
|
-
|
129
|
+
echo 'autoload -U _hc' >> ~/.zshrc
|
130
|
+
|
126
131
|
Otherwise
|
127
132
|
|
128
133
|
mkdir ~/.zsh-completions
|
129
134
|
wget -O ~/.zsh-completions/_hc https://raw.githubusercontent.com/Gandi/hieracles/master/tools/completion/_hc
|
130
135
|
echo 'fpath=(~/.zsh-completions $fpath)' >> ~/.zshrc
|
131
136
|
echo 'compdef _hc hc "bundle exec hc"' >> ~/.zshrc
|
137
|
+
echo 'autoload -U _hc' >> ~/.zshrc
|
132
138
|
|
133
139
|
|
134
140
|
Debian packaging
|
data/hc.1
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.TH hc 1 "2015-11-08" "version 0.1.
|
1
|
+
.TH hc 1 "2015-11-08" "version 0.1.5" "Hieracles command manual"
|
2
2
|
|
3
3
|
.SH NAME
|
4
4
|
hc \- Command tool for Hieracles
|
@@ -13,10 +13,10 @@ hc \- Command tool for Hieracles
|
|
13
13
|
.SH DESCRIPTION
|
14
14
|
.PP
|
15
15
|
Hieracles is a command-line tool for analysis and deep examination
|
16
|
-
of [Hiera][hiera]
|
16
|
+
of [Hiera][hiera] parameters in a [Puppet][puppet] setup. It's used
|
17
17
|
internally at Gandi and its first incarnation is strongly
|
18
18
|
tied to Gandi puppet architecture. But Hieracles tends to become, in
|
19
|
-
time, a generic Hiera overlay
|
19
|
+
time, a generic Hiera overlay visualization tool.
|
20
20
|
.PP
|
21
21
|
hc command takes at minimum 2 arguments:
|
22
22
|
.RS 4
|
@@ -72,7 +72,7 @@ outputs version.
|
|
72
72
|
outputs in the selected format. Available formats are
|
73
73
|
csv, json, console, plain, yaml and rawyaml
|
74
74
|
.IP
|
75
|
-
Note that the difference
|
75
|
+
Note that the difference between yaml and rawyaml
|
76
76
|
is that rawyaml don't include comments with the
|
77
77
|
provenance of each params.
|
78
78
|
|
@@ -109,7 +109,7 @@ stated in the configfile.
|
|
109
109
|
.TP
|
110
110
|
.PD
|
111
111
|
.B \-\-basepath \fRpath
|
112
|
-
the basepath is prepended to the paths found in the configfile and the hierafile. Default is ./ but you can change
|
112
|
+
the basepath is prepended to the paths found in the configfile and the hierafile. Default is ./ but you can change this using the -b option.
|
113
113
|
|
114
114
|
.TP
|
115
115
|
.PD 0
|
@@ -117,9 +117,52 @@ the basepath is prepended to the paths found in the configfile and the hierafile
|
|
117
117
|
.TP
|
118
118
|
.PD
|
119
119
|
.B \-\-encdir \fRpath
|
120
|
-
encdir is where we can find the ENC definitions. It's stated in the configfile but can be
|
120
|
+
encdir is where we can find the ENC definitions. It's stated in the configfile but can be overridden by the -e option.
|
121
121
|
|
122
122
|
|
123
|
+
.TP
|
124
|
+
.PD 0
|
125
|
+
.B \-y \fRfile
|
126
|
+
.TP
|
127
|
+
.PD
|
128
|
+
.B \-\-yaml \fRfile
|
129
|
+
use an arbitrary facts file that can be obtained with
|
130
|
+
.B "facter -y"
|
131
|
+
on the given node. This is useful for having a set of default fact
|
132
|
+
and test locally what would be the consequences of switching from
|
133
|
+
one environment to another. It's also good for anticipation
|
134
|
+
of how new node, that don't have facts yet, will behave.
|
135
|
+
|
136
|
+
|
137
|
+
.TP
|
138
|
+
.PD 0
|
139
|
+
.B \-j \fRfile
|
140
|
+
.TP
|
141
|
+
.PD
|
142
|
+
.B \-\-json \fRfile
|
143
|
+
same as the
|
144
|
+
.B "-y"
|
145
|
+
flag but in json format, which can be obtained on the node with
|
146
|
+
.B "facter -j"
|
147
|
+
and this behave the same way. Note that the \-y has precedence on
|
148
|
+
the \-j in this context.
|
149
|
+
|
150
|
+
|
151
|
+
.TP
|
152
|
+
.PD 0
|
153
|
+
.B \-i
|
154
|
+
.TP
|
155
|
+
.PD
|
156
|
+
.B \-\-interactive
|
157
|
+
if a scope var is not defined or if the file declared in hiera config is not found, this entry is silently ignored.
|
158
|
+
.RS
|
159
|
+
This option enables the
|
160
|
+
.B "interactive mode"
|
161
|
+
in which you are prompted to fill up for undefined scope variables encountered in the hiera config file. This behavior can be made systematic by enabling
|
162
|
+
.I "interactive: true"
|
163
|
+
in hieracles configuration file.
|
164
|
+
.RE
|
165
|
+
|
123
166
|
.SH FILES
|
124
167
|
.I ~/.config/hieracles/config.yaml
|
125
168
|
.RS
|
@@ -132,9 +175,6 @@ A typical config file would look like:
|
|
132
175
|
---
|
133
176
|
.RE
|
134
177
|
.RS
|
135
|
-
colors: true
|
136
|
-
.RE
|
137
|
-
.RS
|
138
178
|
classpath: farm_modules/%s/manifests/init.pp
|
139
179
|
.RE
|
140
180
|
.RS
|
@@ -143,6 +183,9 @@ hierafile: dev/hiera-local.yaml
|
|
143
183
|
.RS
|
144
184
|
encpath: enc
|
145
185
|
.RE
|
186
|
+
.RS
|
187
|
+
interactive: false
|
188
|
+
.RE
|
146
189
|
|
147
190
|
.SH SEE ALSO
|
148
191
|
hiera(1), puppet(8)
|
data/hieracles.gemspec
CHANGED
data/lib/hieracles/config.rb
CHANGED
@@ -10,7 +10,7 @@ module Hieracles
|
|
10
10
|
extend self
|
11
11
|
|
12
12
|
attr_reader :extraparams, :server, :classpath, :scope,
|
13
|
-
:modulepath, :hierafile, :basepath, :encpath, :format
|
13
|
+
:modulepath, :hierafile, :basepath, :encpath, :format, :interactive
|
14
14
|
|
15
15
|
def load(options)
|
16
16
|
@optionfile = options[:config] || defaultconfig
|
@@ -27,6 +27,7 @@ module Hieracles
|
|
27
27
|
facts_file = options[:yaml_facts] || options[:json_facts]
|
28
28
|
facts_format = options[:json_facts] ? :json : :yaml
|
29
29
|
@scope = sym_keys((facts_file && load_facts(facts_file, facts_format)) || values['defaultscope'] || {})
|
30
|
+
@interactive = options[:interactive] || values['interactive']
|
30
31
|
end
|
31
32
|
|
32
33
|
def initconfig(file)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Hieracles
|
2
|
+
module Interpolate
|
3
|
+
|
4
|
+
def parse(data, values, interactive = false)
|
5
|
+
data.gsub(/%\{(?:(scope|hiera|literal|alias) *)?([^\}]*)\}/) do |match|
|
6
|
+
if interactive && !values[$2.to_sym]
|
7
|
+
puts
|
8
|
+
puts "#{match} is not defined."
|
9
|
+
puts "Is it missing in your ENC source?"
|
10
|
+
puts "Maybe you should define a default value for that scope variable in your config file?"
|
11
|
+
puts "Do you want to provide a temmporary value? [input value]"
|
12
|
+
print "#{$2} = "
|
13
|
+
val = $stdin.gets.chomp
|
14
|
+
values[$2.to_sym] = val
|
15
|
+
val
|
16
|
+
else
|
17
|
+
values[$2.to_sym]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/hieracles/node.rb
CHANGED
@@ -5,6 +5,7 @@ require "yaml"
|
|
5
5
|
module Hieracles
|
6
6
|
class Node
|
7
7
|
include Hieracles::Utils
|
8
|
+
include Hieracles::Interpolate
|
8
9
|
|
9
10
|
attr_reader :hiera_params, :hiera
|
10
11
|
|
@@ -28,8 +29,8 @@ module Hieracles
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def files(without_common = true)
|
31
|
-
@hiera.hierarchy.reduce([]) do |a, f|
|
32
|
-
file =
|
32
|
+
@__files ||= @hiera.hierarchy.reduce([]) do |a, f|
|
33
|
+
file = parse("#{f}.yaml", @hiera_params, Config.interactive)
|
33
34
|
if file &&
|
34
35
|
File.exist?(File.join(@hiera.datapath, file)) &&
|
35
36
|
(!without_common ||
|
data/lib/hieracles/optparse.rb
CHANGED
@@ -40,6 +40,10 @@ module Hieracles
|
|
40
40
|
json_facts: {
|
41
41
|
has_arg: true,
|
42
42
|
aliases: ['j', 'json']
|
43
|
+
},
|
44
|
+
interactive: {
|
45
|
+
has_arg: false,
|
46
|
+
aliases: ['i', 'interactive']
|
43
47
|
}
|
44
48
|
}
|
45
49
|
|
@@ -49,8 +53,13 @@ module Hieracles
|
|
49
53
|
ok = optionkeys
|
50
54
|
while x = array.shift
|
51
55
|
if x[0] == '-'
|
52
|
-
|
53
|
-
|
56
|
+
found = ok[x[/[a-z][-_a-z]*$/]]
|
57
|
+
if found
|
58
|
+
if found[:has_args]
|
59
|
+
@options[found[:var]] = array.shift
|
60
|
+
else
|
61
|
+
@options[found[:var]] = true
|
62
|
+
end
|
54
63
|
else
|
55
64
|
array.shift
|
56
65
|
end
|
@@ -64,7 +73,7 @@ module Hieracles
|
|
64
73
|
back = {}
|
65
74
|
OPTIONS.each do |k, v|
|
66
75
|
v[:aliases].each do |a|
|
67
|
-
back[a] = k
|
76
|
+
back[a] = { var: k, has_args: v[:has_arg] }
|
68
77
|
end
|
69
78
|
end
|
70
79
|
back
|
data/lib/hieracles.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hieracles
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mose
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/hieracles/formats/yaml.rb
|
122
122
|
- lib/hieracles/help.rb
|
123
123
|
- lib/hieracles/hiera.rb
|
124
|
+
- lib/hieracles/interpolate.rb
|
124
125
|
- lib/hieracles/node.rb
|
125
126
|
- lib/hieracles/optparse.rb
|
126
127
|
- lib/hieracles/registry.rb
|