Module: VaultConsul

Defined in:
lib/vault-consul.rb,
lib/vault-consul/version.rb,
lib/vault-consul/config_handler.rb

Defined Under Namespace

Classes: ConfigHandler

Constant Summary collapse

ENV_LIST =
%w[TEAM ENV SERVICE CONSUL_HTTP_ADDR CONSUL_HTTP_TOKEN VAULT_ADDR VAULT_TOKEN]
VERSION =
"0.1.2"

Class Method Summary collapse

Class Method Details

.parse(path) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/vault-consul.rb', line 9

def parse(path)
  unless ['local', 'test'].include?(ENV['ENV'])
    ENV_LIST.each do |env|
      raise ConfigError, "Missing ENV variable: #{env}" if ENV[env].nil? || ENV[env] == ''
    end
  end

  yaml = File.read(path)
  handler = VaultConsul::ConfigHandler.new
  parser = Psych::Parser.new(handler)
  parser.parse(yaml)
  handler.root.to_ruby.first
end

.read_consul(consul_key) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/vault-consul.rb', line 32

def read_consul(consul_key)
  Diplomat.configure do |config|
    config.url = ENV['CONSUL_HTTP_ADDR']
    config.acl_token = ENV['CONSUL_HTTP_TOKEN']
  end
  key = "#{ENV['TEAM']}/#{ENV['ENV']}/#{ENV['SERVICE']}/#{consul_key}"
  val = Diplomat::Kv.get(key)
  raise "ConsulError: No value was stored for #{key}" if val.nil? || val == ''
  val
end

.read_vault(vault_key, json_key) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/vault-consul.rb', line 23

def read_vault(vault_key, json_key)
  Vault.with_retries(Vault::HTTPConnectionError) do
    key = "secret/data/#{ENV['TEAM']}/#{ENV['ENV']}/#{ENV['SERVICE']}/#{vault_key}"
    val = Vault.logical.read(key)
    raise "VaultError: No secret was stored for #{key}" if val.nil? || val.data.nil? || val.data[:data].nil?
    val.data[:data][json_key.to_sym]
  end
end