From e8508db0803acdd45a2940f25de1f13c051c7aa3 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Thu, 15 Aug 2024 17:57:44 -0400 Subject: [PATCH] Refs #37696 - Don't run sub facet fact parser on non registered hosts * When a host that is not registered with subscription manager tries to update facts we get an error "Content host must be unregistered before performing this action" This change causes the fact parser to skip if the host does not have a subscription facet, also changing the db column from int4 to boolean --- app/models/katello/host/subscription_facet.rb | 3 ++- .../20240815215102_change_convert2_rhel_to_boolean.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20240815215102_change_convert2_rhel_to_boolean.rb diff --git a/app/models/katello/host/subscription_facet.rb b/app/models/katello/host/subscription_facet.rb index a9cf4d30697..f058fb1fa12 100644 --- a/app/models/katello/host/subscription_facet.rb +++ b/app/models/katello/host/subscription_facet.rb @@ -298,11 +298,12 @@ def backend_update_needed? end def self.populate_fields_from_facts(host, parser, _type, _source_proxy) + return unless host.subscription_facet # skip method if the host is not a registered host has_convert2rhel = parser.facts.key?('conversions.env.CONVERT2RHEL_THROUGH_FOREMAN') # Add in custom convert2rhel fact if system was converted using convert2rhel through Katello # We want the value nil unless the custom fact is present otherwise we get a 0 in the database which if debugging # might make you think it was converted2rhel but not with satellite, that is why I have the tenary below. - facet = host.subscription_facet || host.build_subscription_facet + facet = host.subscription_facet facet.attributes = { convert2rhel_through_foreman: has_convert2rhel ? ::Foreman::Cast.to_bool(parser.facts['conversions.env.CONVERT2RHEL_THROUGH_FOREMAN']) : nil }.compact diff --git a/db/migrate/20240815215102_change_convert2_rhel_to_boolean.rb b/db/migrate/20240815215102_change_convert2_rhel_to_boolean.rb new file mode 100644 index 00000000000..b9d1fff723d --- /dev/null +++ b/db/migrate/20240815215102_change_convert2_rhel_to_boolean.rb @@ -0,0 +1,9 @@ +class ChangeConvert2RhelToBoolean < ActiveRecord::Migration[6.1] + def up + change_column :katello_subscription_facets, :convert2rhel_through_foreman, :boolean, using: 'convert2rhel_through_foreman::boolean' + end + + def down + change_column :katello_subscription_facets, :convert2rhel_through_foreman, :integer, using: 'convert2rhel_through_foreman::integer' + end +end