jerakia 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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