jerakia 0.0.8
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/bin/jerakia +71 -0
- data/lib/hiera/backend/jerakia_backend.rb +67 -0
- data/lib/jerakia/answer.rb +36 -0
- data/lib/jerakia/cache.rb +24 -0
- data/lib/jerakia/config.rb +25 -0
- data/lib/jerakia/datamodel.rb +9 -0
- data/lib/jerakia/datasource/dummy.rb +17 -0
- data/lib/jerakia/datasource/file/yaml.rb +17 -0
- data/lib/jerakia/datasource/file.rb +65 -0
- data/lib/jerakia/datasource.rb +39 -0
- data/lib/jerakia/launcher.rb +34 -0
- data/lib/jerakia/log.rb +52 -0
- data/lib/jerakia/lookup.rb +92 -0
- data/lib/jerakia/plugins/lookup/confine.rb +20 -0
- data/lib/jerakia/plugins/lookup/hiera_compat.rb +26 -0
- data/lib/jerakia/policy.rb +65 -0
- data/lib/jerakia/request.rb +21 -0
- data/lib/jerakia/response/filter/encryption.rb +56 -0
- data/lib/jerakia/response/filter/strsub.rb +35 -0
- data/lib/jerakia/response/filter.rb +9 -0
- data/lib/jerakia/response.rb +57 -0
- data/lib/jerakia/scope/metadata.rb +18 -0
- data/lib/jerakia/scope.rb +14 -0
- data/lib/jerakia/test.pp +302 -0
- data/lib/jerakia/util.rb +52 -0
- data/lib/jerakia.rb +72 -0
- data/lib/puppet/indirector/data_binding/jerakia.rb +37 -0
- data/lib/puppet/indirector/data_binding/jerakia_rest.rb +46 -0
- data/lib/test.pp +302 -0
- metadata +73 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
# Parts of this class are copied from https://github.com/TomPoulton/hiera-eyaml/blob/master/lib/hiera/backend/eyaml_backend.rb
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2013 Tom Poulton
|
5
|
+
#
|
6
|
+
# Other code Copyright (c) 2014 Craig Dunn, Apache 2.0 License.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'hiera/backend/eyaml/encryptor'
|
10
|
+
require 'hiera/backend/eyaml/utils'
|
11
|
+
require 'hiera/backend/eyaml/options'
|
12
|
+
require 'hiera/backend/eyaml/parser/parser'
|
13
|
+
require 'hiera/filecache'
|
14
|
+
|
15
|
+
require 'yaml'
|
16
|
+
|
17
|
+
class Jerakia::Response
|
18
|
+
module Filter
|
19
|
+
module Encryption
|
20
|
+
|
21
|
+
def filter_encryption(opts={})
|
22
|
+
parse_values do |val|
|
23
|
+
if val.is_a?(String)
|
24
|
+
decrypt val
|
25
|
+
end
|
26
|
+
val
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def decrypt(data)
|
31
|
+
if encrypted?(data)
|
32
|
+
public_key = config["eyaml"]["public_key"]
|
33
|
+
private_key = config["eyaml"]["private_key"]
|
34
|
+
Hiera::Backend::Eyaml::Options[:pkcs7_private_key] = private_key
|
35
|
+
Hiera::Backend::Eyaml::Options[:pkcs7_public_key] = public_key
|
36
|
+
parser = Hiera::Backend::Eyaml::Parser::ParserFactory.hiera_backend_parser
|
37
|
+
|
38
|
+
tokens = parser.parse(data)
|
39
|
+
decrypted = tokens.map{ |token| token.to_plain_text }
|
40
|
+
plaintext = decrypted.join
|
41
|
+
Jerakia.log.debug(plaintext)
|
42
|
+
plaintext.chomp!
|
43
|
+
data.clear.insert(0,plaintext)
|
44
|
+
else
|
45
|
+
data
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def encrypted?(data)
|
50
|
+
/.*ENC\[.*?\]/ =~ data ? true : false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# strsub is in output filter that matches tags in data and replaces them
|
2
|
+
# for values in the scope. It mimics the hiera features of being able to
|
3
|
+
# embed %{::var} in YAML documents. This output filter may not provide
|
4
|
+
# 100% compatibility to hiera but it should cover most scenarios.
|
5
|
+
#
|
6
|
+
# Jerakia does not support method or literal interpolations, just straightforward %{var} and %{::var}
|
7
|
+
#
|
8
|
+
# ::var will be lookuped up as scope[:var]
|
9
|
+
|
10
|
+
class Jerakia::Response
|
11
|
+
module Filter
|
12
|
+
module Strsub
|
13
|
+
|
14
|
+
def filter_strsub(opts={})
|
15
|
+
parse_values do |val|
|
16
|
+
if val.is_a?(String)
|
17
|
+
do_substr(val)
|
18
|
+
end
|
19
|
+
val
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def do_substr(data)
|
24
|
+
data.gsub!(/%\{([^\}]*)\}/) do |tag|
|
25
|
+
Jerakia.log.debug("matched substr #{tag}")
|
26
|
+
scopekey = tag.match(/\{([^\}]+)\}/)[1]
|
27
|
+
scopekey.gsub!(/^::/,'')
|
28
|
+
lookup.scope[scopekey.to_sym]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Jerakia::Response < Jerakia
|
2
|
+
|
3
|
+
attr_accessor :entries
|
4
|
+
attr_reader :lookup
|
5
|
+
|
6
|
+
def initialize(lookup)
|
7
|
+
@entries=[]
|
8
|
+
@lookup=lookup
|
9
|
+
require 'jerakia/response/filter'
|
10
|
+
extend Jerakia::Response::Filter
|
11
|
+
end
|
12
|
+
|
13
|
+
def want?
|
14
|
+
if lookup.request.lookup_type == :first && entries.length > 0
|
15
|
+
return false
|
16
|
+
else
|
17
|
+
return true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def submit(val)
|
22
|
+
Jerakia.log.debug "Backend submitted #{val}"
|
23
|
+
unless want?
|
24
|
+
no_more_answers
|
25
|
+
else
|
26
|
+
@entries << {
|
27
|
+
:value => val,
|
28
|
+
:datatype => val.class.to_s.downcase
|
29
|
+
}
|
30
|
+
Jerakia.log.debug "Added answer #{val}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def values
|
35
|
+
Jerakia::Util.walk(@entries) do |entry|
|
36
|
+
yield entry
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def parse_values
|
41
|
+
@entries.map! do |entry|
|
42
|
+
Jerakia::Util.walk(entry[:value]) do |v|
|
43
|
+
yield v
|
44
|
+
end
|
45
|
+
entry
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
def no_more_answers
|
53
|
+
Jerakia.log.debug "warning: backend tried to submit too many answers"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Default scope handler, this handler creates the scope using the
|
2
|
+
# key value pairs from the metadata of the request object
|
3
|
+
#
|
4
|
+
# This is by far the simplest scope handler, others can be more
|
5
|
+
# complex and build the scope.value hash from MCollective, PuppetDB
|
6
|
+
# or other data sources
|
7
|
+
#
|
8
|
+
#
|
9
|
+
class Jerakia::Scope
|
10
|
+
module Metadata
|
11
|
+
def create
|
12
|
+
request.metadata.each_pair do |key, val|
|
13
|
+
value[key.to_sym] = val
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Jerakia::Scope < Jerakia::Policy
|
2
|
+
|
3
|
+
attr_reader :value
|
4
|
+
attr_reader :handler
|
5
|
+
|
6
|
+
def initialize(handler=nil)
|
7
|
+
@value = {}
|
8
|
+
@handler ||= request.scope || :metadata
|
9
|
+
Jerakia::Util.autoload('scope', @handler)
|
10
|
+
instance_eval "extend Jerakia::Scope::#{@handler.to_s.capitalize}"
|
11
|
+
create
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/lib/jerakia/test.pp
ADDED
@@ -0,0 +1,302 @@
|
|
1
|
+
class apache ( $port='foo' ,
|
2
|
+
$foo1='',
|
3
|
+
$foo2='',
|
4
|
+
$foo3='',
|
5
|
+
$foo4='',
|
6
|
+
$foo5='',
|
7
|
+
$foo6='',
|
8
|
+
$foo7='',
|
9
|
+
$foo8='',
|
10
|
+
$foo9='',
|
11
|
+
$foo10='',
|
12
|
+
$foo11='',
|
13
|
+
$foo12='',
|
14
|
+
$foo13='',
|
15
|
+
$foo14='',
|
16
|
+
$foo15='',
|
17
|
+
$foo16='',
|
18
|
+
$foo17='',
|
19
|
+
$foo18='',
|
20
|
+
$foo19='',
|
21
|
+
$foo20='',
|
22
|
+
$foo21='',
|
23
|
+
$foo22='',
|
24
|
+
$foo23='',
|
25
|
+
$foo24='',
|
26
|
+
$foo26='',
|
27
|
+
$bar1='',
|
28
|
+
$bar2='',
|
29
|
+
$bar3='',
|
30
|
+
$bar4='',
|
31
|
+
$bar5='',
|
32
|
+
$bar6='',
|
33
|
+
$bar7='',
|
34
|
+
$bar8='',
|
35
|
+
$bar9='',
|
36
|
+
$bar10='',
|
37
|
+
$bar11='',
|
38
|
+
$bar12='',
|
39
|
+
$bar13='',
|
40
|
+
$bar14='',
|
41
|
+
$bar15='',
|
42
|
+
$bar16='',
|
43
|
+
$bar17='',
|
44
|
+
$bar18='',
|
45
|
+
$bar19='',
|
46
|
+
$bar20='',
|
47
|
+
$bar21='',
|
48
|
+
$bar22='',
|
49
|
+
$bar23='',
|
50
|
+
$bar24='',
|
51
|
+
$foooo1='',
|
52
|
+
$foooo2='',
|
53
|
+
$foooo3='',
|
54
|
+
$foooo4='',
|
55
|
+
$foooo5='',
|
56
|
+
$foooo6='',
|
57
|
+
$foooo7='',
|
58
|
+
$foooo8='',
|
59
|
+
$foooo9='',
|
60
|
+
$foooo10='',
|
61
|
+
$foooo11='',
|
62
|
+
$foooo12='',
|
63
|
+
$foooo13='',
|
64
|
+
$foooo14='',
|
65
|
+
$foooo15='',
|
66
|
+
$foooo16='',
|
67
|
+
$foooo17='',
|
68
|
+
$foooo18='',
|
69
|
+
$foooo19='',
|
70
|
+
$foooo20='',
|
71
|
+
$foooo21='',
|
72
|
+
$foooo22='',
|
73
|
+
$foooo23='',
|
74
|
+
$foooo24='',
|
75
|
+
$foooo26='',
|
76
|
+
$baaar1='',
|
77
|
+
$baaar2='',
|
78
|
+
$baaar3='',
|
79
|
+
$baaar4='',
|
80
|
+
$baaar5='',
|
81
|
+
$baaar6='',
|
82
|
+
$baaar7='',
|
83
|
+
$baaar8='',
|
84
|
+
$baaar9='',
|
85
|
+
$baaar10='',
|
86
|
+
$baaar11='',
|
87
|
+
$baaar12='',
|
88
|
+
$baaar13='',
|
89
|
+
$baaar14='',
|
90
|
+
$baaar15='',
|
91
|
+
$baaar16='',
|
92
|
+
$baaar17='',
|
93
|
+
$baaar18='',
|
94
|
+
$baaar19='',
|
95
|
+
$baaar20='',
|
96
|
+
$baaar21='',
|
97
|
+
$baaar22='',
|
98
|
+
$baaar23='',
|
99
|
+
$baaar24='',
|
100
|
+
$fooz1='',
|
101
|
+
$fooz2='',
|
102
|
+
$fooz3='',
|
103
|
+
$fooz4='',
|
104
|
+
$fooz5='',
|
105
|
+
$fooz6='',
|
106
|
+
$fooz7='',
|
107
|
+
$fooz8='',
|
108
|
+
$fooz9='',
|
109
|
+
$fooz10='',
|
110
|
+
$fooz11='',
|
111
|
+
$fooz12='',
|
112
|
+
$fooz13='',
|
113
|
+
$fooz14='',
|
114
|
+
$fooz15='',
|
115
|
+
$fooz16='',
|
116
|
+
$fooz17='',
|
117
|
+
$fooz18='',
|
118
|
+
$fooz19='',
|
119
|
+
$fooz20='',
|
120
|
+
$fooz21='',
|
121
|
+
$fooz22='',
|
122
|
+
$fooz23='',
|
123
|
+
$fooz24='',
|
124
|
+
$fooz26='',
|
125
|
+
$barz1='',
|
126
|
+
$barz2='',
|
127
|
+
$barz3='',
|
128
|
+
$barz4='',
|
129
|
+
$barz5='',
|
130
|
+
$barz6='',
|
131
|
+
$barz7='',
|
132
|
+
$barz8='',
|
133
|
+
$barz9='',
|
134
|
+
$barz10='',
|
135
|
+
$barz11='',
|
136
|
+
$barz12='',
|
137
|
+
$barz13='',
|
138
|
+
$barz14='',
|
139
|
+
$barz15='',
|
140
|
+
$barz16='',
|
141
|
+
$barz17='',
|
142
|
+
$barz18='',
|
143
|
+
$barz19='',
|
144
|
+
$barz20='',
|
145
|
+
$barz21='',
|
146
|
+
$barz22='',
|
147
|
+
$barz23='',
|
148
|
+
$barz24='',
|
149
|
+
$foo10='',
|
150
|
+
$foo20='',
|
151
|
+
$foo30='',
|
152
|
+
$foo40='',
|
153
|
+
$foo50='',
|
154
|
+
$foo60='',
|
155
|
+
$foo70='',
|
156
|
+
$foo80='',
|
157
|
+
$foo90='',
|
158
|
+
$foo100='',
|
159
|
+
$foo110='',
|
160
|
+
$foo120='',
|
161
|
+
$foo130='',
|
162
|
+
$foo140='',
|
163
|
+
$foo150='',
|
164
|
+
$foo160='',
|
165
|
+
$foo170='',
|
166
|
+
$foo180='',
|
167
|
+
$foo190='',
|
168
|
+
$foo200='',
|
169
|
+
$foo210='',
|
170
|
+
$foo220='',
|
171
|
+
$foo230='',
|
172
|
+
$foo240='',
|
173
|
+
$foo260='',
|
174
|
+
$bar10='',
|
175
|
+
$bar20='',
|
176
|
+
$bar30='',
|
177
|
+
$bar40='',
|
178
|
+
$bar50='',
|
179
|
+
$bar60='',
|
180
|
+
$bar70='',
|
181
|
+
$bar80='',
|
182
|
+
$bar90='',
|
183
|
+
$bar100='',
|
184
|
+
$bar110='',
|
185
|
+
$bar120='',
|
186
|
+
$bar130='',
|
187
|
+
$bar140='',
|
188
|
+
$bar150='',
|
189
|
+
$bar160='',
|
190
|
+
$bar170='',
|
191
|
+
$bar180='',
|
192
|
+
$bar190='',
|
193
|
+
$bar200='',
|
194
|
+
$bar210='',
|
195
|
+
$bar220='',
|
196
|
+
$bar230='',
|
197
|
+
$bar240='',
|
198
|
+
$foooo10='',
|
199
|
+
$foooo20='',
|
200
|
+
$foooo30='',
|
201
|
+
$foooo40='',
|
202
|
+
$foooo50='',
|
203
|
+
$foooo60='',
|
204
|
+
$foooo70='',
|
205
|
+
$foooo80='',
|
206
|
+
$foooo90='',
|
207
|
+
$foooo100='',
|
208
|
+
$foooo110='',
|
209
|
+
$foooo120='',
|
210
|
+
$foooo130='',
|
211
|
+
$foooo140='',
|
212
|
+
$foooo150='',
|
213
|
+
$foooo160='',
|
214
|
+
$foooo170='',
|
215
|
+
$foooo180='',
|
216
|
+
$foooo190='',
|
217
|
+
$foooo200='',
|
218
|
+
$foooo210='',
|
219
|
+
$foooo220='',
|
220
|
+
$foooo230='',
|
221
|
+
$foooo240='',
|
222
|
+
$foooo260='',
|
223
|
+
$baaar10='',
|
224
|
+
$baaar20='',
|
225
|
+
$baaar30='',
|
226
|
+
$baaar40='',
|
227
|
+
$baaar50='',
|
228
|
+
$baaar60='',
|
229
|
+
$baaar70='',
|
230
|
+
$baaar80='',
|
231
|
+
$baaar90='',
|
232
|
+
$baaar100='',
|
233
|
+
$baaar110='',
|
234
|
+
$baaar120='',
|
235
|
+
$baaar130='',
|
236
|
+
$baaar140='',
|
237
|
+
$baaar150='',
|
238
|
+
$baaar160='',
|
239
|
+
$baaar170='',
|
240
|
+
$baaar180='',
|
241
|
+
$baaar190='',
|
242
|
+
$baaar200='',
|
243
|
+
$baaar210='',
|
244
|
+
$baaar220='',
|
245
|
+
$baaar230='',
|
246
|
+
$baaar240='',
|
247
|
+
$fooz10='',
|
248
|
+
$fooz20='',
|
249
|
+
$fooz30='',
|
250
|
+
$fooz40='',
|
251
|
+
$fooz50='',
|
252
|
+
$fooz60='',
|
253
|
+
$fooz70='',
|
254
|
+
$fooz80='',
|
255
|
+
$fooz90='',
|
256
|
+
$fooz100='',
|
257
|
+
$fooz110='',
|
258
|
+
$fooz120='',
|
259
|
+
$fooz130='',
|
260
|
+
$fooz140='',
|
261
|
+
$fooz150='',
|
262
|
+
$fooz160='',
|
263
|
+
$fooz170='',
|
264
|
+
$fooz180='',
|
265
|
+
$fooz190='',
|
266
|
+
$fooz200='',
|
267
|
+
$fooz210='',
|
268
|
+
$fooz220='',
|
269
|
+
$fooz230='',
|
270
|
+
$fooz240='',
|
271
|
+
$fooz260='',
|
272
|
+
$barz10='',
|
273
|
+
$barz20='',
|
274
|
+
$barz30='',
|
275
|
+
$barz40='',
|
276
|
+
$barz50='',
|
277
|
+
$barz60='',
|
278
|
+
$barz70='',
|
279
|
+
$barz80='',
|
280
|
+
$barz90='',
|
281
|
+
$barz100='',
|
282
|
+
$barz110='',
|
283
|
+
$barz120='',
|
284
|
+
$barz130='',
|
285
|
+
$barz140='',
|
286
|
+
$barz150='',
|
287
|
+
$barz160='',
|
288
|
+
$barz170='',
|
289
|
+
$barz180='',
|
290
|
+
$barz190='',
|
291
|
+
$barz200='',
|
292
|
+
$barz210='',
|
293
|
+
$barz220='',
|
294
|
+
$barz230='',
|
295
|
+
$barz240='',
|
296
|
+
) {
|
297
|
+
|
298
|
+
|
299
|
+
notify { $port: }
|
300
|
+
}
|
301
|
+
|
302
|
+
include apache
|
data/lib/jerakia/util.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
class Jerakia
|
2
|
+
module Util
|
3
|
+
class << self
|
4
|
+
def autoload(path,mod)
|
5
|
+
Jerakia.log.debug "autoloading #{path} #{mod}"
|
6
|
+
require "jerakia/#{path}/#{mod.to_s}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def walk(data)
|
10
|
+
if data.is_a?(Hash)
|
11
|
+
walk_hash(data) do |target|
|
12
|
+
yield target
|
13
|
+
end
|
14
|
+
elsif data.is_a?(Array)
|
15
|
+
walk_array(data) do |target|
|
16
|
+
yield target
|
17
|
+
end
|
18
|
+
else
|
19
|
+
yield data
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def walk_hash(data)
|
24
|
+
data.inject({}) do |h,(k,v)|
|
25
|
+
if v.is_a?(Hash)
|
26
|
+
walk_hash(v) { |x| yield x }
|
27
|
+
elsif v.is_a?(Array)
|
28
|
+
walk_array(v) { |x| yield x }
|
29
|
+
else
|
30
|
+
yield v
|
31
|
+
end
|
32
|
+
h
|
33
|
+
end
|
34
|
+
return data
|
35
|
+
end
|
36
|
+
|
37
|
+
def walk_array(data)
|
38
|
+
data.map! do |element|
|
39
|
+
if element.is_a?(Hash)
|
40
|
+
walk_hash(element) { |x| yield x }
|
41
|
+
elsif element.is_a?(Array)
|
42
|
+
walk_array(element) { |x| yield x }
|
43
|
+
else
|
44
|
+
yield element
|
45
|
+
end
|
46
|
+
element
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
data/lib/jerakia.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
#require 'faster_require'
|
2
|
+
|
3
|
+
class Jerakia
|
4
|
+
require 'jerakia/policy'
|
5
|
+
require 'jerakia/lookup'
|
6
|
+
require 'jerakia/request'
|
7
|
+
require 'jerakia/log'
|
8
|
+
require 'jerakia/util'
|
9
|
+
require 'jerakia/config'
|
10
|
+
require 'jerakia/launcher'
|
11
|
+
require 'jerakia/cache'
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
def initialize(options={})
|
17
|
+
configfile = options[:config] || '/etc/jerakia/jerakia.yml'
|
18
|
+
@@config = Jerakia::Config.new(configfile)
|
19
|
+
@@filecache = {}
|
20
|
+
@@cache = Jerakia::Cache.new
|
21
|
+
loglevel = options[:loglevel] || @@config["loglevel"] || "info"
|
22
|
+
@@log = Jerakia::Log.new(loglevel.to_sym)
|
23
|
+
@@log.debug("Jerakia initialized")
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def lookup(request)
|
28
|
+
res=Jerakia::Launcher.new(request)
|
29
|
+
return res.answer
|
30
|
+
end
|
31
|
+
|
32
|
+
def config
|
33
|
+
@@config
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def self.fatal(msg,e)
|
38
|
+
stacktrace=e.backtrace.join("\n")
|
39
|
+
Jerakia.log.fatal msg
|
40
|
+
Jerakia.log.fatal "Full stacktrace output:\n#{$!}\n\n#{stacktrace}"
|
41
|
+
puts "Fatal error, check log output for details"
|
42
|
+
exit 1
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.config
|
46
|
+
@@config
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.filecache(name)
|
50
|
+
@@filecache[name] ||= File.read(name)
|
51
|
+
return @@filecache[name]
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_to_filecache(name,data)
|
55
|
+
@@filecache[name] = data
|
56
|
+
end
|
57
|
+
|
58
|
+
def log
|
59
|
+
@@log
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.log
|
63
|
+
@@log
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.crit(msg)
|
67
|
+
|
68
|
+
puts msg
|
69
|
+
exit 1
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'puppet/indirector/code'
|
2
|
+
require 'jerakia'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class Puppet::DataBinding::Jerakia < Puppet::Indirector::Code
|
6
|
+
desc "Data binding for Jerakia"
|
7
|
+
|
8
|
+
attr_reader :jerakia
|
9
|
+
attr_reader :policy
|
10
|
+
|
11
|
+
def initialize(*args)
|
12
|
+
@jerakia=::Jerakia.new
|
13
|
+
|
14
|
+
# Currently defaulting the policy to "puppet" - we should change this.
|
15
|
+
@default_policy = @jerakia::config["puppet"]["default_policy"] || "puppet"
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(request)
|
20
|
+
|
21
|
+
lookupdata=request.key.split(/::/)
|
22
|
+
key=lookupdata.pop
|
23
|
+
namespace=lookupdata
|
24
|
+
metadata = request.options[:variables].to_hash
|
25
|
+
policy=metadata[:jerakia_policy] || @default_policy
|
26
|
+
jacreq = Jerakia::Request.new(
|
27
|
+
:key => key,
|
28
|
+
:namespace => namespace,
|
29
|
+
:policy => policy,
|
30
|
+
:lookup_type => :first,
|
31
|
+
:metadata => {}
|
32
|
+
)
|
33
|
+
answer = jerakia.lookup(jacreq)
|
34
|
+
answer.payload
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# This is a proof of concept, and highly experimental to enable a data binding
|
2
|
+
# that talks to Jerakia's REST API. At present we only pass the environment
|
3
|
+
# from the scope as the whole scope hash is too large for the HTTP request.
|
4
|
+
#
|
5
|
+
# This may or may not be supported in future versions but feel free to contribute :)
|
6
|
+
#
|
7
|
+
require 'puppet/indirector/code'
|
8
|
+
require 'rest_client'
|
9
|
+
require 'jerakia'
|
10
|
+
require 'json'
|
11
|
+
|
12
|
+
class Puppet::DataBinding::Jerakia_rest < Puppet::Indirector::Code
|
13
|
+
desc "Data binding for Jerakia"
|
14
|
+
|
15
|
+
attr_reader :jerakia
|
16
|
+
attr_reader :jerakia_url
|
17
|
+
attr_reader :policy
|
18
|
+
|
19
|
+
def initialize(*args)
|
20
|
+
@jerakia=::Jerakia.new
|
21
|
+
@jerakia_url=@jerakia.config.server_url
|
22
|
+
@policy = "puppet"
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def find(request)
|
27
|
+
|
28
|
+
lookupdata=request.key.split(/::/)
|
29
|
+
key=lookupdata.pop
|
30
|
+
namespace=lookupdata
|
31
|
+
|
32
|
+
#metadata = request.options[:variables].to_hash
|
33
|
+
|
34
|
+
metadata = {
|
35
|
+
:environment => request.options[:variables].environment,
|
36
|
+
}
|
37
|
+
payload={
|
38
|
+
:namespace => namespace,
|
39
|
+
:lookup_type => :first,
|
40
|
+
:metadata => metadata,
|
41
|
+
}.to_json
|
42
|
+
response = RestClient.get "#{jerakia_url}/#{policy}/#{key}", :params => { :payload => payload }
|
43
|
+
response
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|