hiera_zookeeper 0.2.2 → 0.2.3

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