One file, no destination env

This commit is contained in:
Donal McBreen
2024-08-07 15:33:05 +01:00
committed by Donal McBreen
parent fcdef5fa06
commit 7daaabd4d4

View File

@@ -1,29 +1,18 @@
class Kamal::Configuration::Secrets
attr_reader :secret_file, :destination
attr_reader :secrets_file
def initialize(destination: nil)
@destination = destination
@secret_file = (destination ? [ ".kamal/secrets.#{destination}", ".kamal/secrets" ] : [ ".kamal/secrets" ])
.find { |file| File.exist?(file) }
@secrets_file = [ *(".kamal/secrets.#{destination}" if destination), ".kamal/secrets" ].find { |f| File.exist?(f) }
end
def [](key)
@secrets ||= load
@secrets ||= secrets_file ? Dotenv.parse(*secrets_file) : {}
@secrets.fetch(key)
rescue KeyError
if secret_file
raise Kamal::ConfigurationError, "Secret '#{key}' not found in #{secret_file}"
if secrets_file
raise Kamal::ConfigurationError, "Secret '#{key}' not found in #{secrets_file}"
else
raise Kamal::ConfigurationError, "Secret '#{key}' not found, no secret file provided"
raise Kamal::ConfigurationError, "Secret '#{key}' not found, no secret files provided"
end
end
private
def load
original_env = ENV.to_hash
ENV["KAMAL_DESTINATION"] = destination if destination
secret_file ? Dotenv.parse(*secret_file) : {}
ensure
ENV.replace(original_env)
end
end