Sha256: 127e1269f7b253a1a63622bffe19b6186032eb489da4d5d2667e55a9976c914e

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

module Actions
  module ForemanPatch
    module Round
      class Patch < Actions::ActionWithSubPlans
        include Dynflow::Action::WithBulkSubPlans

        def plan(round)
          action_subject(round)

          limit_concurrency_level round.max_unavailable unless round.max_unavailable.nil?

          plan_self

          round.update!(status: 'pending')
        end

        def create_sub_plans
          current_batch.map do |invocation|
            trigger(Actions::ForemanPatch::Invocation::Patch, invocation)
          end
        end

        def rescue_strategy
          ::Dynflow::Action::Rescue::Skip
        end

        def run(event = nil)
          super unless event == Dynflow::Action::Skip
        end

        def initiate
          round.update!(status: 'running')

          users = ::User.select { |user| user.receives?(:patch_group_initiated) }.compact

          begin
            MailNotification[:patch_group_initiated].deliver(users: users, group: round) unless users.blank?
          rescue => error
            Rails.logger.error(error)
          end

          super
        end

        def check_for_errors!
        end

        def on_finish
          round.update!(status: 'complete')

          users = ::User.select { |user| user.receives?(:patch_group_completed) }.compact

          MailNotification[:patch_group_completed].deliver(users: users, group: round) unless users.blank?
        rescue => error
          Rails.logger.error(error)
        end

        def round
          @round ||= ::ForemanPatch::Round.find(input[:round][:id])
        end

        def invocations
          round.invocations.order(:id)
        end

        def batch(from, size)
          invocations.offset(from).limit(size)
        end

        def total_count
          output[:total_count] || invocations.count
        end

        def humanized_name
          'Patch Group:'
        end

        def humanized_input
          round.name
        end

      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
foreman_patch-1.1.6.alpha5 app/lib/actions/foreman_patch/round/patch.rb
foreman_patch-1.1.6.alpha4 app/lib/actions/foreman_patch/round/patch.rb