Class: DockerSwarm::Service
- Defined in:
- lib/docker_swarm/models/service.rb
Overview
Represents a Docker Swarm Service
Class Method Summary collapse
-
.index_query_params ⇒ Array<Symbol>
statuses un query param propio deGET /services(Engine API ≥ v1.41), no un filtro: con?status=truecada elemento del listado traeServiceStatus(RunningTasks·DesiredTasks·CompletedTasks).
Instance Method Summary collapse
-
#restart ⇒ Boolean
Restarts the service by incrementing ForceUpdate, which causes Docker to recreate all tasks.
Methods included from Concerns::Loggable
Methods included from Concerns::Deletable
Methods included from Concerns::Updatable
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
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_params ⇒ Array<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 sí 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.
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
#restart ⇒ Boolean
Restarts the service by incrementing ForceUpdate, which causes Docker to recreate all tasks.
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 |