On Tue, 28 Jun 2011 15:40:45 +0100, [email protected] wrote: > Hi again, > > We're trying to get Capistrano to talk to cobbler for automated > deployment based on puppet classes (Cobbler is the "source of truth" > on our network). > > I'm basically trying to replicate: > > import xmlrpclib > remote = xmlrpclib.Server("http://cobbler/cobbler_api") > > mgmt_class = raw_input("Please choose a puppet class: ") > > > for system_name in remote.find_system({'mgmt_classes':mgmt_class}): > fqdn = > remote.get_system_for_koan(system_name)['interfaces']['eth0']['hostname'] > first_part = fqdn.split('.')[:1] > if first_part[0].split('-')[:1][0] != "ci": > print fqdn > > however I can't seem to get the call to the API correct in Ruby (the > above python works fine). > > I can get as far as the following before it fails: > > require 'rubygems' > require 'xmlrpc/client' > server = XMLRPC::Client.new2("http://192.168.0.13/cobbler_api") > > servers = server.call2('find_system',"{'mgmt_classes':'default'}")
Wouldn't you want the second argument to be a native ruby dictionary?
Ruby should marshal it across in a way that python will understand
it. Currently it looks like it is being marshaled across as a string,
and that is what cobblerd is failing on.
> puts servers
>
>
> and then it errors with the following error in cobbler.log:
>
> Tue Jun 28 15:39:17 2011 - INFO | REMOTE find_items(system);
> criteria(mgmt_classes); sort(None); user(?)
> Tue Jun 28 15:39:17 2011 - INFO | find_items; ['system']
> Tue Jun 28 15:39:17 2011 - INFO | Exception occured: exceptions.TypeError
> Tue Jun 28 15:39:17 2011 - INFO | Exception value: find() argument
> after ** must be a dictionary
> Tue Jun 28 15:39:17 2011 - INFO | Exception Info:
> File "/usr/lib/python2.4/site-packages/cobbler/remote.py", line
> 1759, in _dispatch
> return method_handle(*params)
> File "/usr/lib/python2.4/site-packages/cobbler/remote.py", line
> 586, in find_system
> return self.find_items("system",criteria,expand=expand)
> File "/usr/lib/python2.4/site-packages/cobbler/remote.py", line
> 573, in find_items
> items = self.api.find_items(what,criteria=criteria)
> File "/usr/lib/python2.4/site-packages/cobbler/api.py", line 426,
> in find_items
> res=items.find(return_list=True, no_errors=False, **criteria)
>
>
> Using the Cobbler Gem doesn't appear to work either (I can't find the
> correct method to use to search based on "mgmt_classes").
>
> Can anyone help?
>
> Thanks,
>
> Matt
> _______________________________________________
> cobbler mailing list
> [email protected]
> https://fedorahosted.org/mailman/listinfo/cobbler
--
Scott Henson
Red Hat CIS Operator
WVU Alum BSAE/BSME
pgpGd24gLsX4E.pgp
Description: PGP signature
_______________________________________________ cobbler mailing list [email protected] https://fedorahosted.org/mailman/listinfo/cobbler
