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.
- data/lib/hiera/backend/zookeeper_backend.rb +61 -0
- metadata +79 -0
@@ -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: []
|