summaryrefslogtreecommitdiff
path: root/app/models/clusters/concerns/provider_status.rb
blob: 2da1ee7aabbef53183dc2f4db724223b5b985fd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# frozen_string_literal: true

module Clusters
  module Concerns
    module ProviderStatus
      extend ActiveSupport::Concern

      included do
        state_machine :status, initial: :scheduled do
          state :scheduled, value: 1
          state :creating, value: 2
          state :created, value: 3
          state :errored, value: 4

          event :make_creating do
            transition any - [:creating] => :creating
          end

          event :make_created do
            transition any - [:created] => :created
          end

          event :make_errored do
            transition any - [:errored] => :errored
          end

          before_transition any => [:errored, :created] do |provider|
            provider.nullify_credentials
          end

          before_transition any => [:creating] do |provider, transition|
            operation_id = transition.args.first
            provider.assign_operation_id(operation_id) if operation_id
          end

          before_transition any => [:errored] do |provider, transition|
            status_reason = transition.args.first
            provider.status_reason = status_reason if status_reason
          end
        end

        def on_creation?
          scheduled? || creating?
        end

        def assign_operation_id(_)
          # Implemented by individual providers if operation ID is supported.
        end
      end
    end
  end
end