diff --git a/lib/kamal/configuration/secrets.rb b/lib/kamal/configuration/secrets.rb index 0e52f9ae..c4d9406b 100644 --- a/lib/kamal/configuration/secrets.rb +++ b/lib/kamal/configuration/secrets.rb @@ -1,24 +1,29 @@ class Kamal::Configuration::Secrets - attr_reader :secret_files + attr_reader :secret_file, :destination def initialize(destination: nil) - @secret_files = \ - (destination ? [ ".kamal/secrets.#{destination}", ".kamal/secrets" ] : [ ".kamal/secrets" ]) + @destination = destination + @secret_file = (destination ? [ ".kamal/secrets.#{destination}", ".kamal/secrets" ] : [ ".kamal/secrets" ]) + .find { |file| File.exist?(file) } end def [](key) @secrets ||= load @secrets.fetch(key) rescue KeyError - if secret_files.any? - raise Kamal::ConfigurationError, "Secret '#{key}' not found in #{secret_files.join(', ')}" + if secret_file + raise Kamal::ConfigurationError, "Secret '#{key}' not found in #{secret_file}" else - raise Kamal::ConfigurationError, "Secret '#{key}' not found, no secret files provided" + raise Kamal::ConfigurationError, "Secret '#{key}' not found, no secret file provided" end end private def load - secret_files.any? ? Dotenv.parse(*secret_files) : {} + original_env = ENV.to_hash + ENV["KAMAL_DESTINATION"] = destination if destination + secret_file ? Dotenv.parse(*secret_file) : {} + ensure + ENV.replace(original_env) end end