hiera-zookeeper 0.1.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 +64 -0
- metadata +72 -0
@@ -0,0 +1,64 @@
|
|
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
|
+
# Will look for child nodes with names matching the lookup key (optionally followed by digits to support ZooKeeper's sequential node creation).
|
6
|
+
# If none are found, or if resolution type is array or hash, the node will be parsed as YAML and checked for a key equal to the lookup key.
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
require 'rubygems'
|
10
|
+
require 'yaml'
|
11
|
+
require 'zookeeper'
|
12
|
+
|
13
|
+
Hiera.debug("Hiera ZooKeeper backend starting")
|
14
|
+
end
|
15
|
+
|
16
|
+
def lookup(key, scope, order_override, resolution_type)
|
17
|
+
answer = nil
|
18
|
+
Hiera.debug("Looking up #{key} in ZooKeeper backend")
|
19
|
+
server = Backend.parse_string(Config[:zookeeper][:server], scope) || 'localhost:2181'
|
20
|
+
zk = Zookeeper.new(server)
|
21
|
+
|
22
|
+
Backend.datasources(scope, order_override) do |source|
|
23
|
+
Hiera.debug("Looking for data source #{source}")
|
24
|
+
|
25
|
+
datadir = "#{Backend.datadir("zookeeper", scope)}/#{source}"
|
26
|
+
children = zk.get_children(:path => datadir)[:children] || []
|
27
|
+
children = children.select { |child| child =~ /\A#{Regexp.escape(key)}\d*\z/ }.sort
|
28
|
+
if children.length > 0
|
29
|
+
children.each do |child|
|
30
|
+
new_answer = YAML.load(zk.get(:path => "#{datadir}/#{child}")[:data])
|
31
|
+
next if new_answer.nil?
|
32
|
+
answer = Backend.empty_answer(resolution_type) if answer.nil?
|
33
|
+
case resolution_type
|
34
|
+
when :array
|
35
|
+
answer << new_answer
|
36
|
+
when :hash
|
37
|
+
answer = new_answer.merge answer
|
38
|
+
else
|
39
|
+
return new_answer
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
data = zk.get(:path => datadir)[:data]
|
44
|
+
data = YAML.load(data) if data
|
45
|
+
next if (data.nil? || !data.is_a?(Hash) || !data.include?(key))
|
46
|
+
new_answer = data[key]
|
47
|
+
answer = Backend.empty_answer(resolution_type) if answer.nil?
|
48
|
+
case resolution_type
|
49
|
+
when :array
|
50
|
+
answer << new_answer
|
51
|
+
when :hash
|
52
|
+
answer = new_answer.merge answer
|
53
|
+
else
|
54
|
+
return new_answer
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return answer
|
58
|
+
|
59
|
+
rescue ZookeeperExceptions::ZookeeperException
|
60
|
+
return Backend.empty_answer(resolution_type)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hiera-zookeeper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Some Dude
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2012-04-11 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hiera
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: zookeeper
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description:
|
36
|
+
email:
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- lib/hiera/backend/zookeeper_backend.rb
|
45
|
+
has_rdoc: false
|
46
|
+
homepage:
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
version:
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.3.1
|
68
|
+
signing_key:
|
69
|
+
specification_version: 2
|
70
|
+
summary: A ZooKeeper backend for Hiera.
|
71
|
+
test_files: []
|
72
|
+
|