Bug 1955421

Summary: Inherited hostgroup values are not set when creating host
Product: Red Hat Satellite Reporter: Hao Chang Yu <hyu>
Component: Host GroupAssignee: satellite6-bugs <satellite6-bugs>
Status: CLOSED ERRATA QA Contact: Tasos Papaioannou <tpapaioa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 6.9.0CC: ahumbe, avroy, inecas, jalviso, jjeffers, kgaikwad, ldelouw, lhellebr, pcreech, pmendezh, sadas, tbrisker, vijsingh
Target Milestone: 6.9.3Keywords: Patch, Triaged
Target Release: Unused   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: tfm-rubygem-katello-3.18.1.30-1 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 1962870 (view as bug list) Environment:
Last Closed: 2021-07-01 14:56:48 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Hao Chang Yu 2021-04-30 05:41:56 UTC
Description of problem:
Failed to create a host using a nested hostgroup because all values that inherited from the parent host group are not set, such has content_view_id, content_source_id, lifecycle_environment_id and kickstart_repository_id.

Steps to Reproduce:
1. Create a parent hostgroup. Set the content source, content_view, lifecycle environment and the synced content.
2. Create a nested hostgroup that inherit the above values.
3. Create a host using the nested hostgroup.

hammer host create --name "my-test-client1" --hostgroup-id <the nested hostgroup id> --location "Default Location" --organization "MYORG" --mac="xx:xx:xx:xx:xx:xx" --domain-id 1  --ask-root-password yes --subnet apac-mps --ip xxx.xxx.xxx.xxx

Actual results:
Could not create the host:
  Medium can't be blank
  Content view can't be blank
  Lifecycle environment can't be blank


Expected results:
host created successfully

Additional info:
The "inherited_#{attribute}" method returns an array so rails is unable to set the nested attribute.


# foreman-rake console
Satellite 6.8 output: Hostgroup.find(21).inherited_kickstart_repository_id
=> 707   <========== Correct

Satellite 6.9 output: Hostgroup.find(21).inherited_kickstart_repository_id
=> [707]  <========= Wrong


Make the following change in "/opt/theforeman/tfm/root/usr/share/gems/gems/katello-3.18.1.27/app/models/katello/concerns/hostgroup_extensions.rb" fixed the issue.

@@ -126,7 +126,7 @@
           facet_model = Facets.registered_facets[facet].hostgroup_configuration.model
           value = facet_model.where.not(attribute => nil).joins(:hostgroup).merge(
             ::Hostgroup.where(id: self.ancestor_ids).reorder(ancestry: :desc)
-          ).limit(1).pluck(attribute)
+          ).limit(1).pluck(attribute).first
         end
         value
       end

Comment 1 Bryan Kearney 2021-05-09 16:21:21 UTC
Moving this bug to POST for triage into Satellite since the upstream issue https://projects.theforeman.org/issues/32464 has been resolved.

Comment 3 Tasos Papaioannou 2021-06-07 16:55:06 UTC
Verified on 6.9.3 snap 1.0.

1. Enable and sync Red Hat Enterprise Linux 7 Server Kickstart x86_64 7.9 (rhel-7-server-kickstart).
2. Create a parent hostgroup, selecting content source, content view, lifecycle environment, and Operating System fields.
3. Create a nested hostgroup that inherits those values from the parent hostgroup.
4. Create a host using the nested hostgroup:

# hammer host create --name test-host --hostgroup-id 2 --location-id 2 --organization-id 1 --mac '0e:05:fb:8f:22:d8'
Host created.

Comment 8 errata-xmlrpc 2021-07-01 14:56:48 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (Satellite 6.9.3 Async Bug Fix Update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2021:2636