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.
@@ -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
+