class VaultDataSource
Public Instance Methods
get_values(path)
click to toggle source
Helper method, not used by DataSource API
# File lib/tiller/data/vault.rb, line 72 def get_values(path) keys = nil Tiller::log.debug("Trying Vault list with #{path}") Vault.with_retries(Vault::HTTPConnectionError, Vault::HTTPError) do |attempt, e| Tiller::log.warn("#{self} : Received exception #{e} from Vault") if e keys = Vault.logical.list(path) end values = {} if keys.is_a?(Array) && keys.size > 0 keys.each do |k| Tiller::log.debug("#{self} : Fetching value at #{path}/#{k}") Vault.with_retries(Vault::HTTPConnectionError, Vault::HTTPError) do |attempt, e| Tiller::log.warn("#{self} : Received exception #{e} from Vault") if e Tiller::log.debug("Actual Vault Path: #{File.absolute_path(k,path)}") vdata = Vault.logical.read(File.absolute_path(k,path)).data if @vault_config['flex_mode'] values[k.to_sym] = vdata else values[k] = vdata[@vault_config['json_key_name']] end end end values elsif @vault_config['flex_mode'] Tiller::log.debug("#{path} is likely a Vault document, retrieving values for them") Vault.with_retries(Vault::HTTPConnectionError, Vault::HTTPError) do |attempt, e| Tiller::log.warn("#{self} : Received exception #{e} from Vault") if e vault_data = Vault.logical.read(path) if vault_data && (data = vault_data.data) && data.is_a?(Hash) values = data else Tiller::log.warn("No values found at #{path}") end end values else {} end end
global_values()
click to toggle source
# File lib/tiller/data/vault.rb, line 10 def global_values return {} unless Tiller::config.has_key?('vault') if @vault_config['flex_mode'] globals = {} Tiller::log.debug("#{self} : In Flex Mode: Fetching all defined paths under values") @vault_config['values'].each do |key, path| next unless path Tiller::log.debug("#{self} : Fetching values in #{path} into the #{key} variable") path = "/#{path}" if path[0] != '/' path = interpolate(path) globals[key] = get_values(path) end globals else path = interpolate("#{@vault_config['values']['global']}") Tiller::log.debug("#{self} : Fetching globals from #{path}") globals = get_values(path) # Do we have per-env globals ? If so, merge them path = interpolate("#{@vault_config['values']['per_env']}") Tiller::log.debug("#{self} : Fetching per-environment globals from #{path}") globals.deep_merge!(get_values(path)) end end
target_values(template_name)
click to toggle source
# File lib/tiller/data/vault.rb, line 62 def target_values(template_name) return {} unless Tiller::config.has_key?('vault') return {} if @vault_config['flex_mode'] path = interpolate("#{@vault_config['values']['target']}", template_name) Tiller::log.debug("#{self} : Fetching template target values from #{path}") get_values(path) end
values(template_name)
click to toggle source
# File lib/tiller/data/vault.rb, line 35 def values(template_name) return {} unless Tiller::config.has_key?('vault') if @vault_config['flex_mode'] # Merge configs of the template and environment, subsequently template_config = Tiller::config[template_name] || {} if Tiller::config.has_key?('environments') && Tiller::config['environments'].has_key?(Tiller::config[:environment]) && Tiller::config['environments'][Tiller::config[:environment]].has_key?(template_name) template_config.deep_merge!(Tiller::config['environments'][Tiller::config[:environment]][template_name]) end return {} unless template_config.has_key?('vault') values = {} template_config['vault'].each do |key, path| path = "/#{path}" if path[0] != '/' # We want to make Vault compatible with dynamic values here path = Tiller::render(path, direct_render: true) if Tiller::config.assoc('dynamic_values') path = interpolate(path) Tiller::log.debug("#{self} : Fetching values in #{path} into the #{key} variable") values[key] = get_values(path) end values else path = interpolate("#{@vault_config['values']['template']}", template_name) Tiller::log.debug("#{self} : Fetching template values from #{path}") get_values(path) end end