Skip to content

Commit

Permalink
Add retirement initiator context
Browse files Browse the repository at this point in the history
  • Loading branch information
d-m-u committed Sep 20, 2018
1 parent c82de9a commit 6cfc8e8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 20 deletions.
2 changes: 1 addition & 1 deletion app/models/mixins/process_tasks_mixin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ module ClassMethods
def process_tasks(options)
raise _("No ids given to process_tasks") if options[:ids].blank?
if options[:task] == 'retire_now'
name.constantize.make_retire_request(*options[:ids])
name.constantize.make_retire_request(*options[:ids], User.find_by(:userid => User.current_user.try(:userid)))
elsif options[:task] == "refresh_ems" && respond_to?("refresh_ems")
refresh_ems(options[:ids])
msg = "'#{options[:task]}' initiated for #{options[:ids].length} #{ui_lookup(:table => base_class.name).pluralize}"
Expand Down
55 changes: 37 additions & 18 deletions app/models/mixins/retirement_mixin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ module RetirementMixin
end

module ClassMethods
def make_retire_request(*src_ids)
def make_retire_request(*src_ids, requester)
klass = (name.demodulize + "RetireRequest").constantize
options = {:src_ids => src_ids.presence || id, :__request_type__ => klass.request_types.first}
klass.make_request(nil, options, User.current_user, true)
options = {:src_ids => src_ids.presence, :__request_type__ => klass.request_types.first}
klass.make_request(nil, options, requester, true)
end

def retire(ids, options = {})
Expand Down Expand Up @@ -112,18 +112,19 @@ def raise_retire_audit_event(message)

def retirement_check
return if retired? || retiring? || retirement_initialized?
requester = system_context_requester

if !retirement_warned? && retirement_warning_due?
begin
self.retirement_last_warn = Time.now.utc
save
raise_retirement_event(retire_warn_event_name)
raise_retirement_event(retire_warn_event_name, requester)
rescue => err
_log.log_backtrace(err)
end
end

self.class.make_retire_request(self.id) if retirement_due?
self.class.make_retire_request(self.id, *requester) if retirement_due?
end

def retire_now(requester = nil)
Expand All @@ -140,7 +141,7 @@ def retire_now(requester = nil)
event_name = "request_#{retirement_event_prefix}_retire"
_log.info("calling #{event_name}")
begin
raise_retirement_event(event_name, requester)
raise_retirement_event(event_name, requester ||= current_user)
rescue => err
_log.log_backtrace(err)
end
Expand Down Expand Up @@ -201,14 +202,12 @@ def retired_event_name
end

def raise_retirement_event(event_name, requester = nil)
requester ||= User.current_user.try(:userid)
q_options = retire_queue_options
$log.info("Requester [#{requester}] raising Retirement Event for [#{name}] with queue options: #{q_options.inspect}")
MiqEvent.raise_evm_event(self, event_name, setup_event_hash(requester), q_options)
q_options = q_user_info(retire_queue_options, requester)
$log.info("Raising Retirement Event for [#{name}] with queue options: #{q_options.inspect}")
MiqEvent.raise_evm_event(self, event_name, setup_event_hash(requester, initiator), q_options)
end

def raise_audit_event(event_name, message, requester = nil)
requester ||= User.current_user.try(:userid)
event_hash = {
:target_class => retirement_base_model_name,
:target_id => id.to_s,
Expand Down Expand Up @@ -237,14 +236,34 @@ def valid_zone?
respond_to?(:my_zone) && my_zone.present?
end

def setup_event_hash(requester)
event_hash = {:retirement_initiator => "system"}
event_hash[retirement_base_model_name.underscore.to_sym] = self
event_hash[:host] = host if self.respond_to?(:host)
if requester
event_hash[:userid] = requester
event_hash[:retirement_initiator] = "user"
def system_context_requester
if respond_to?(:evm_owner) && evm_owner.present?
evm_owner.id
elsif respond_to?(:tenant_identity)
tenant_identity
else
$log.info("Cannot retire without a valid owner, you moron.")
raise # raise something here
end
end

def current_user
User.find_by(:userid => User.current_user.try(:userid))
end

def q_user_info(q_options, requester)
q_options[:user_id] = requester.id
q_options[:group_id] = requester.current_group.id
q_options[:tenant_id] = requester.current_tenant.id
q_options
end

def setup_event_hash(requester, initiator)
event_hash = {}
event_hash[:retirement_initiator] = initiator
event_hash[:userid] = requester
event_hash[retirement_base_model_name.underscore.to_sym] = self
event_hash[:host] = host if respond_to?(:host)
event_hash[:type] ||= self.class.name
event_hash
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@
event_hash = {
:orchestration_stack => @stack,
:type => "OrchestrationStack",
:retirement_initiator => "system"
:retirement_initiator => "system",
:userid => nil
}

expect(MiqEvent).to receive(:raise_evm_event).with(@stack, event_name, event_hash, {})
Expand Down

0 comments on commit 6cfc8e8

Please sign in to comment.