Class: KubernetesDeploy::RestartTask

Inherits:
Object
  • Object
show all
Includes:
KubeclientBuilder
Defined in:
lib/kubernetes-deploy/restart_task.rb

Defined Under Namespace

Classes: FatalRestartError, RestartAPIError

Constant Summary collapse

HTTP_OK_RANGE =
200..299
ANNOTATION =
"shipit.shopify.io/restart"

Instance Method Summary collapse

Constructor Details

#initialize(context:, namespace:, logger:) ⇒ RestartTask

Returns a new instance of RestartTask.



23
24
25
26
27
# File 'lib/kubernetes-deploy/restart_task.rb', line 23

def initialize(context:, namespace:, logger:)
  @context = context
  @namespace = namespace
  @logger = logger
end

Instance Method Details

#perform(deployments_names = nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/kubernetes-deploy/restart_task.rb', line 29

def perform(deployments_names = nil)
  start = Time.now.utc
  @logger.reset

  @logger.phase_heading("Initializing restart")
  verify_namespace
  deployments = identify_target_deployments(deployments_names)
  if kubectl.server_version < Gem::Version.new(MIN_KUBE_VERSION)
    @logger.warn(KubernetesDeploy::Errors.server_version_warning(kubectl.server_version))
  end
  @logger.phase_heading("Triggering restart by touching ENV[RESTARTED_AT]")
  patch_kubeclient_deployments(deployments)

  @logger.phase_heading("Waiting for rollout")
  resources = build_watchables(deployments, start)
  ResourceWatcher.new(resources, logger: @logger, operation_name: "restart").run
  success = resources.all?(&:deploy_succeeded?)
rescue FatalDeploymentError => error
  @logger.summary.add_action(error.message)
  success = false
ensure
  @logger.print_summary(success)
  status = success ? "success" : "failed"
  tags = %W(namespace:#{@namespace} context:#{@context} status:#{status} deployments:#{deployments.to_a.length}})
  ::StatsD.measure('restart.duration', StatsD.duration(start), tags: tags)
end