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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cfa6b5b4e283d6a8eac75289da4e456cdf7b4365
4
- data.tar.gz: fd106c3ac2c92d1e18ff1a598b12ccde5a67bc40
3
+ metadata.gz: 817afa48119cb3dbc3e6dff1aff91c3f02a8963f
4
+ data.tar.gz: 9888a26fd1dacecfa9b89fb81455076a8133063d
5
5
  SHA512:
6
- metadata.gz: 7083168d80c4d3d9927eaee085b43199847321911dd63fb1866c5e18ba88aaacce65eb947fe9264c29feb35769152afd3bc8a68bbf60a9450e277c0e5b214610
7
- data.tar.gz: 51a5f837b4b4b948e5f70f43116be92dfca2fd016104275d2c7901cb1d71f78e3a6f49d19a94adb29ef315e022f6f707c7192894b9ddecd05bbf141505d8868f
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
- require 'jerakia'
4
- require 'json'
5
- require 'optparse'
3
+ lib = File.expand_path('../../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
5
 
7
- options = {
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
- OptionParser.new do |opts|
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 = Config[:jerakia] || {}
7
+ @config = config || Hiera.config[:jerakia] || {}
8
8
  @policy = @config[:policy] || 'default'
9
- @jerakia = ::Jerakia.new(Config[:jerakia] || {})
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 => 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
-
@@ -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
@@ -1,25 +1,21 @@
1
- class Jerakia::Config
1
+ require 'yaml'
2
2
 
3
- require 'yaml'
3
+ class Jerakia::Config
4
4
  attr_reader :policydir
5
5
  attr_reader :server_url
6
6
 
7
- def initialize(config='/etc/jerakia/jerakia.yaml')
8
- unless File.exists?(config)
9
- Jerakia.crit("Config file #{config} not found")
10
- end
11
- rawdata=File.read(config)
12
- ymldata=YAML.load(rawdata)
13
- @policydir=ymldata['policydir']
14
- @server_url=ymldata['server_url']
15
- @configdata=ymldata
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
- require 'yaml'
9
- def import_file(fname)
10
- Jerakia.log.debug("scanning file #{fname}")
11
- return {} unless ::File.exists?(fname)
12
- data=::File.read(fname)
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 read_from_file(fname)
23
- fpath = []
24
- fpath << options[:docroot] unless fname[0] == '/'
25
- fpath << [ fname, lookup.request.namespace ]
26
-
27
- extension = options[:extension] || @file_format::EXTENSION
28
- diskname = "#{::File.join(fpath.flatten).gsub(/\/$/, '')}.#{extension}"
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,@file_format.import_file(diskname))
38
+ cache.add(diskname,import_file(diskname))
41
39
  end
42
40
  else
43
- @file_format.import_file(diskname)
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.new(configfile)
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
- res=Jerakia::Launcher.new(request)
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
- exit 1
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.3.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-10-15 00:00:00.000000000 Z
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.0.14
102
+ rubygems_version: 2.2.2
88
103
  signing_key:
89
104
  specification_version: 4
90
105
  summary: Extendable and flexible ata lookup system