I've been trying to do the same and I can't believe there's no single API
endpoint to get the same information than using YAML button (which calls to
http://fqdn.local/hosts/client1/externalNodes?name=client1 URL) or using
/etc/puppet/node.rb client1 as puppet master does.
In my case I can have up to 70 smart class parameters which takes a long
time and is also anoying.
Regards,
Sergio
On Friday, October 30, 2015 at 11:59:17 AM UTC+1, David Evans wrote:
>
> Hi,
>
> I just want to close this off by saying this is the code I am running:
>
> host = get_json('%shosts/%s' % (satellite_url, hostname), username,
> password)
> display_json_results(host)
>
>
> host_scp = get_json('%shosts/%d/smart_class_parameters' % (satellite_url
> , host['id']), username, password)
> for next_host_scp in host_scp['results']:
> host_scp_overrides = get_json(
> '%ssmart_class_parameters/%d/override_values' % (satellite_url,
> next_host_scp['id']), username, password)
> if len(host_scp_overrides['results']):
> for next_override in host_scp_overrides['results']:
> if next_override['match'] == 'fqdn=%s' % (host['name']):
> print(' %s = %s' % (next_host_scp['parameter'], json.dumps(
> next_override['value'], indent=6, sort_keys=True)))
> elif output_verbosity == 'full':
> print(' %s = %s' % (next_host_scp['parameter'], json.dumps(
> next_host_scp['default_value'], indent=6, sort_keys=True)))
>
> It needs a bit of tidying up, but does at least display the info I'm
> interested in.
>
> I actually wanted to group the variables by puppet class, but when I wrote
> the code to find every smart class parameter associated with a puppet
> class, and then every override associated with each parameter it was
> tragically slow. Here's the code:
>
> host = get_json('%shosts/%s' % (satellite_url, hostname), username,
> password)
> display_json_results(host)
>
>
> print('Host is %s' % (host['name']))
> parameters = get_json('%shosts/%s/parameters' % (satellite_url, host[
> 'id']), username, password)
> for next_puppet_class in sorted(host['all_puppetclasses']):
> print(' Puppet class [%s]' % (next_puppet_class['name']))
> sc_params = get_json('%spuppetclasses/%d/smart_class_parameters' % (
> satellite_url, next_puppet_class['id']), username, password)
> if len(sc_params['results']):
> sc_params_ids = set([next_sc_param['id'] for next_sc_param in
> sc_params['results']])
> for next_sc_param in sc_params_ids:
> host_scp_overrides = get_json(
> '%ssmart_class_parameters/%d/override_values' % (satellite_url,
> next_sc_param), username, password)
> for next_override in host_scp_overrides['results']:
> if next_override['match'] == 'fqdn=%s' % (host['name']):
> print('%s ' % (next_override['value']))
>
>
> That takes 233 seconds, where as the first example code I gave takes 101
> seconds (so neither is really acceptable, but I can't see a better way of
> doing it).
>
> Regards,
> David
>
>
>
>
>
> On Thursday, 29 October 2015 09:57:44 UTC, David Evans wrote:
>>
>> Hi,
>>
>> I think I have my solution. I should have been trying to display
>> overides to smart class parameters. Thanks again Justin for all your help
>> - got the breakthrough here -
>> http://www.katello.org/docs/api/apidoc/override_values.html.
>>
>> Regards,
>> David
>>
>> On Wednesday, 28 October 2015 14:45:59 UTC, David Evans wrote:
>>>
>>> Hi Justin,
>>>
>>> Thanks for that. I can see what you're doign there, and when I do the
>>> same I can see the variables associated with other entities (hostgroups for
>>> example).
>>>
>>> Unfortunately I have very few variables assoicated in that way. All
>>> mine are associated with the host itself and only one is inherited from
>>> anywhere - that's the activation key which comes from the host group. In
>>> my previous example I was expecting to see about 20 variables I have
>>> overridden on the host itself, but none of them are displayed. I see now
>>> that I wasn't clear in my last post what I was expecting to see.
>>>
>>> Regards,
>>> David
>>>
>>>
>>>
>>>
>>> On Tuesday, 27 October 2015 16:36:58 UTC, Justin Garrison wrote:
>>>>
>>>> I am also using rhel 7 and satellite 6. Here is rough code that I used
>>>> to look for kt_activation_key from a host parameters and if it wasn't
>>>> found
>>>> go up one level to the host group.
>>>>
>>>> I'm using requests <http://docs.python-requests.org/en/latest/> for
>>>> the api interaction
>>>>
>>>> def get_activationkeys(host_id, k_server):
>>>> """Get the activation keys a system should have based on the
>>>> kt_activation_keys parameter in katello"""
>>>> des_act_keys = ""
>>>> hg_params = ""
>>>>
>>>>
>>>>
>>>> k_host = get_katello_host(host_id, k_server)
>>>> if k_host['hostgroup_id']:
>>>> hg_params =
>>>> requests.get('https://%s/api/v2/hostgroups/%s/parameters' \
>>>> % (k_server, k_host['hostgroup_id']), auth=KATELLO_AUTH, \
>>>> verify=BUNDLE_CERT).json()
>>>> if k_host['parameters']:
>>>> # try to get kt_activation_key from host. If not use hostgroup
>>>> # eventually change to all_parameters
>>>> for parameter in k_host['parameters']:
>>>> if parameter.get('name') == 'kt_activation_keys':
>>>> des_act_keys = parameter['value']
>>>> break
>>>> if not des_act_keys and hg_params:
>>>> for result in hg_params['results']:
>>>> if result.get('name') == 'kt_activation_keys':
>>>> des_act_keys = result['value']
>>>> if des_act_keys:
>>>> return des_act_keys.split(",")
>>>> else:
>>>> return 0
>>>>
>>>>
>>>> This only looks up 1 level but you could repeat if you have multiple
>>>> levels.
>>>>
>>>> Hope that give you a starting point.
>>>>
>>>> On Tuesday, October 27, 2015 at 7:01:22 AM UTC-7, David Evans wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> Thanks to both of you for these responses and sorry for the delay
>>>>> replying.
>>>>>
>>>>> @Shlomi - thanks it looks like the you are implementing the solution I
>>>>> require, but it will be sometime before it is available to RH Satellite.
>>>>> In the meantime I tried to implement the patches, but the code I am
>>>>> running is sufficiently different to what the patch is based on that it
>>>>> didn't work.
>>>>>
>>>>> @Justin - this looks like exactly what I need to get me going while I
>>>>> await the updated functionality mentioned by Shlomi. Unfortunately it
>>>>> doesn't work for me. Things may be slightly different because I am using
>>>>> Satellite and not pure Foreman - I don't know. Anyway, the path to the
>>>>> API
>>>>> is different (uses 'api/v2') and using that I got it to run successfully,
>>>>> but it returns nothing. Here's the code I am using:
>>>>>
>>>>> host = get_json('%shosts/%s' % (satellite_url, hostname), username,
>>>>> password)
>>>>> display_json_results(host)
>>>>>
>>>>>
>>>>> print('Host id is %s' % (host['id']))
>>>>>
>>>>>
>>>>> parameters = get_json('%shosts/%d/parameters' % (satellite_url, host
>>>>> ['id']), username, password)
>>>>> display_json_results(parameters)
>>>>>
>>>>>
>>>>> The first part of that works, and I get the host id, which is correct
>>>>> (verified through hammer), but the final part doesn't give me any
>>>>> parameters for the host, just this:
>>>>>
>>>>>
>>>>> <snip>
>>>>> "subnet_name": "BRL_DEVUAT_INFRA_SERVER",
>>>>> "updated_at": "2015-10-27T13:34:02Z",
>>>>> "use_image": null,
>>>>> "uuid": null
>>>>> }
>>>>> Host id is 221
>>>>> {
>>>>> "page": 1,
>>>>> "per_page": 40,
>>>>> "results": [],
>>>>> "search": null,
>>>>> "sort": {
>>>>> "by": null,
>>>>> "order": null
>>>>> },
>>>>> "subtotal": 0,
>>>>> "total": 0
>>>>> }
>>>>>
>>>>> I am trying to run 'yum update' on my Satellite server in case that
>>>>> helps with any of these issues and I'll report back once that is done.
>>>>> There is an issue with that at the moment, which is rpm dependency
>>>>> related, so it may not be immediate. In the meantime if anyone can spot
>>>>> anything stupidly obvious that is wrong with the code I'm running I'd
>>>>> appreciate it. Thanks.
>>>>>
>>>>> Regards,
>>>>> David
>>>>>
>>>>> On Monday, 26 October 2015 23:32:35 UTC, Justin Garrison wrote:
>>>>>>
>>>>>> I was having the exact same problem. The documentation here
>>>>>> <http://www.katello.org/docs/api/apidoc/parameters/index.html> says
>>>>>> you can get parameters from /api/hosts/:host_id/parameters but that will
>>>>>> only show parameters that are set directly on the host or set as an
>>>>>> override on the host. It will not show any inherited parameters. My
>>>>>> solution was to look for a parameter in the host/parameters and if it's
>>>>>> not
>>>>>> there get the host group id and look for the parameter there. If
>>>>>> multiple
>>>>>> host groups are nested you may have to do this repeatedly until you find
>>>>>> the parameter you want.
>>>>>>
>>>>>> That's a terrible solution. Luckily in a future version there will be
>>>>>> a all_parameters value on the host which will show all parameters merged
>>>>>> into one dictionary. See http://projects.theforeman.org/issues/11763
>>>>>> to track the issue. I'm watching that bug and plan to change my code
>>>>>> when
>>>>>> it's merged and released.
>>>>>>
>>>>>> Hope that helps
>>>>>>
>>>>>> On Monday, October 26, 2015 at 7:08:42 AM UTC-7, David Evans wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I'm writing a script in Python that needs to enumerate all the host
>>>>>>> parameters that have been overridden for a given host. Can anyone help
>>>>>>> me
>>>>>>> understand how to do that?
>>>>>>>
>>>>>>> Initially I was looking through the Red Hat Satellite API guide, but
>>>>>>> I couldn't find a way to do it there. Then I tried to accomplish the
>>>>>>> same
>>>>>>> using hammer, but again with no success. My thinking there was that if
>>>>>>> I
>>>>>>> could accomplish it via hammer that would probably help my
>>>>>>> understanding of
>>>>>>> how it should be implemented in python. So, with that in mind I guess
>>>>>>> my
>>>>>>> questions are:
>>>>>>>
>>>>>>> 1. Which tree of the API will allow me to see which variables have
>>>>>>> been overridden and what values have been set?
>>>>>>> 2. Is there a way in the API to query overrides by host, or is
>>>>>>> that something I will need to do myself?
>>>>>>>
>>>>>>> I want to clarify what I mean by 'host parameters' in case it is not
>>>>>>> clear. If go to 'Hosts\All Hosts' in the Satellite Web UI and then
>>>>>>> select
>>>>>>> a host and go to the parameters tab I see a list of the variables
>>>>>>> available
>>>>>>> to associated puppet modules. If I elect to override any of those
>>>>>>> parameters they appear at the bottom of the tab under the heading 'host
>>>>>>> parameters'. In this list I can see the puppet module, variable name
>>>>>>> and
>>>>>>> override value, which is the data I need to extract for my script.
>>>>>>>
>>>>>>> Thanks in advance for any assistance.
>>>>>>>
>>>>>>> Regards,
>>>>>>> David
>>>>>>>
>>>>>>> PS, my environment is RHEL7, Satellite 6, python 2.7 and I have
>>>>>>> written enough of the code to query simple braches and display output
>>>>>>> (such
>>>>>>> as hosts and environments).
>>>>>>>
>>>>>>
--
You received this message because you are subscribed to the Google Groups
"Foreman users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/foreman-users.
For more options, visit https://groups.google.com/d/optout.