hiera_zookeeper 0.2.0

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