Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions app/models/manageiq/providers/openstack/cloud_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ class ManageIQ::Providers::Openstack::CloudManager < ManageIQ::Providers::CloudM
supports :create_flavor
supports :label_mapping
supports :events do
_("Events are not supported") unless capabilities["events"]
if capabilities["events"] != true
_("Events are not configured")
elsif capabilities["events_available"] != true
_("Event monitor is not available")
end
end
supports :metrics
supports :storage_manager
Expand Down Expand Up @@ -481,12 +485,15 @@ def swift_service
def verify_credentials(auth_type = nil, options = {})
options[:service] ||= "Compute"
ret = super
return ret unless auth_type.nil?

capabilities["events"] = !!event_monitor_available?
save! if changed?
event_auth_types = %w[amqp stf ceilometer]

true
if event_auth_types.include?(auth_type.to_s) && capabilities["events"].to_s == "true"
capabilities["events_available"] = !!event_monitor_available?
update_columns(:capabilities => capabilities)
end

ret
end

def self.ems_type
Expand Down
26 changes: 26 additions & 0 deletions app/models/manageiq/providers/openstack/manager_mixin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module ManageIQ::Providers::Openstack::ManagerMixin

included do
after_save :stop_event_monitor_queue_on_change
after_save :update_event_capabilities_on_config_change, if: :event_configuration_changed?
before_destroy :stop_event_monitor
end

Expand Down Expand Up @@ -263,6 +264,31 @@ def event_monitor_available?
false
end

def event_configuration_changed?
return false unless self.class.name.include?("CloudManager")

event_roles = %w[amqp ceilometer stf amqp_fallback1 amqp_fallback2]
event_auth_types = %w[amqp ceilometer]

ep_changed = endpoints.any? { |ep| (ep.saved_changes.present? || ep.destroyed?) && event_roles.include?(ep.role) }
auth_changed = authentications.any? { |auth| (auth.saved_changes.present? || auth.destroyed?) && event_auth_types.include?(auth.authtype) }
config_inconsistent = capabilities&.fetch("events", false) && event_monitor_options&.fetch(:events_monitor, nil).blank?

ep_changed || auth_changed || config_inconsistent
end
private :event_configuration_changed?

def update_event_capabilities_on_config_change
@event_monitor_options = nil
events_enabled = event_monitor_options&.fetch(:events_monitor, nil).present?

capabilities["events"] = events_enabled
capabilities["events_available"] &&= events_enabled

update_columns(:capabilities => capabilities)
end
private :update_event_capabilities_on_config_change

def stop_event_monitor_queue_on_change
if event_monitor_class && !self.new_record? && (authentications.detect{ |x| x.previous_changes.present? } ||
endpoints.detect{ |x| x.previous_changes.present? })
Expand Down