class Qonfig::Loaders::Vault

@api private @since 0.25.0

Constants

VAULT_EXPR_EVAL_SCOPE

@return [Binding]

@api private @since 0.25.0

Public Class Methods

empty_data() click to toggle source

@return [Hash]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/loaders/vault.rb, line 40
def empty_data
  {}
end
load_file(path, fail_on_unexist: true) click to toggle source

@param path [String, Pathname] @option fail_on_unexist [Boolean] @return [Object]

@raise [Qonfig::FileNotFoundError]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/loaders/vault.rb, line 23
def load_file(path, fail_on_unexist: true)
  data = ::Vault.with_retries(Vault::HTTPError) do
    ::Vault.logical.read(path.to_s)&.data&.dig(:data)
  end
  raise Qonfig::FileNotFoundError, "Path #{path} not exist" if data.nil? && fail_on_unexist
  result = data || empty_data
  deep_transform_values(result)
rescue Vault::VaultError => error
  raise(Qonfig::VaultLoaderError.new(error.message).tap do |exception|
    exception.set_backtrace(error.backtrace)
  end)
end

Private Class Methods

deep_transform_values(vault_data) click to toggle source

@param vault_data [Hash<Object,Object>] @return [Object]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/loaders/vault.rb, line 51
def deep_transform_values(vault_data)
  return vault_data unless vault_data.is_a?(Hash)

  vault_data.transform_values do |value|
    next safely_evaluate(value) if value.is_a?(String)

    deep_transform_values(value)
  end
end
safely_evaluate(vault_expr) click to toggle source

@param vault_expr [String] @return [Object]

@api private @since 0.25.0

# File lib/qonfig/plugins/vault/loaders/vault.rb, line 66
def safely_evaluate(vault_expr)
  parsed_expr = ::ERB.new(vault_expr).result
  VAULT_EXPR_EVAL_SCOPE.eval(parsed_expr)
rescue StandardError, ScriptError
  parsed_expr
end