diff --git a/app/models/miq_event.rb b/app/models/miq_event.rb index 292a026eadc..88916c3e72f 100644 --- a/app/models/miq_event.rb +++ b/app/models/miq_event.rb @@ -79,7 +79,16 @@ def process_evm_event(inputs = {}) end def self.build_evm_event(event, target) - MiqEvent.create(:event_type => event, :target => target, :source => 'POLICY', :timestamp => Time.now.utc) + user = User.current_user + MiqEvent.create( + :event_type => event, + :target => target, + :source => 'POLICY', + :timestamp => Time.now.utc, + :user_id => user.try(:id), + :group_id => user.try(:current_group).try(:id), + :tenant_id => user.try(:current_tenant).try(:id) + ) end def update_with_policy_result(result = {}) diff --git a/app/models/mixins/process_tasks_mixin.rb b/app/models/mixins/process_tasks_mixin.rb index 3858822dc0c..9cbdae7b598 100644 --- a/app/models/mixins/process_tasks_mixin.rb +++ b/app/models/mixins/process_tasks_mixin.rb @@ -11,16 +11,20 @@ def process_tasks(options) task_audit_event(:success, options, :message => msg) else assert_known_task(options) - options[:userid] ||= "system" + options[:userid] ||= User.current_user.try(:userid) || "system" invoke_tasks_queue(options) end end def invoke_tasks_queue(options) + user = User.current_user MiqQueue.submit_job( :class_name => name, :method_name => "invoke_tasks", - :args => [options] + :args => [options], + :user_id => user.id, + :group_id => user.current_group.id, + :tenant_id => user.current_tenant.id ) end @@ -74,11 +78,15 @@ def invoke_tasks_remote(options) $log.error("An error occurred while invoking remote tasks...Requeueing for 1 minute from now.") $log.log_backtrace(err) + user = User.current_user MiqQueue.submit_job( :class_name => name, :method_name => 'invoke_tasks_remote', :args => [remote_options], - :deliver_on => Time.now.utc + 1.minute + :deliver_on => Time.now.utc + 1.minute, + :user_id => user.id, + :group_id => user.current_group.id, + :tenant_id => user.current_tenant.id ) next end @@ -131,6 +139,7 @@ def task_arguments(options) # default implementation, can be overridden def invoke_task_local(task, instance, options, args) + user = User.current_user cb = { :class_name => task.class.to_s, :instance_id => task.id, @@ -143,7 +152,10 @@ def invoke_task_local(task, instance, options, args) :instance_id => instance.id, :method_name => options[:task], :args => args, - :miq_callback => cb + :miq_callback => cb, + :user_id => user.id, + :group_id => user.current_group.id, + :tenant_id => user.current_tenant.id ) end diff --git a/app/models/vm_or_template.rb b/app/models/vm_or_template.rb index dfaf564ec2e..66735291ed5 100644 --- a/app/models/vm_or_template.rb +++ b/app/models/vm_or_template.rb @@ -427,6 +427,7 @@ def powerops_callback(task_id, status, msg, result, queue_item) # override def self.invoke_task_local(task, vm, options, args) + user = User.current_user cb = nil if task cb = @@ -454,6 +455,9 @@ def self.invoke_task_local(task, vm, options, args) :method_name => options[:task], :args => args, :miq_callback => cb, + :user_id => user.id, + :group_id => user.current_group.id, + :tenant_id => user.current_tenant.id ) else MiqQueue.submit_job( @@ -464,6 +468,9 @@ def self.invoke_task_local(task, vm, options, args) :method_name => options[:task], :args => args, :miq_callback => cb, + :user_id => user.id, + :group_id => user.current_group.id, + :tenant_id => user.current_tenant.id ) end end diff --git a/spec/models/miq_event_spec.rb b/spec/models/miq_event_spec.rb index 6e506a73935..9128d414735 100644 --- a/spec/models/miq_event_spec.rb +++ b/spec/models/miq_event_spec.rb @@ -102,6 +102,20 @@ expect(MiqAeEvent).not_to receive(:raise_evm_event) MiqEvent.raise_evm_event(@miq_server, "evm_server_start") end + + it "will create miq_event object with username" do + user = FactoryGirl.create(:user_with_group, :userid => "test") + vm = FactoryGirl.create(:vm_vmware) + event = 'request_vm_start' + FactoryGirl.create(:miq_event_definition, :name => event) + + User.with_user(user) do + event_obj = MiqEvent.raise_evm_event(vm, event) + expect(event_obj.user_id).to eq(user.id) + expect(event_obj.group_id).to eq(user.current_group.id) + expect(event_obj.tenant_id).to eq(user.current_tenant.id) + end + end end context "#process_evm_event" do diff --git a/spec/models/mixins/process_tasks_mixin_spec.rb b/spec/models/mixins/process_tasks_mixin_spec.rb index 289d578a747..bd2e3d58639 100644 --- a/spec/models/mixins/process_tasks_mixin_spec.rb +++ b/spec/models/mixins/process_tasks_mixin_spec.rb @@ -28,6 +28,7 @@ def test_method it "queues a message for the specified task" do EvmSpecHelper.create_guid_miq_server_zone + allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin")) test_class.process_tasks(:task => "test_method", :ids => [5], :userid => "admin") message = MiqQueue.first @@ -42,6 +43,7 @@ def test_method it "defaults the userid to system in the queue message" do EvmSpecHelper.create_guid_miq_server_zone + allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin")) test_class.process_tasks(:task => "test_method", :ids => [5]) message = MiqQueue.first @@ -50,7 +52,7 @@ def test_method message.args.each do |h| expect(h[:task]).to eq("test_method") expect(h[:ids]).to eq([5]) - expect(h[:userid]).to eq("system") + expect(h[:userid]).to eq("admin") end end @@ -98,6 +100,7 @@ def test_method end it "requeues invoke_tasks_remote when invoke_api_tasks fails" do + allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin")) expect(InterRegionApiMethodRelay).to receive(:api_client_connection_for_region) expect(test_class).to receive(:invoke_api_tasks).and_raise(RuntimeError) test_class.invoke_tasks_remote(test_options) @@ -118,6 +121,7 @@ def test_method end it "requeues if the server does not have an address" do + allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin")) test_class.invoke_tasks_remote(test_options) expect(MiqQueue.first).to have_attributes( diff --git a/spec/models/vm_spec.rb b/spec/models/vm_spec.rb index 2ef9786c078..5ed73819ab6 100644 --- a/spec/models/vm_spec.rb +++ b/spec/models/vm_spec.rb @@ -117,6 +117,7 @@ EvmSpecHelper.create_guid_miq_server_zone @host = FactoryGirl.create(:host) @vm = FactoryGirl.create(:vm_vmware, :host => @host) + allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "Freddy")) end it "sets up standard callback for non Power Operations" do