Module: DockerSwarm::RegistryAuth

Defined in:
lib/docker_swarm/registry_auth.rb

Overview

Traduce las opciones de autenticación de registry privado a los canales de transporte de la Docker Engine API, sin tocar el payload ni el estado del modelo:

  • registry_auth -> header X-Registry-Auth (credencial opaca base64url).
  • registry_auth_from -> query registryAuthFrom (+spec+ | previous-spec), fuente de credencial a reusar en un update cuando el header NO está presente.

Son mutuamente excluyentes: Docker define registryAuthFrom como la fuente a usar solo si X-Registry-Auth no viaja. Si el caller pasa ambos, se corta con un error local claro antes de la request, en vez de derivar la ambigüedad al Engine.

Constant Summary collapse

HEADER =
"X-Registry-Auth"
QUERY =
:registryAuthFrom
FROM_VALUES =
%w[spec previous-spec].freeze

Class Method Summary collapse

Class Method Details

.resolve(registry_auth: nil, registry_auth_from: nil) ⇒ Array(Hash, Hash)

Returns par [headers, query_params] a mergear en la request (cada uno vacío cuando su opción no vino).

Parameters:

  • registry_auth (String, nil) (defaults to: nil)

    credencial opaca para el header X-Registry-Auth

  • registry_auth_from (String, nil) (defaults to: nil)

    "spec" | "previous-spec"; excluyente con registry_auth

Returns:

  • (Array(Hash, Hash))

    par [headers, query_params] a mergear en la request (cada uno vacío cuando su opción no vino)

Raises:

  • (ArgumentError)

    si vienen ambos juntos o si registry_auth_from es inválido



28
29
30
31
32
33
34
35
# File 'lib/docker_swarm/registry_auth.rb', line 28

def resolve(registry_auth: nil, registry_auth_from: nil)
  validate!(registry_auth, registry_auth_from)

  headers = registry_auth ? { HEADER => registry_auth } : {}
  query = registry_auth_from ? { QUERY => registry_auth_from } : {}

  [ headers, query ]
end

.validate!(registry_auth, registry_auth_from) ⇒ Object

Raises:

  • (ArgumentError)


37
38
39
40
41
42
43
44
45
46
# File 'lib/docker_swarm/registry_auth.rb', line 37

def validate!(registry_auth, registry_auth_from)
  if registry_auth && registry_auth_from
    raise ArgumentError, "registry_auth y registry_auth_from son mutuamente excluyentes: pasá uno u otro"
  end

  return if registry_auth_from.nil? || FROM_VALUES.include?(registry_auth_from)

  raise ArgumentError,
        "registry_auth_from inválido: #{registry_auth_from.inspect} (válidos: #{FROM_VALUES.join(', ')})"
end