hiera_zookeeper 0.2.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.
@@ -0,0 +1,61 @@
1
+ class Hiera
2
+ module Backend
3
+ class Zookeeper_backend
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.
6
+
7
+ def initialize
8
+ require 'rubygems'
9
+ require 'yaml'
10
+ require 'zookeeper'
11
+
12
+ Hiera.debug("Hiera ZooKeeper backend starting")
13
+ end
14
+
15
+ def lookup(key, scope, order_override, resolution_type)
16
+ answer = nil
17
+ Hiera.debug("Looking up #{key} in ZooKeeper backend")
18
+ unless Config[:zookeeper].nil? or Config[:zookeeper][:server].nil? then
19
+ server = Backend.parse_string(Config[:zookeeper][:server], scope)
20
+ else
21
+ server = 'localhost:2181'
22
+ end
23
+ zk = Zookeeper.new(server)
24
+
25
+ Backend.datasources(scope, order_override) do |source|
26
+ Hiera.debug("Looking for data source #{source}")
27
+ # Determine the zookeeper path(s) to get data from
28
+ unless Config[:zookeeper].nil? or Config[:zookeeper][:datadir].nil? then
29
+ datadir = "#{Backend.datadir(Config[:zookeeper][:datadir], scope)}/#{source}"
30
+ else
31
+ datadir = "/hiera/#{source}"
32
+ end
33
+ data = zk.get(:path => "#{datadir}/#{key}")
34
+ if data[:stat].exists then
35
+ Hiera.debug("Found #{key} in #{source}")
36
+ new_answer = Backend.resolve_answer(YAML.load(data[:data]), resolution_type)
37
+ end
38
+ case resolution_type
39
+ when :array
40
+ raise Exception, "Hiera type mismatch: expected Array and got #{new_answer.class}" unless new_answer.kind_of?(Array) or new_answer.kind_of?(String)
41
+ answer ||= []
42
+ answer << new_answer
43
+ when :hash
44
+ raise Exception, "Hiera type mismatch: expected Hash and got #{new_answer.class}" unless new_answer.kind_of?(Hash)
45
+ answer ||= {}
46
+ answer = new_answer.merge(answer)
47
+ else
48
+ answer = new_answer
49
+ break
50
+ end
51
+ end
52
+ zk.close if !zk.nil?
53
+ return answer
54
+
55
+ #rescue ZookeeperExceptions::ZookeeperException, RuntimeError
56
+ # zk.close if !zk.nil?
57
+ # return nil
58
+ end
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hiera_zookeeper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - zahna
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: hiera
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: zookeeper
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.3.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.0
46
+ description: Hiera_zookeeper is a plugin for the Hiera hierarchical database to get
47
+ data from Zookeeper
48
+ email: scott@zahna.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/hiera/backend/zookeeper_backend.rb
54
+ homepage: http://rubygems.org/gems/hiera_zookeeper
55
+ licenses: []
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 1.8.7
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 1.8.23
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Hiera_zookeeper is a plugin for the Hiera hierarchical database to get data
78
+ from Zookeeper
79
+ test_files: []