Bug 1391945 - Structured facts - not supported?
Summary: Structured facts - not supported?
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Satellite
Classification: Red Hat
Component: Fact
Version: 6.2.5
Hardware: All
OS: Linux
urgent
urgent vote
Target Milestone: Unspecified
Assignee: satellite6-bugs
QA Contact: Sanket Jagtap
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2016-11-04 12:53 UTC by Karl Abbott
Modified: 2020-04-15 14:48 UTC (History)
7 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2018-02-21 17:09:57 UTC
Target Upstream Version:


Attachments (Terms of Use)
UI struct facts (19.01 KB, image/png)
2017-09-27 04:35 UTC, Sanket Jagtap
no flags Details


Links
System ID Private Priority Status Summary Last Updated
Foreman Issue Tracker 4528 0 None None None 2016-11-04 13:15:54 UTC

Description Karl Abbott 2016-11-04 12:53:19 UTC
I have a puppet fact which returns a puppet structured fact:

cs_addevicegroups => ["GSD-ALL-00-OB_GBL_Provisioning", "GSD_test"]

However is satellite this is a concatenated string:

(call to https://usl10149341.am.hedani.net/api/v2/hosts/15)

"facts" : {
<--snip-->
    "cs_addevicegroups": "GSD-ALL-00-OB_GBL_ProvisioningGSD_test"
}

I also see this behavior for puppet standard facts (processors and system_uptime for example):

processors => {"models"=>["Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz"], "physicalcount"=>1, "count"=>1}
system_uptime => {"days"=>33, "uptime"=>"33 days", "hours"=>805, "seconds"=>2900888}

"facts" : {
<--snip-->
  "processors": "count1modelsIntel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHzphysicalcount1",
  "system_uptime": "seconds2900497hours805days33uptime33 days"
}

I'd expect to be able to:

a) search within a structured fact (?search=facts.structured_fact_name = GSD_test does not return any entries. ?search=facts.structured_fact_name ~ GSD_test works BUT would capture GSD_test_hosts etc. Too fuzzy. ?search=facts.structured_fact_name ^ GSD_test fails completely (probably unsurprising!)

b) view the fact via the api in its original structure (I'd expect to do <value>.class or <value>.is_a?(Hash) etc)

Comment 2 Marek Hulan 2016-11-04 13:15:54 UTC
Thanks for the report Karl, I don't see any private information in the BZ, could you please publish it? The support for structured facts was merged upstream in Foreman 1.13. I'm not sure I understand part b), our API responds in JSON format, how would you call #class or #is_a?(Hash) on it?

Comment 3 Karl Abbott 2016-11-04 13:18:24 UTC
I'll defer to Andrew Schofield on that question as he is the one who filed the issue with us.

Cheers,
Karl

Comment 4 Bryan Kearney 2016-11-04 14:06:32 UTC
Moving this bug to POST for triage into Satellite 6 since the upstream issue http://projects.theforeman.org/issues/4528 has been resolved.

Comment 5 Andrew Schofield 2016-11-04 15:15:05 UTC
(In reply to Marek Hulan from comment #2)
> Thanks for the report Karl, I don't see any private information in the BZ,
> could you please publish it? The support for structured facts was merged
> upstream in Foreman 1.13. I'm not sure I understand part b), our API
> responds in JSON format, how would you call #class or #is_a?(Hash) on it?

Marek - with regards to (b) I'm asking that, using the API, I can run something like JSON.parse converting into ruby objects then call to identify the format of the fact from there. So long as the original value of the structured fact is being returned via the API.

Comment 6 Marek Hulan 2016-11-07 09:55:25 UTC
Thanks for explanation. That's currently not possible, we only list facts as key value combination and constructing of all composed values might be performance issue for multiple facts. Maybe we could add this if users asks for specific fact only, in other words add a show action for signle fact, if you're interested, please open a separate RFE for this.

Today you could write a simple script that combines facts loaded through API and constructs the composite value for you. This class might be useful - https://github.com/theforeman/foreman_chef/blob/d460134c221ccb7cd38c2df6eafcaade7457fdf2/app/models/foreman_chef/fact_importer.rb#L110-L129

With class like it you'd just load all facts into a hash and then call something like this:

    Sparser.new.unsparse({'a::b::c' => 'x', 'a::b::d' => 'y'}, :separator => '::')

This results in

    {"a"=>{"b"=>{"c"=>"x", "d"=>"y"}}}

Comment 7 Sanket Jagtap 2017-09-27 04:34:30 UTC
Build: Satellite 6.3 snap 17 

/api/fact_values?search=name+%3D+partitions

Returned structured facts 

  "results": {"nikb39237be-87ca-4705-b7b2-500eee158fe5.sat.com":{"partitions":"{\"sda1\"=>{\"uuid\"=>\"41baa60f-8ed1-476f-80b2-138b5a888d21\", \"size\"=>\"2097152\", \"mount\"=>\"/boot\", \"filesystem\"=>\"xfs\"}, \"sda2\"=>{\"size\"=>\"39843840\", \"filesystem\"=>\"LVM2_member\"}}"},"nika7da3a2c-842a-4528-b16c-9a3b1a6ed4c5.sat.com":{"partitions":"{\"sda1\"=>{\"uuid\"=>\"c4effd3e-74cf-4d57-94ed-74df5b8b7b9d\", \"size\"=>\"2097152\", \"mount\"=>\"/boot\", \"filesystem\"=>\"xfs\"}, \"sda2\"=>{\"size\"=>\"39843840\", \"filesystem\"=>\"LVM2_member\"}}"},"nik8fe0d0c1-4350-42ef-ade4-592a02db25d1.sat.com":{"partitions":"{\"sda1\"=>{\"uuid\"=>\"ed7d5292-52ef-4739-aad5-e643cfa0f689\", \"size\"=>\"2097152\", \"mount\"=>\"/boot\", \"filesystem\"=>\"xfs\"}, \"sda2\"=>{\"size\"=>\"39843840\", \"filesystem\"=>\"LVM2_member\"}}"},"nik5d814a9e-7b49-47f5-be7c-ecedc4cbb22f.sat.com":{"partitions":"{\"sda1\"=>{\"uuid\"=>\"f6c7f405-f1bd-432c-bfca-6e6efa2e30da\", \"size\"=>\"2097152\", \"mount\"=>\"/boot\", \"filesystem\"=>\"xfs\"}, \"sda2\"=>{\"size\"=>\"39843840\", \"filesystem\"=>\"LVM2_member\"}}"},"todd-lolar.sat.com":{"partitions":"{\"vda1\"=>{\"uuid\"=>\"17eb29dd-a0c5-43f5-856c-c0d48d8734bd\", \"size\"=>\"2097152\", \"mount\"=>\"/boot\", \"filesystem\"=>\"xfs\"}, \"vda2\"=>{\"size\"=>\"18872320\", \"filesystem\"=>\"LVM2_member\"}}"}}
}


Also, UI , lists the structured facts in correct format.

However I ran into issue while searching in structured facts with IN operator
Tracking here https://bugzilla.redhat.com/show_bug.cgi?id=1496322

Comment 8 Sanket Jagtap 2017-09-27 04:35:07 UTC
Created attachment 1331293 [details]
UI struct facts

Comment 9 Bryan Kearney 2018-02-21 17:09:57 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, 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/RHSA-2018:0336


Note You need to log in before you can comment on or make changes to this bug.