hiera-vault 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6d60dd27aa1e1da061baa78922a7d2f69eead26
4
- data.tar.gz: 7d7f43da214143da5cb6d10461e77125d41858ef
3
+ metadata.gz: 3f5330ec11f401a3bafbc2223c3dbcf513ce63f6
4
+ data.tar.gz: bfca139927590fa43f24a782c1eb36249164cc0e
5
5
  SHA512:
6
- metadata.gz: 8d713a2c831f5c0fb85a0c9700b1b48327c0dd9b3ab07b9772df0b9b6c1c4c5433919e7df180bfe06f75798c3397c41f3c10f57494247cb30eb351a4e1826daa
7
- data.tar.gz: 00783473c833126563f53796e3ea7a145c7a7ecadddc326838af6a9e61ae59a35a44960a66c03496e5fbabae76efa183dcf8bd546c0d445a0456519468dc6282
6
+ metadata.gz: a73d38373d64d71b5611cb882e207aec7ecbe521f0b829742f5f04c3339756056423a850f8162c42b9a86192aa0f4598661573eeba164a2ce80e4c85c617bb04
7
+ data.tar.gz: afa2f42bc6d4d75946a43787f6b6baf71d6b3c9e49a479aefb900b7ae59c4754eaa57f99c8714a3e2d910f0f55fc6b42d3ac71f1f2fd5b1bfeb8d007ea5e1c7f
@@ -10,6 +10,20 @@ class Hiera
10
10
  @config = Config[:vault]
11
11
  @config[:mounts] ||= {}
12
12
  @config[:mounts][:generic] ||= ['secret']
13
+ @config[:default_field_parse] ||= 'string' # valid values: 'string', 'json'
14
+
15
+ if not ['string','json'].include?(@config[:default_field_parse])
16
+ raise Exception, "[hiera-vault] invalid value for :default_field_parse: '#{@config[:default_field_behavior]}', should be one of 'string','json'"
17
+ end
18
+
19
+ # :default_field_behavior:
20
+ # 'ignore' => ignore additional fields, if the field is not present return nil
21
+ # 'only' => only return value of default_field when it is present and the only field, otherwise return hash as normal
22
+ @config[:default_field_behavior] ||= 'ignore'
23
+
24
+ if not ['ignore','only'].include?(@config[:default_field_behavior])
25
+ raise Exception, "[hiera-vault] invalid value for :default_field_behavior: '#{@config[:default_field_behavior]}', should be one of 'ignore','only'"
26
+ end
13
27
 
14
28
  begin
15
29
  @vault = Vault::Client.new
@@ -37,16 +51,31 @@ class Hiera
37
51
  Hiera.debug("[hiera-vault] Looking up #{key} in vault backend")
38
52
 
39
53
  answer = nil
54
+ found = false
40
55
 
41
56
  # Only generic mounts supported so far
42
57
  @config[:mounts][:generic].each do |mount|
43
58
  path = Backend.parse_string(mount, scope, { 'key' => key })
44
- answer = lookup_generic("#{path}/#{key}", scope)
45
-
46
- break if answer.kind_of? Hash
59
+ Hiera.debug("Looking in path #{path}")
60
+ new_answer = lookup_generic("#{path}/#{key}", scope)
61
+ #Hiera.debug("[hiera-vault] Answer: #{new_answer}:#{new_answer.class}")
62
+ next if new_answer.nil?
63
+ case resolution_type
64
+ when :array
65
+ raise Exception, "Hiera type mismatch: expected Array and got #{new_answer.class}" unless new_answer.kind_of? Array or new_answer.kind_of? String
66
+ answer ||= []
67
+ answer << new_answer
68
+ when :hash
69
+ raise Exception, "Hiera type mismatch: expected Hash and got #{new_answer.class}" unless new_answer.kind_of? Hash
70
+ answer ||= {}
71
+ answer = Backend.merge_answer(new_answer,answer)
72
+ else
73
+ answer = new_answer
74
+ break
75
+ end
47
76
  end
48
77
 
49
- answer
78
+ return answer
50
79
  end
51
80
 
52
81
  def lookup_generic(key, scope)
@@ -61,13 +90,22 @@ class Hiera
61
90
  return nil if secret.nil?
62
91
 
63
92
  Hiera.debug("[hiera-vault] Read secret: #{key}")
64
- if @config[:default_field]
93
+ if @config[:default_field] and (@config[:default_field_behavior] == 'ignore' or (secret.data.has_key?(@config[:default_field].to_sym) and secret.data.length == 1))
94
+ return nil if not secret.data.has_key?(@config[:default_field].to_sym)
65
95
  # Return just our default_field
66
96
  data = secret.data[@config[:default_field].to_sym]
97
+ if @config[:default_field_parse] == 'json'
98
+ begin
99
+ data = JSON.parse(data)
100
+ rescue JSON::ParserError => e
101
+ Hiera.debug("[hiera-vault] Could not parse string as json: #{e}")
102
+ end
103
+ end
67
104
  else
68
105
  # Turn secret's hash keys into strings
69
106
  data = secret.data.inject({}) { |h, (k, v)| h[k.to_s] = v; h }
70
107
  end
108
+ #Hiera.debug("[hiera-vault] Data: #{data}:#{data.class}")
71
109
 
72
110
  return Backend.parse_answer(data, scope)
73
111
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiera-vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Sokolowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2016-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: vault