hiera_zookeeper 0.2.2 → 0.2.3

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.
@@ -2,12 +2,30 @@ class Hiera
2
2
  module Backend
3
3
  class Zookeeper_backend
4
4
  # ZooKeeper backend for Hiera. Recognizes :server and :datadir config options. If no :server is specified, uses localhost:2181.
5
- # The node data is expected to be in YAML.
5
+ # The node data is expected to be in YAML or JSON (YAML is the default).
6
6
 
7
7
  def initialize
8
8
  require 'rubygems'
9
- require 'yaml'
10
9
  require 'zookeeper'
10
+ # Set default values
11
+ Config[:zookeeper] = Hash.new() if Config[:zookeeper].nil?
12
+ Config[:zookeeper][:timeout] = 1 if Config[:zookeeper][:timeout].nil?
13
+ Config[:zookeeper][:datadir] = '/hiera' if Config[:zookeeper][:datadir].nil?
14
+ Config[:zookeeper][:format] = 'yaml' if Config[:zookeeper][:format].nil?
15
+ Config[:zookeeper][:format].downcase!
16
+ if Config[:zookeeper][:server].nil? then
17
+ Config[:zookeeper][:servers] = ['localhost:2181'] if Config[:zookeeper][:servers].nil?
18
+ else
19
+ Hiera.warn("The :server option is deprecated. Use :servers. Option :server will go away very soon.")
20
+ Config[:zookeeper][:servers] = Config[:zookeeper][:server]
21
+ end
22
+
23
+ case Config[:zookeeper][:format]
24
+ when 'json'
25
+ require 'json'
26
+ else
27
+ require 'yaml'
28
+ end
11
29
 
12
30
  Hiera.debug("Hiera ZooKeeper backend starting")
13
31
  end
@@ -17,29 +35,15 @@ class Hiera
17
35
  Hiera.debug("Looking up #{key} in ZooKeeper backend")
18
36
  # Establish server(s) to check
19
37
  servers = []
20
- unless Config[:zookeeper].nil? or Config[:zookeeper][:server].nil? then
21
- if Config[:zookeeper][:server].kind_of?(Array) then
22
- Config[:zookeeper][:server].shuffle!
23
- Config[:zookeeper][:server].each do |server|
24
- servers.push(Backend.parse_string(server, scope))
25
- end
26
- else
27
- servers.push(Backend.parse_string(Config[:zookeeper][:server], scope))
28
- end
29
- else
30
- servers.push('localhost:2181')
31
- end
32
- # Establish connection timeout
33
- if Config[:zookeeper].nil? or Config[:zookeeper][:timeout].nil? then
34
- timeout = 1
35
- else
36
- timeout = Config[:zookeeper][:timeout]
38
+ Config[:zookeeper][:servers].shuffle!
39
+ Config[:zookeeper][:servers].each do |s|
40
+ servers.push(Backend.parse_string(s, scope))
37
41
  end
38
42
  # Establish connection
39
43
  zk = nil
40
44
  servers.each do |s|
41
45
  begin
42
- zk = Zookeeper.new(s, timeout)
46
+ zk = Zookeeper.new(s, Config[:zookeeper][:timeout])
43
47
  break if zk.connected?
44
48
  rescue => e
45
49
  Hiera.debug(e.message)
@@ -48,34 +52,35 @@ class Hiera
48
52
  end
49
53
  # If it did not work, raise that exception!
50
54
  if zk.nil? or not zk.connected? then
51
- raise(ZookeeperExceptions::ZookeeperException, "Could not connect to any server in configuration")
55
+ raise(ZookeeperExceptions::ZookeeperException, "Could not connect to any zookeeper server in configuration")
52
56
  end
53
57
 
54
58
  Backend.datasources(scope, order_override) do |source|
55
59
  Hiera.debug("Looking for data source #{source}")
56
- # Determine the zookeeper path(s) to get data from
57
- unless Config[:zookeeper].nil? or Config[:zookeeper][:datadir].nil? then
58
- datadir = "#{Backend.datadir(Config[:zookeeper][:datadir], scope)}/#{source}"
59
- else
60
- datadir = "/hiera/#{source}"
61
- end
60
+ # Determine the zookeeper path to get data from
61
+ datadir = "#{Backend.parse_string(Config[:zookeeper][:datadir], scope)}/#{source}"
62
62
  data = zk.get(:path => "#{datadir}/#{key}")
63
63
  if data[:stat].exists then
64
64
  Hiera.debug("Found #{key} in #{source}")
65
- new_answer = Backend.resolve_answer(YAML.load(data[:data]), resolution_type)
66
- end
67
- case resolution_type
68
- when :array
69
- raise(Exception, "Hiera type mismatch: expected Array and got #{new_answer.class}") unless new_answer.kind_of?(Array) or new_answer.kind_of?(String)
70
- answer ||= []
71
- answer << new_answer
72
- when :hash
73
- raise(Exception, "Hiera type mismatch: expected Hash and got #{new_answer.class}") unless new_answer.kind_of?(Hash)
74
- answer ||= {}
75
- answer = new_answer.merge(answer)
76
- else
77
- answer = new_answer
78
- break
65
+ case Config[:zookeeper][:format]
66
+ when 'json'
67
+ new_answer = Backend.resolve_answer(JSON.load(data[:data]), resolution_type)
68
+ else
69
+ new_answer = Backend.resolve_answer(YAML.load(data[:data]), resolution_type)
70
+ end
71
+ case resolution_type
72
+ when :array
73
+ raise(Exception, "Hiera type mismatch: expected Array and got #{new_answer.class}") unless new_answer.kind_of?(Array) or new_answer.kind_of?(String)
74
+ answer ||= []
75
+ answer << new_answer
76
+ when :hash
77
+ raise(Exception, "Hiera type mismatch: expected Hash and got #{new_answer.class}") unless new_answer.kind_of?(Hash)
78
+ answer ||= {}
79
+ answer = new_answer.merge(answer)
80
+ else
81
+ answer = new_answer
82
+ break
83
+ end
79
84
  end
80
85
  end
81
86
  zk.close if not zk.nil? and zk.connected?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiera_zookeeper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 2
10
- version: 0.2.2
9
+ - 3
10
+ version: 0.2.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - zahna
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-09-25 00:00:00 Z
18
+ date: 2012-09-26 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: hiera