class SettingsReader::VaultResolver::Refresher

Vault Lease refresher task

Constants

DEFAULT_RENEW_DELAY
REFRESH_INTERVAL

Attributes

cache[R]
config[R]

Public Class Methods

new(cache, config) click to toggle source
# File lib/settings_reader/vault_resolver/refresher.rb, line 14
def initialize(cache, config)
  @cache = cache
  @config = config
end

Public Instance Methods

refresh() click to toggle source
# File lib/settings_reader/vault_resolver/refresher.rb, line 19
def refresh
  info { 'Performing Vault leases refresh' }
  promises = cache.entries.map do |entry|
    debug { "Checking lease for #{entry}. Leased?: #{entry.leased?}. Expires in: #{entry.expires_in}s" }
    refresh_entry(entry)
  end.compact
  promises.each(&:wait)
  promises
end
refresh_entry(entry) click to toggle source
# File lib/settings_reader/vault_resolver/refresher.rb, line 29
def refresh_entry(entry)
  return unless entry.expires_in < config.lease_renew_delay

  Concurrent::Promise.execute do
    debug { "Refreshing lease for #{entry}. Expires in: #{entry.expires_in}" }
    config.vault_engine_for(entry.address).renew(entry)
    info { "Lease renewed for #{entry}. Expires in: #{entry.expires_in}" }
    entry
  rescue StandardError => e
    error { "Error refreshing lease for #{entry}: #{e.message}" }
    raise SettingsReader::VaultResolver::Error, e.message
  end
end