jerakia 0.3.0 → 0.4.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 +4 -4
- data/bin/jerakia +4 -67
- data/lib/hiera/backend/jerakia_backend.rb +7 -17
- data/lib/jerakia/cli.rb +60 -0
- data/lib/jerakia/config.rb +11 -15
- data/lib/jerakia/datasource/file/yaml.rb +5 -7
- data/lib/jerakia/datasource/file.rb +40 -14
- data/lib/jerakia.rb +5 -17
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 817afa48119cb3dbc3e6dff1aff91c3f02a8963f
|
4
|
+
data.tar.gz: 9888a26fd1dacecfa9b89fb81455076a8133063d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09b429d1e89534f1485e206fe15b1b4854b123eaeea6f7659700045359631cc767661caad3d574269634a73fc24115b3cba98a9c1bb3ac25709c066f904ae260
|
7
|
+
data.tar.gz: 7644791657536cc40ef083786a1dda5a8c8455f4e2d920d0ff1d47541c6a1c0cb7509cf2b981b4cdd5c3e0c61c35b3f18acb672edff0bbeda1b26358d439bf88
|
data/bin/jerakia
CHANGED
@@ -1,71 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
require 'optparse'
|
3
|
+
lib = File.expand_path('../../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
5
|
|
7
|
-
|
8
|
-
:policy => "default",
|
9
|
-
:config => "/etc/jerakia/jerakia.yaml",
|
10
|
-
:scope => nil,
|
11
|
-
:key => nil,
|
12
|
-
:merge => "array",
|
13
|
-
:lookup_type => "first",
|
14
|
-
:namespace => nil,
|
15
|
-
:metadata => {},
|
16
|
-
}
|
6
|
+
require 'jerakia/cli'
|
17
7
|
|
18
|
-
|
19
|
-
|
20
|
-
opts.on("--config CONFIG","-c","Config file") do |c|
|
21
|
-
options[:config] = c
|
22
|
-
end
|
23
|
-
|
24
|
-
opts.on("--key KEY", "-k", "Lookup key") do |k|
|
25
|
-
options[:key] = k
|
26
|
-
end
|
27
|
-
|
28
|
-
opts.on("--policy POLICY", "-p", "Policy") do |p|
|
29
|
-
options[:policy] = p.to_sym
|
30
|
-
end
|
31
|
-
|
32
|
-
opts.on("--namespace NAMESPACE", "-n", "Namespace") do |n|
|
33
|
-
options[:namespace] = n.split(/::/)
|
34
|
-
end
|
35
|
-
|
36
|
-
opts.on("--type TYPE", "-t", "Lookup type") do |t|
|
37
|
-
options[:lookup_type] = t.to_sym
|
38
|
-
end
|
39
|
-
|
40
|
-
opts.on("--scope SCOPE", "-s", "Scope handler") do |s|
|
41
|
-
options[:scope] = s.to_sym
|
42
|
-
end
|
43
|
-
|
44
|
-
opts.on("--merge MERGE", "-m", "Merge type") do |m|
|
45
|
-
options[:merge] = m.to_sym
|
46
|
-
end
|
47
|
-
end.parse!
|
48
|
-
|
49
|
-
unless ARGV.empty?
|
50
|
-
ARGV.each do |arg|
|
51
|
-
meta=arg.split(':')
|
52
|
-
options[:metadata][meta[0]] = meta[1]
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
jac = Jerakia.new({:config => options[:config]})
|
59
|
-
req = Jerakia::Request.new(
|
60
|
-
:key => options[:key],
|
61
|
-
:namespace => options[:namespace],
|
62
|
-
:policy => options[:policy].to_sym,
|
63
|
-
:lookup_type => options[:lookup_type].to_sym,
|
64
|
-
:merge => options[:merge].to_sym,
|
65
|
-
:loglevel => 'debug',
|
66
|
-
:metadata => options[:metadata]
|
67
|
-
)
|
68
|
-
|
69
|
-
|
70
|
-
answer = jac.lookup(req)
|
71
|
-
puts answer.payload.to_json
|
8
|
+
Jerakia::CLI.start(ARGV)
|
@@ -2,22 +2,18 @@ class Hiera
|
|
2
2
|
module Backend
|
3
3
|
class Jerakia_backend
|
4
4
|
|
5
|
-
def initialize
|
5
|
+
def initialize(config = nil)
|
6
6
|
require 'jerakia'
|
7
|
-
@config =
|
7
|
+
@config = config || Hiera.config[:jerakia] || {}
|
8
8
|
@policy = @config[:policy] || 'default'
|
9
|
-
@jerakia = ::Jerakia.new(
|
9
|
+
@jerakia = ::Jerakia.new(@config)
|
10
10
|
Jerakia.log.debug("[hiera] hiera backend loaded with policy #{@policy}")
|
11
|
-
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
13
|
def lookup(key, scope, order_override, resolution_type)
|
16
|
-
|
17
|
-
|
18
14
|
lookup_type = :first
|
19
15
|
merge_type = :none
|
20
|
-
|
16
|
+
|
21
17
|
case resolution_type
|
22
18
|
when :array
|
23
19
|
lookup_type = :cascade
|
@@ -36,7 +32,7 @@ class Hiera
|
|
36
32
|
end
|
37
33
|
|
38
34
|
Jerakia.log.debug("[hiera] backend invoked for key #{key} using namespace #{namespace}")
|
39
|
-
|
35
|
+
|
40
36
|
metadata={}
|
41
37
|
if scope.is_a?(Hash)
|
42
38
|
metadata=scope
|
@@ -44,24 +40,18 @@ class Hiera
|
|
44
40
|
metadata = scope.real.to_hash
|
45
41
|
end
|
46
42
|
|
47
|
-
|
48
43
|
request = Jerakia::Request.new(
|
49
|
-
:key
|
44
|
+
:key => key,
|
50
45
|
:namespace => namespace,
|
51
46
|
:policy => metadata[:jerakia_policy] || @policy,
|
52
47
|
:lookup_type => lookup_type,
|
53
48
|
:merge => merge_type,
|
54
49
|
:metadata => metadata,
|
55
50
|
)
|
56
|
-
|
51
|
+
|
57
52
|
answer = @jerakia.lookup(request)
|
58
53
|
answer.payload
|
59
|
-
|
60
|
-
|
61
54
|
end
|
62
55
|
end
|
63
56
|
end
|
64
57
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
data/lib/jerakia/cli.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'jerakia'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class Jerakia
|
6
|
+
class CLI < Thor
|
7
|
+
desc 'lookup [KEY]', 'Lookup [KEY] with Jerakia'
|
8
|
+
option :config,
|
9
|
+
aliases: :c,
|
10
|
+
type: :string,
|
11
|
+
default: '/etc/jerakia/jerakia.yaml',
|
12
|
+
desc: 'Configuration file'
|
13
|
+
option :policy,
|
14
|
+
aliases: :p,
|
15
|
+
type: :string,
|
16
|
+
default: 'default',
|
17
|
+
desc: 'Lookup policy'
|
18
|
+
option :namespace,
|
19
|
+
aliases: :n,
|
20
|
+
type: :string,
|
21
|
+
desc: 'Lookup namespace'
|
22
|
+
option :type,
|
23
|
+
aliases: :t,
|
24
|
+
type: :string,
|
25
|
+
default: 'first',
|
26
|
+
desc: 'Lookup type'
|
27
|
+
option :scope,
|
28
|
+
aliases: :s,
|
29
|
+
type: :string,
|
30
|
+
desc: 'Scope handler'
|
31
|
+
option :merge_type,
|
32
|
+
aliases: :m,
|
33
|
+
type: :string,
|
34
|
+
default: 'array',
|
35
|
+
desc: 'Merge type'
|
36
|
+
option :log_level,
|
37
|
+
aliases: :l,
|
38
|
+
type: :string,
|
39
|
+
desc: 'Log level'
|
40
|
+
option :metadata,
|
41
|
+
aliases: :d,
|
42
|
+
type: :hash,
|
43
|
+
desc: 'Key/value pairs to be used as metadata for the lookup'
|
44
|
+
def lookup(key)
|
45
|
+
jac = Jerakia.new({:config => options[:config]})
|
46
|
+
req = Jerakia::Request.new(
|
47
|
+
:key => key,
|
48
|
+
:namespace => options[:namespace].split(/::/),
|
49
|
+
:policy => options[:policy].to_sym,
|
50
|
+
:lookup_type => options[:type].to_sym,
|
51
|
+
:merge => options[:merge_type].to_sym,
|
52
|
+
:loglevel => options[:log_level],
|
53
|
+
:metadata => options[:metadata]
|
54
|
+
)
|
55
|
+
|
56
|
+
answer = jac.lookup(req)
|
57
|
+
puts answer.payload.to_json
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/jerakia/config.rb
CHANGED
@@ -1,25 +1,21 @@
|
|
1
|
-
|
1
|
+
require 'yaml'
|
2
2
|
|
3
|
-
|
3
|
+
class Jerakia::Config
|
4
4
|
attr_reader :policydir
|
5
5
|
attr_reader :server_url
|
6
6
|
|
7
|
-
def
|
8
|
-
unless File.exists?(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@policydir=
|
14
|
-
@server_url=
|
15
|
-
@configdata=
|
7
|
+
def self.load_from_file(file = '/etc/jerakia/jerakia.yaml')
|
8
|
+
Jerakia.crit("Config file #{file} not found") unless File.exists?(file)
|
9
|
+
new YAML.load_file(file)
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(config)
|
13
|
+
@policydir = config['policydir']
|
14
|
+
@server_url = config['server_url']
|
15
|
+
@configdata = config
|
16
16
|
end
|
17
17
|
|
18
18
|
def [](key)
|
19
19
|
@configdata[key.to_s]
|
20
20
|
end
|
21
|
-
|
22
|
-
|
23
21
|
end
|
24
|
-
|
25
|
-
|
@@ -5,13 +5,11 @@ class Jerakia::Datasource
|
|
5
5
|
EXTENSION='yaml'
|
6
6
|
|
7
7
|
class << self
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
YAML.load(data)
|
14
|
-
end
|
8
|
+
require 'yaml'
|
9
|
+
def convert(data)
|
10
|
+
return {} if data.empty?
|
11
|
+
YAML.load(data)
|
12
|
+
end
|
15
13
|
end
|
16
14
|
end
|
17
15
|
end
|
@@ -19,31 +19,57 @@ class Jerakia::Datasource
|
|
19
19
|
@@cache
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
Jerakia.log.debug("read_from_file() #{diskname}")
|
22
|
+
def import_file(filename)
|
23
|
+
Jerakia.log.debug("import_file() Importing #{filename}")
|
24
|
+
if ::File.exists?(filename)
|
25
|
+
::File.read(filename)
|
26
|
+
else
|
27
|
+
""
|
28
|
+
end
|
29
|
+
end
|
32
30
|
|
33
|
-
|
31
|
+
def get_file_with_cache(diskname)
|
34
32
|
if options[:enable_caching]
|
35
|
-
if cache.valid?(diskname)
|
33
|
+
if cache.valid?(diskname)
|
36
34
|
Jerakia.log.debug("Returning cached data")
|
37
35
|
cache.get(diskname)
|
38
36
|
else
|
39
37
|
Jerakia.log.debug("Adding contents of #{diskname} to cache")
|
40
|
-
cache.add(diskname
|
38
|
+
cache.add(diskname,import_file(diskname))
|
41
39
|
end
|
42
40
|
else
|
43
|
-
|
41
|
+
import_file(diskname)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def list_fragments(prefix,extension)
|
46
|
+
if ::File.directory?("#{prefix}.d")
|
47
|
+
Dir["#{prefix}.d/*.#{extension}"]
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
51
|
+
def read_from_file(fname)
|
52
|
+
fpath = []
|
53
|
+
fpath << options[:docroot] unless fname[0] == '/'
|
54
|
+
fpath << [ fname, lookup.request.namespace ]
|
55
|
+
|
56
|
+
extension = options[:extension] || @file_format::EXTENSION
|
57
|
+
diskname_prefix = "#{::File.join(fpath.flatten).gsub(/\/$/, '')}"
|
58
|
+
diskname = "#{diskname_prefix}.#{extension}"
|
59
|
+
|
60
|
+
files = [ diskname ]
|
61
|
+
files << list_fragments(diskname_prefix, extension)
|
62
|
+
|
63
|
+
raw_data=""
|
64
|
+
|
65
|
+
files.flatten.compact.each do |f|
|
66
|
+
Jerakia.log.debug("read_from_file() #{f}")
|
67
|
+
raw_data << get_file_with_cache(f)
|
68
|
+
end
|
69
|
+
|
70
|
+
file_format.convert(raw_data)
|
71
|
+
end
|
72
|
+
|
47
73
|
|
48
74
|
def run
|
49
75
|
#
|
data/lib/jerakia.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
#require 'faster_require'
|
2
1
|
|
3
2
|
class Jerakia
|
4
3
|
require 'jerakia/policy'
|
@@ -10,12 +9,9 @@ class Jerakia
|
|
10
9
|
require 'jerakia/launcher'
|
11
10
|
require 'jerakia/cache'
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
12
|
def initialize(options={})
|
17
13
|
configfile = options[:config] || '/etc/jerakia/jerakia.yaml'
|
18
|
-
@@config = Jerakia::Config.
|
14
|
+
@@config = Jerakia::Config.load_from_file(configfile)
|
19
15
|
|
20
16
|
if @@config[:plugindir]
|
21
17
|
$LOAD_PATH << @@config[:plugindir] unless $LOAD_PATH.include?(@@config[:plugindir])
|
@@ -25,26 +21,23 @@ class Jerakia
|
|
25
21
|
loglevel = options[:loglevel] || @@config["loglevel"] || "info"
|
26
22
|
@@log = Jerakia::Log.new(loglevel.to_sym)
|
27
23
|
@@log.debug("Jerakia initialized")
|
28
|
-
|
29
24
|
end
|
30
25
|
|
31
26
|
def lookup(request)
|
32
|
-
|
33
|
-
return res.answer
|
27
|
+
Jerakia::Launcher.new(request).answer
|
34
28
|
end
|
35
29
|
|
36
30
|
def config
|
37
31
|
@@config
|
38
32
|
end
|
39
33
|
|
40
|
-
|
41
34
|
def self.fatal(msg,e)
|
42
35
|
stacktrace=e.backtrace.join("\n")
|
43
36
|
Jerakia.log.fatal msg
|
44
37
|
Jerakia.log.fatal "Full stacktrace output:\n#{$!}\n\n#{stacktrace}"
|
45
38
|
puts "Fatal error, check log output for details"
|
46
|
-
|
47
|
-
end
|
39
|
+
throw Exception
|
40
|
+
end
|
48
41
|
|
49
42
|
def self.filecache(name)
|
50
43
|
@@filecache[name] ||= File.read(name)
|
@@ -59,20 +52,15 @@ class Jerakia
|
|
59
52
|
@@config
|
60
53
|
end
|
61
54
|
|
62
|
-
|
63
55
|
def log
|
64
56
|
@@log
|
65
57
|
end
|
66
|
-
|
67
58
|
|
68
59
|
def self.log
|
69
60
|
@@log
|
70
61
|
end
|
71
62
|
|
72
63
|
def self.crit(msg)
|
73
|
-
|
74
|
-
puts msg
|
75
|
-
exit 1
|
64
|
+
fail msg
|
76
65
|
end
|
77
66
|
end
|
78
|
-
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jerakia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Dunn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.19'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.19'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: lookup_http
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,7 @@ files:
|
|
38
52
|
- lib/jerakia/cache.rb
|
39
53
|
- lib/jerakia/cache/entry.rb
|
40
54
|
- lib/jerakia/cache/file.rb
|
55
|
+
- lib/jerakia/cli.rb
|
41
56
|
- lib/jerakia/config.rb
|
42
57
|
- lib/jerakia/datamodel.rb
|
43
58
|
- lib/jerakia/datasource.rb
|
@@ -84,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
99
|
version: '0'
|
85
100
|
requirements: []
|
86
101
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.
|
102
|
+
rubygems_version: 2.2.2
|
88
103
|
signing_key:
|
89
104
|
specification_version: 4
|
90
105
|
summary: Extendable and flexible ata lookup system
|