Merge pull request #1466 from basecamp/env-secrets-tidy

Tidy up the env secrets handling
This commit is contained in:
Donal McBreen
2025-03-24 09:38:22 +00:00
committed by GitHub
2 changed files with 9 additions and 18 deletions

View File

@@ -1,8 +1,7 @@
class Kamal::Configuration::Env class Kamal::Configuration::Env
include Kamal::Configuration::Validation include Kamal::Configuration::Validation
attr_reader :context attr_reader :context, :clear, :secret_keys
attr_reader :clear, :secret_keys
delegate :argumentize, to: Kamal::Utils delegate :argumentize, to: Kamal::Utils
def initialize(config:, secrets:, context: "env") def initialize(config:, secrets:, context: "env")
@@ -11,19 +10,14 @@ class Kamal::Configuration::Env
@secret_keys = config.fetch("secret", []) @secret_keys = config.fetch("secret", [])
@context = context @context = context
validate! config, context: context, with: Kamal::Configuration::Validator::Env validate! config, context: context, with: Kamal::Configuration::Validator::Env
@secret_map = build_secret_map(@secret_keys)
end end
def clear_args def clear_args
argumentize("--env", clear) argumentize("--env", clear)
end end
def secrets
@resolved_secrets ||= resolve_secrets
end
def secrets_io def secrets_io
Kamal::EnvFile.new(secrets).to_io Kamal::EnvFile.new(aliased_secrets).to_io
end end
def merge(other) def merge(other)
@@ -33,15 +27,12 @@ class Kamal::Configuration::Env
end end
private private
def build_secret_map(secret_keys) def aliased_secrets
Array(secret_keys).to_h do |key| secret_keys.to_h { |key| extract_alias(key) }.transform_values { |secret_key| @secrets[secret_key] }
key_name, key_aliased_to = key.split(":", 2)
key_aliased_to ||= key_name
[ key_name, key_aliased_to ]
end
end end
def resolve_secrets def extract_alias(key)
@secret_map.transform_values { |secret_key| @secrets[secret_key] } key_name, key_aliased_to = key.split(":", 2)
[ key_name, key_aliased_to || key_name ]
end end
end end

View File

@@ -92,7 +92,7 @@ class ConfigurationEnvTagsTest < ActiveSupport::TestCase
} }
config = Kamal::Configuration.new(deploy) config = Kamal::Configuration.new(deploy)
assert_equal "hello", config.role("web").env("1.1.1.1").secrets["PASSWORD"] assert_equal "PASSWORD=hello\n", config.role("web").env("1.1.1.1").secrets_io.string
end end
end end
@@ -110,7 +110,7 @@ class ConfigurationEnvTagsTest < ActiveSupport::TestCase
} }
config = Kamal::Configuration.new(deploy) config = Kamal::Configuration.new(deploy)
assert_equal "aliased_hello", config.role("web").env("1.1.1.1").secrets["PASSWORD"] assert_equal "PASSWORD=aliased_hello\n", config.role("web").env("1.1.1.1").secrets_io.string
end end
end end