hiera-redis 1.0.3 → 2.0.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.
- checksums.yaml +7 -0
- data/lib/hiera/backend/redis_backend.rb +48 -75
- metadata +43 -19
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cac011c3dd470b0d5ac2ab886736201363571b91
|
4
|
+
data.tar.gz: 44a7d272df8504896fb604245ebdc0fa24221d7f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 22521481aef98392ba0b1e44c9a195229b7a45f83465c07a54368d37b9f57f3874b03e857dfaa1987af16db44795b41b412fadfa30d576d07088917232f1fb3d
|
7
|
+
data.tar.gz: 29f64f78d0df2f6ed4bd2434ec27c7e0f618b815fde841a84b29388ea674bc7a06ec548cf3841b61cbb0931448019cae910a0e74878d8bea443338a62f772923
|
@@ -1,126 +1,99 @@
|
|
1
1
|
class Hiera
|
2
2
|
module Backend
|
3
3
|
class Redis_backend
|
4
|
+
VERSION = '2.0.0'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
attr_reader :redis, :options
|
6
|
+
attr_reader :options
|
8
7
|
|
9
8
|
def initialize
|
10
|
-
|
11
|
-
|
9
|
+
require 'redis'
|
10
|
+
Hiera.debug("Hiera Redis backend #{VERSION} starting")
|
11
|
+
@options = { separator: ':', soft_connection_failure: false }.merge(Config[:redis] || {})
|
12
|
+
case options[:deserialize]
|
13
|
+
when :json then require 'json'
|
14
|
+
when :yaml then require 'yaml'
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
|
-
def deserialize(
|
15
|
-
return
|
16
|
-
return args[:data] unless args[:data].is_a? String
|
18
|
+
def deserialize(value)
|
19
|
+
return value unless value.is_a?(String)
|
17
20
|
|
18
|
-
|
19
|
-
when :json
|
20
|
-
|
21
|
-
JSON.parse args[:data]
|
22
|
-
when :yaml
|
23
|
-
require 'yaml'
|
24
|
-
YAML::load args[:data]
|
21
|
+
case options[:deserialize]
|
22
|
+
when :json then JSON.parse(value)
|
23
|
+
when :yaml then YAML.load(value)
|
25
24
|
else
|
26
|
-
Hiera.warn
|
27
|
-
|
25
|
+
Hiera.warn("Invalid configuration for :deserialize; found #{options[:deserialize]}")
|
26
|
+
value
|
28
27
|
end
|
29
|
-
|
30
|
-
Hiera.debug "Deserialized %s" % options[:deserialize].to_s.upcase
|
31
|
-
result
|
32
|
-
|
33
|
-
# when we try to deserialize a string
|
34
|
-
rescue JSON::ParserError
|
35
|
-
args[:data]
|
36
28
|
rescue => e
|
37
|
-
Hiera.warn
|
29
|
+
Hiera.warn("Error de-serializing data: #{e.class}: #{e.message}")
|
30
|
+
value
|
38
31
|
end
|
39
32
|
|
40
|
-
def lookup(key, scope, order_override, resolution_type)
|
33
|
+
def lookup(key, scope, order_override, resolution_type, context)
|
41
34
|
answer = nil
|
35
|
+
found = false
|
42
36
|
|
43
37
|
Backend.datasources(scope, order_override) do |source|
|
44
|
-
redis_key =
|
45
|
-
|
46
|
-
|
47
|
-
data = redis_query redis_key
|
48
|
-
|
49
|
-
data = deserialize(:data => data,
|
50
|
-
:redis_key => redis_key,
|
51
|
-
:key => key) if options.include? :deserialize
|
38
|
+
redis_key = (source.split('/') << key).join(options[:separator])
|
39
|
+
data = read_value(redis_key)
|
40
|
+
next if data.nil?
|
52
41
|
|
53
|
-
|
42
|
+
found = true
|
43
|
+
new_answer = Backend.parse_answer(data, scope, {}, context)
|
54
44
|
|
55
|
-
|
56
|
-
|
57
|
-
case resolution_type
|
45
|
+
case resolution_type.is_a?(Hash) ? :hash : resolution_type
|
58
46
|
when :array
|
59
|
-
|
47
|
+
check_type(key, new_answer, Array, String)
|
60
48
|
answer ||= []
|
61
49
|
answer << new_answer
|
62
50
|
when :hash
|
63
|
-
|
51
|
+
check_type(key, new_answer, Hash)
|
64
52
|
answer ||= {}
|
65
|
-
answer = new_answer
|
53
|
+
answer = Backend.merge_answer(new_answer, answer, resolution_type)
|
66
54
|
else
|
67
55
|
answer = new_answer
|
68
56
|
break
|
69
57
|
end
|
70
58
|
end
|
71
59
|
|
72
|
-
|
60
|
+
throw :no_such_key unless found
|
73
61
|
answer
|
62
|
+
rescue Redis::CannotConnectError, Errno::ENOENT => e
|
63
|
+
Hiera.warn("Cannot connect to redis server at #{redis.id}")
|
64
|
+
raise e unless options[:soft_connection_failure]
|
74
65
|
end
|
75
66
|
|
76
67
|
private
|
77
68
|
|
78
|
-
def
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
:port => 6379,
|
84
|
-
:db => 0,
|
85
|
-
:password => nil,
|
86
|
-
:timeout => 3,
|
87
|
-
:path => nil,
|
88
|
-
:soft_connection_failure => false,
|
89
|
-
:separator => ':'
|
90
|
-
}.merge Config[:redis] || {}
|
69
|
+
def check_type(key, value, *types)
|
70
|
+
return if types.any? { |type| value.is_a?(type) }
|
71
|
+
expected = types.map(&:name).join(' or ')
|
72
|
+
raise "Hiera type mismatch for key '#{key}': expected #{expected} and got #{value.class}"
|
73
|
+
end
|
91
74
|
|
92
|
-
|
75
|
+
def redis
|
76
|
+
@redis ||= Redis.new(@options)
|
77
|
+
end
|
93
78
|
|
94
|
-
|
95
|
-
|
96
|
-
|
79
|
+
def read_value(key)
|
80
|
+
data = redis_query(key)
|
81
|
+
options[:deserialize] ? deserialize(data) : data
|
97
82
|
end
|
98
83
|
|
99
84
|
def redis_query(redis_key)
|
100
|
-
|
101
|
-
case redis.type redis_key
|
85
|
+
case redis.type(redis_key)
|
102
86
|
when 'set'
|
103
|
-
redis.smembers
|
87
|
+
redis.smembers(redis_key)
|
104
88
|
when 'hash'
|
105
|
-
redis.hgetall
|
89
|
+
redis.hgetall(redis_key)
|
106
90
|
when 'list'
|
107
91
|
redis.lrange(redis_key, 0, -1)
|
108
92
|
when 'string'
|
109
|
-
redis.get
|
93
|
+
redis.get(redis_key)
|
110
94
|
when 'zset'
|
111
95
|
redis.zrange(redis_key, 0, -1)
|
112
|
-
else
|
113
|
-
Hiera.debug("No such key: %s" % redis_key)
|
114
|
-
nil
|
115
96
|
end
|
116
|
-
rescue Redis::CannotConnectError => e
|
117
|
-
Hiera.warn('Cannot connect to Redis server')
|
118
|
-
raise e unless options.has_key?(:soft_connection_failure)
|
119
|
-
nil
|
120
|
-
rescue Errno::ENOENT => e
|
121
|
-
Hiera.warn('Cannot connect to Redis server')
|
122
|
-
raise e unless options.has_key?(:soft_connection_failure)
|
123
|
-
nil
|
124
97
|
end
|
125
98
|
end
|
126
99
|
end
|
metadata
CHANGED
@@ -1,63 +1,87 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hiera-redis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- Reliant Security, Inc.
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-08-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: hiera
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: redis
|
16
29
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
30
|
requirements:
|
19
|
-
- -
|
31
|
+
- - "~>"
|
20
32
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
33
|
+
version: '3.2'
|
22
34
|
type: :runtime
|
23
35
|
prerelease: false
|
24
36
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
37
|
requirements:
|
27
|
-
- -
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
28
53
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
54
|
+
version: '3.3'
|
30
55
|
description: Allows hiera functions to pull data from a Redis database.
|
31
|
-
email:
|
56
|
+
email: dev@reliantsecurity.com
|
32
57
|
executables: []
|
33
58
|
extensions: []
|
34
59
|
extra_rdoc_files: []
|
35
60
|
files:
|
36
|
-
- lib/hiera/backend/redis_backend.rb
|
37
61
|
- COPYING
|
62
|
+
- lib/hiera/backend/redis_backend.rb
|
38
63
|
homepage: http://github.com/reliantsecurity/hiera-redis
|
39
64
|
licenses:
|
40
65
|
- GPL-3
|
66
|
+
metadata: {}
|
41
67
|
post_install_message:
|
42
68
|
rdoc_options: []
|
43
69
|
require_paths:
|
44
70
|
- lib
|
45
71
|
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
none: false
|
47
72
|
requirements:
|
48
|
-
- -
|
73
|
+
- - "~>"
|
49
74
|
- !ruby/object:Gem::Version
|
50
|
-
version: '0'
|
75
|
+
version: '2.0'
|
51
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
77
|
requirements:
|
54
|
-
- -
|
78
|
+
- - ">="
|
55
79
|
- !ruby/object:Gem::Version
|
56
80
|
version: '0'
|
57
81
|
requirements: []
|
58
82
|
rubyforge_project:
|
59
|
-
rubygems_version:
|
83
|
+
rubygems_version: 2.2.2
|
60
84
|
signing_key:
|
61
|
-
specification_version:
|
85
|
+
specification_version: 4
|
62
86
|
summary: A Redis backend for Hiera.
|
63
87
|
test_files: []
|