Skip to content

Commit 000f511

Browse files
authored
Merge pull request #13423 from durandom/ansible_event_catcher
Ansible Tower Event Catcher
2 parents 9704f7f + 9e8622c commit 000f511

File tree

6 files changed

+103
-0
lines changed

6 files changed

+103
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventCatcher < ManageIQ::Providers::BaseManager::EventCatcher
2+
require_nested :Runner
3+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventCatcher::Runner < ManageIQ::Providers::BaseManager::EventCatcher::Runner
2+
def stop_event_monitor
3+
event_monitor_handle.stop
4+
end
5+
6+
def monitor_events
7+
event_monitor_handle.start
8+
event_monitor_handle.poll do |event|
9+
_log.debug { "#{log_prefix} Received event #{event.id}" }
10+
event_monitor_running
11+
@queue.enq event
12+
end
13+
ensure
14+
stop_event_monitor
15+
end
16+
17+
def queue_event(event)
18+
_log.info "#{log_prefix} Caught event [#{event.id}]"
19+
event_hash = ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventParser.event_to_hash(event, @cfg[:ems_id])
20+
EmsEvent.add_queue('add', @cfg[:ems_id], event_hash)
21+
end
22+
23+
private
24+
25+
def event_monitor_handle
26+
@event_monitor_handle ||= begin
27+
ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventCatcher::Stream.new(
28+
@ems,
29+
:poll_sleep => worker_settings[:poll]
30+
)
31+
end
32+
end
33+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventCatcher::Stream
2+
class ProviderUnreachable < ManageIQ::Providers::BaseManager::EventCatcher::Runner::TemporaryFailure
3+
end
4+
5+
def initialize(ems, options = {})
6+
@ems = ems
7+
@last_activity = nil
8+
@stop_polling = false
9+
@poll_sleep = options[:poll_sleep] || 20.seconds
10+
end
11+
12+
def start
13+
@stop_polling = false
14+
end
15+
16+
def stop
17+
@stop_polling = true
18+
end
19+
20+
def poll
21+
@ems.with_provider_connection do |ansible|
22+
catch(:stop_polling) do
23+
begin
24+
loop do
25+
ansible.api.activity_stream.all(filter).each do |activity|
26+
throw :stop_polling if @stop_polling
27+
yield activity
28+
@last_activity = activity
29+
end
30+
sleep @poll_sleep
31+
end
32+
rescue => exception
33+
raise ProviderUnreachable, exception.message
34+
end
35+
end
36+
end
37+
end
38+
39+
private
40+
41+
def filter
42+
{
43+
:order_by => 'timestamp',
44+
:timestamp__gt => @last_activity ? @last_activity.timestamp : 1.minute.ago.to_s(:db)
45+
}
46+
end
47+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventParser
2+
def self.event_to_hash(event, ems_id)
3+
{
4+
:event_type => "ansible_tower_#{event.operation}",
5+
:source => "ANSIBLE_TOWER",
6+
:message => event.changes.to_s,
7+
:timestamp => event.timestamp,
8+
:full_data => event.to_h,
9+
:ems_id => ems_id
10+
}
11+
end
12+
end

app/models/miq_server/worker_management/monitor/class_names.rb

+2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ module MiqServer::WorkerManagement::Monitor::ClassNames
4343
ManageIQ::Providers::Vmware::InfraManager::RefreshWorker
4444
ManageIQ::Providers::Nuage::NetworkManager::RefreshWorker
4545
ManageIQ::Providers::Amazon::CloudManager::EventCatcher
46+
ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventCatcher
4647
ManageIQ::Providers::Azure::CloudManager::EventCatcher
4748
ManageIQ::Providers::Hawkular::MiddlewareManager::EventCatcher
4849
ManageIQ::Providers::Google::CloudManager::EventCatcher
@@ -134,6 +135,7 @@ module MiqServer::WorkerManagement::Monitor::ClassNames
134135
ManageIQ::Providers::StorageManager::CinderManager::EventCatcher
135136
ManageIQ::Providers::Amazon::CloudManager::EventCatcher
136137
ManageIQ::Providers::Azure::CloudManager::EventCatcher
138+
ManageIQ::Providers::AnsibleTower::ConfigurationManager::EventCatcher
137139
ManageIQ::Providers::Hawkular::MiddlewareManager::EventCatcher
138140
ManageIQ::Providers::Google::CloudManager::EventCatcher
139141
ManageIQ::Providers::Kubernetes::ContainerManager::EventCatcher

config/settings.yml

+6
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,10 @@
230230
:name: Application
231231
:configuration:
232232
:critical:
233+
- ansible_tower_create
234+
- ansible_tower_update
235+
- ansible_tower_delete
236+
- ansible_tower_associate
233237
- ClusterReconfiguredEvent
234238
- EnterMaintenanceMode_Task_Complete
235239
- ExitMaintenanceMode_Task_Complete
@@ -1201,6 +1205,8 @@
12011205
:memory_threshold: 2.gigabytes
12021206
:nice_delta: 1
12031207
:poll: 1.seconds
1208+
:event_catcher_ansible_tower:
1209+
:poll: 20.seconds
12041210
:event_catcher_redhat:
12051211
:poll: 15.seconds
12061212
:event_catcher_vmware:

0 commit comments

Comments
 (0)