Class: DockerSwarm::Image

Inherits:
Base
  • Object
show all
Includes:
Concerns::Deletable
Defined in:
lib/docker_swarm/models/image.rb

Overview

Represents a Docker Image No incluye Creatable: el "create" del Docker API sobre imágenes es un PULL (stream de progreso), no la construcción de un recurso CRUD. Se expone como .pull con contrato propio.

Constant Summary collapse

DIGEST_STATUS =

Docker emite el digest del pull en un frame de status "Digest: sha256:..." (verificado empíricamente contra Docker 29.5.3; el stream de pull NO trae campo aux).

/\bDigest:\s*(sha256:[0-9a-f]+)/

Class Method Summary collapse

Methods included from Concerns::Deletable

#destroy

Methods inherited from Base

all, #as_json, #assign_attributes, #attributes, defined_attributes, find, #id, #initialize, #method_missing, #payload_for_docker, #persisted?, #reload, resource_name, #respond_to_missing?, root_key, routes, #serializable_hash, where

Methods included from Concerns::Inspectable

#inspect

Constructor Details

This class inherits a constructor from DockerSwarm::Base

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class DockerSwarm::Base

Class Method Details

.index_query_paramsArray<Symbol>

GET /images/json declara dos query params propios además de filters: all y digests (spec v1.41, ImageList).

Mismo caso que Container: since y before son filtros de este recurso (<image-name>[:<tag>], <image id> o <image@digest>), así que el default de Base los mandaba a la URL, donde el Engine los ignora y devuelve la lista sin filtrar sin error. Ver #35.

Returns:

  • (Array<Symbol>)

    Symbols (matchean contra las claves de filters)



27
28
29
# File 'lib/docker_swarm/models/image.rb', line 27

def index_query_params
  %i[all digests].freeze
end

.pull(image_reference, registry_auth: nil) ⇒ Hash

Pull explícito de una imagen (POST /images/create).

Operación SÍNCRONA: consume el stream NDJSON de progreso hasta EOF, eleva error tipado ante un frame error/errorDetail (que Docker manda CON HTTP 200), y solo tras terminación limpia devuelve un resultado explícito construido desde el stream — sin un find posterior que reintroduciría el problema referencia-vs-ID.

Parameters:

  • image_reference (String)

    referencia completa (registry/repo:tag o @sha256:...)

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

    credencial opaca base64url → header X-Registry-Auth

Returns:

  • (Hash)

    { status: :pulled, image_ref: String, digest: String (si Docker lo emite) }

Raises:



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/docker_swarm/models/image.rb', line 42

def pull(image_reference, registry_auth: nil)
  headers, = RegistryAuth.resolve(registry_auth: registry_auth)

  body = Api.request(
    action: routes[:pull],
    query_params: { fromImage: image_reference },
    headers: headers
  )

  frames = parse_progress_stream(body)
  raise_on_stream_error!(frames)
  pull_result(image_reference, frames)
end