class ShieldVault::Commander

Public Instance Methods

add(key, value) click to toggle source
# File lib/shield-vault.rb, line 35
def add(key, value)
  check_seal do
    current_values = get_current_values
    current_values[key.to_sym] = value
    Vault.logical.write(main_key, current_values)
    puts "Added/updated environment variable in #{main_key}: #{key}"
  end
end
fetch() click to toggle source
# File lib/shield-vault.rb, line 14
def fetch
  check_seal do
    values = get_current_values
    if values
      File.open(file_name, 'w+') do |file|
        file.truncate(0)
        values.keys.each do |key|
          file.puts "#{key}=#{values[key]}\n"
        end
      end
      puts "Fetched environment variables and updated local #{file_name} file"
    else
      puts "No environment variables set for #{main_key} environment."
    end
  end
end
remove(key) click to toggle source
# File lib/shield-vault.rb, line 56
def remove(key)
  check_seal do
    current_values = get_current_values
    if current_values[key.to_sym]
      current_values.delete key.to_sym
      if current_values.empty?
        Vault.logical.delete(main_key)
      else
        Vault.logical.write(main_key, current_values)
      end
      puts "Removed environment variable from #{main_key}: #{key}"
    else
      puts "Environment variable on #{main_key} does not exist: #{key}"
    end
  end
end
update(key, value) click to toggle source
# File lib/shield-vault.rb, line 48
def update(key, value)
  invoke :add
end

Private Instance Methods

app() click to toggle source
# File lib/shield-vault.rb, line 79
def app
  #assume current directory is app name if option not passed in
  options[:app] || Dir.pwd.split('/').last
end
check_seal(&block) click to toggle source
# File lib/shield-vault.rb, line 106
def check_seal(&block)
  if Vault.sys.seal_status.sealed
    puts "Vault is sealed.  You must unseal it to interact with it."
    return
  end
  block.call
end
environment() click to toggle source
# File lib/shield-vault.rb, line 75
def environment
  options[:environment] || "development"
end
file_name() click to toggle source
# File lib/shield-vault.rb, line 93
def file_name
  @file_name ||= case environment
  when 'development'
    File.join(Dir.pwd, '.env')
  when 'staging'
    File.join(Dir.pwd, '.env.staging')
  when 'production'
    File.join(Dir.pwd, '.env.production')
  else
    nil
  end
end
get_current_values() click to toggle source
# File lib/shield-vault.rb, line 84
def get_current_values
  values = Vault.logical.read(main_key)
  values ? values.data : {}
end
main_key() click to toggle source
# File lib/shield-vault.rb, line 89
def main_key
  "secret/#{app}_#{environment}_env_vars"
end