Class: Kamal::Dev::SecretsLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/kamal/dev/secrets_loader.rb

Overview

Loads and processes secrets from .kamal/secrets file

Parses shell script format (export KEY="value") and provides Base64-encoded values for container injection.

Examples:

Basic usage

loader = SecretsLoader.new(".kamal/secrets")
secrets = loader.load_secrets
#=> {"DATABASE_URL" => "base64_encoded_value", ...}

Defined Under Namespace

Classes: SecretsNotFoundError, SecretsParseError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(secrets_file_path = ".kamal/secrets") ⇒ SecretsLoader

Initialize secrets loader with file path

Parameters:

  • secrets_file_path (String) (defaults to: ".kamal/secrets")

    Path to secrets file



28
29
30
# File 'lib/kamal/dev/secrets_loader.rb', line 28

def initialize(secrets_file_path = ".kamal/secrets")
  @secrets_file = secrets_file_path
end

Instance Attribute Details

#secrets_fileObject (readonly)

Returns the value of attribute secrets_file.



23
24
25
# File 'lib/kamal/dev/secrets_loader.rb', line 23

def secrets_file
  @secrets_file
end

Instance Method Details

#load_secretsHash<String, String>

Load and parse secrets from file

Returns:

  • (Hash<String, String>)

    Hash of secret keys to Base64-encoded values

Raises:



37
38
39
40
41
42
43
# File 'lib/kamal/dev/secrets_loader.rb', line 37

def load_secrets
  unless File.exist?(@secrets_file)
    raise SecretsNotFoundError, "Secrets file not found: #{@secrets_file}"
  end

  parse_secrets_file
end

#load_secrets_for(keys) ⇒ Hash<String, String>

Load secrets for specific keys only

Parameters:

  • keys (Array<String>)

    List of secret keys to load

Returns:

  • (Hash<String, String>)

    Hash of requested keys to Base64-encoded values



49
50
51
52
53
54
# File 'lib/kamal/dev/secrets_loader.rb', line 49

def load_secrets_for(keys)
  all_secrets = load_secrets
  keys.each_with_object({}) do |key, result|
    result[key] = all_secrets[key] if all_secrets.key?(key)
  end
end