lib/hako/jsonnet_loader.rb in hako-2.0.0 vs lib/hako/jsonnet_loader.rb in hako-2.0.1
- old
+ new
@@ -1,42 +1,52 @@
# frozen_string_literal: true
require 'hako'
require 'hako/env_providers'
+require 'hako/error'
require 'hako/loader'
require 'json'
require 'jsonnet'
module Hako
class JsonnetLoader
# @param [Application] application
# @param [Boolean] expand_variables
- def initialize(application, expand_variables)
+ # @param [Boolean] ask_keys
+ def initialize(application, expand_variables:, ask_keys:)
@vm = Jsonnet::VM.new
@root_path = application.root_path
- define_provider_functions(expand_variables)
+ define_provider_functions(expand_variables, ask_keys)
@vm.ext_var('appId', application.id)
end
# @param [Pathname] path
def load(path)
JSON.parse(@vm.evaluate_file(path.to_s))
end
private
- def define_provider_functions(expand_variables)
+ def define_provider_functions(expand_variables, ask_keys)
Gem.loaded_specs.each do |gem_name, spec|
spec.require_paths.each do |path|
Dir.glob(File.join(spec.full_gem_path, path, 'hako/env_providers/*.rb')).each do |provider_path|
provider_name = File.basename(provider_path, '.rb')
provider_class = Loader.new(Hako::EnvProviders, 'hako/env_providers').load(provider_name)
Hako.logger.debug("Loaded #{provider_class} from '#{gem_name}' gem")
@vm.define_function("provide.#{provider_name}") do |options, name|
if expand_variables
provider_class.new(@root_path, JSON.parse(options)).ask([name]).fetch(name)
else
- "\#{#{name}}"
+ if ask_keys
+ provider = provider_class.new(@root_path, JSON.parse(options))
+ if provider.can_ask_keys?
+ if provider.ask_keys([name]).empty?
+ raise Error.new("Could not lookup #{name} from #{provider_name} provider with options=#{options}")
+ end
+ end
+ end
+ "${#{name}}"
end
end
end
end
end