Class: DockerSwarm::Service

Inherits:
Base
  • Object
show all
Includes:
Concerns::Creatable, Concerns::Deletable, Concerns::Loggable, Concerns::Updatable
Defined in:
lib/docker_swarm/models/service.rb

Overview

Represents a Docker Swarm Service

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Concerns::Loggable

#logs

Methods included from Concerns::Deletable

#destroy

Methods included from Concerns::Updatable

#update

Methods included from Concerns::Creatable

#query_params_for_docker, #save

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>

status es un query param propio de GET /services (Engine API ≥ v1.41), no un filtro: con ?status=true cada elemento del listado trae ServiceStatus (RunningTasks · DesiredTasks · CompletedTasks).

Es el único lugar donde el Engine publica el deseado de un service en modo global. Un service replicado lo expone en Spec.Mode.Replicated.Replicas, pero para uno global ese campo no existe —el deseado es "una task por nodo elegible"—, así que sin DesiredTasks no hay número contra el cual comparar las tasks que corren: un global degradado parcialmente (2 de 3 nodos) es indistinguible de uno sano, y solo se detecta el caso extremo de cero tasks.

Va acá y no en la whitelist de Base porque en /containers/json status es un filtro válido (running, exited, …): globalizarlo lo sacaría del ?filters= y rompería Container.where(status: "running").

En un Engine por debajo de v1.41 el parámetro se ignora sin error y ServiceStatus llega ausente → el consumidor tiene que tolerar nil.

Returns:

  • (Array<Symbol>)

    Symbols (no Strings como create_query_params): acá se matchea contra las claves de filters.



32
33
34
# File 'lib/docker_swarm/models/service.rb', line 32

def self.index_query_params
  (super + %i[status]).freeze
end

Instance Method Details

#restartBoolean

Restarts the service by incrementing ForceUpdate, which causes Docker to recreate all tasks.

Returns:

  • (Boolean)

    true if the restart was triggered successfully



40
41
42
43
# File 'lib/docker_swarm/models/service.rb', line 40

def restart
  current = self.Spec&.dig("TaskTemplate", "ForceUpdate").to_i
  update(Spec: { TaskTemplate: { ForceUpdate: current + 1 } })
end