rubyconfig-vault 1.0.4 → 1.0.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
  SHA256:
3
- metadata.gz: 161ede1df26b9ba941d4e64dd921b4c4f98f9c66ed443b5f83d3ebeb55bc7ae3
4
- data.tar.gz: 54e80ec49323dbbf1540dd39ce99623ff3acf86968ca3dcf4ba9122e099ee364
3
+ metadata.gz: 615bbf4df424a7d1f403b806113e097c81ef41752afa9ebd61771d45a10f4991
4
+ data.tar.gz: 563b9bd3cd608d49ee2050bd86dd0374cd8fd5a12549f3235f3170ddc65f889a
5
5
  SHA512:
6
- metadata.gz: 617735e0edf543dfed976f9b07a090414b47f4ec218e28e7821762da19ffbf44aa447072c205d3ab79db68b619de946d4d962385cdd50f74bd5ceac5c886f4a6
7
- data.tar.gz: c96b23a0ae4b45daaf688b39d65948bbee01909ad3866bacfd78eb91aa1c1c97a53bfd2961c17dbe31f4e6b330a8606120dbced79b403410a9ed8b5378824f46
6
+ metadata.gz: 36c354d9baf5cce5f2cd4d0492caa90ae3b77ee4e0e7891d6e260f0a3b2a33f42c749193c5b7c4e82526b5ac9d55dd4d35e4a90a274f89302910deea94f71859
7
+ data.tar.gz: 652d144137915a2e7213fbf4cb4fb12efa3fecc8fe6861a376a67ff3c1f6ec7edfc44e364ec07553282b4cc687024c5aab29a826691e910c0d1fd57cd92b6965
@@ -0,0 +1,7 @@
1
+ module Config
2
+ module Sources
3
+ class RecoverableVaultError < Exception; end
4
+
5
+ class VaultError < Exception; end
6
+ end
7
+ end
@@ -1,5 +1,6 @@
1
1
  require 'config'
2
2
  require 'vault'
3
+ require_relative 'vault_error'
3
4
 
4
5
  module Config
5
6
  module Sources
@@ -68,7 +69,7 @@ module Config
68
69
  #
69
70
  # @return [Hash]
70
71
  def load
71
- ::Vault.with_retries(::Vault::HTTPError,
72
+ ::Vault.with_retries(RecoverableVaultError,
72
73
  attempts: @attempts,
73
74
  base: @base,
74
75
  max_wait: @max_wait) do
@@ -86,6 +87,30 @@ module Config
86
87
  end
87
88
  end
88
89
 
90
+ def read_at_path(query_path)
91
+ client_ops.read(query_path)&.data || {}
92
+ rescue ::Vault::HTTPClientError => e
93
+ if e.code == 403
94
+ raise VaultError, "Attempting to read at path #{query_path}\n#{e.response}", caller
95
+ else
96
+ raise RecoverableVaultError, e.response, caller
97
+ end
98
+ rescue ::Vault::HTTPError => e
99
+ raise RecoverableVaultError, e.response, caller
100
+ end
101
+
102
+ def list_at_path(query_path)
103
+ client_ops.list(query_path)
104
+ rescue ::Vault::HTTPClientError => e
105
+ if e.code == 403
106
+ raise VaultError, "Attempting to list at path #{query_path}\n#{e.response}", caller
107
+ else
108
+ raise RecoverableVaultError, e.response, caller
109
+ end
110
+ rescue ::Vault::HTTPError => e
111
+ raise RecoverableVaultError, e.response, caller
112
+ end
113
+
89
114
  def process_paths
90
115
  root = {}
91
116
  parsed_paths = @paths.map { |p| process_path(p) }
@@ -104,7 +129,7 @@ module Config
104
129
  query_path, idx, parent = stack.pop
105
130
  sp = subpaths[idx]
106
131
  if sp.nil? || sp.eql?('*')
107
- data = client_ops.read(query_path)&.data || {}
132
+ data = read_at_path(query_path)
108
133
  node = root if @flatten
109
134
  node = parent unless @flatten
110
135
  node.merge!(data)
@@ -113,7 +138,7 @@ module Config
113
138
  end
114
139
 
115
140
  if sp.eql?('**') || sp.eql?('*')
116
- subtrees = client_ops.list(query_path)
141
+ subtrees = list_at_path(query_path)
117
142
  subtrees.each do |st|
118
143
  new_parent = {}
119
144
  new_key = st.split('/').last.downcase.to_sym
@@ -131,6 +156,8 @@ module Config
131
156
  end
132
157
 
133
158
  if path.last
159
+ { path.last => root }
160
+ elsif @root
134
161
  { @root => root }
135
162
  else
136
163
  root
@@ -1,5 +1,5 @@
1
1
  module Config
2
2
  module Vault
3
- VERSION = "1.0.4"
3
+ VERSION = "1.0.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyconfig-vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Young
@@ -88,6 +88,7 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - lib/config/vault.rb
91
+ - lib/config/vault/vault_error.rb
91
92
  - lib/config/vault/vault_source.rb
92
93
  - lib/config/vault/version.rb
93
94
  homepage: https://github.com/CrunchwrapSupreme/rubyconfig-vault