Okay,

I figured it out, and I wanted to share.

First, the code which was commented out did disable the inventory portion.
After uncommenting it out on the minion, it did work.  I know that there 
probably are issues with flatten=False, but it shouldn't have been completely 
disabled....well, I'm not sure if it should.

    def inventory(self, flatten=True):
        """
        Returns information on all installed packages.
        By default, 'flatten' is passed in as True, which makes printouts very
        clean in diffs for use by func-inventory.  If you are writting another
        software application, using flatten=False will prevent the need to
        parse the returns.
        """
        # I have not been able to get flatten=False to work if there
        # is more than 491 entries in the dict -- ashcrow
        ts = rpm.TransactionSet()
        mi = ts.dbMatch()
        results = []
        if not mi:
            return
        for hdr in mi:
            name = hdr['name']
            epoch = (hdr['epoch'] or 0)
            version = hdr['version']
            release = hdr['release']
            arch = hdr['arch']
            if flatten:
                results.append("%s %s %s %s %s" % (name, epoch, version,
                                                   release, arch))
            else:
                results.append([name, epoch, version, release, arch])
#        results = []
        return results


The next step (and I'm not sure if this is optional) is to compile (on the 
minions - script update doesn't seem to matter on the overlord).
Assuming you're in the modules directory:
python -O -mcompileall .


And then restart funcd on the minion.
This was not obvious to a neophyte like me.  Perhaps the documentation on the 
wiki can be updated to include this tidbit.

service funcd restart


Thanks to Léon Keijser for mentioning the restart to me on a separate email 
thread.


Call from the overlord:  func minion1 call rpms inventory.


From: [email protected] [mailto:[email protected]] On 
Behalf Of Jeff Liu
Sent: Thursday, May 28, 2009 4:18 PM
To: '[email protected]'
Subject: [Func-list] RE: func rpm: returns null

All,

I've noticed that rpms.py seems to have a section of the script commented out 
which might be the reason.
I installed via func-0.24-1.el5 rpm.

    def inventory(self, flatten=True):
        """
        Returns information on all installed packages.
        By default, 'flatten' is passed in as True, which makes printouts very
        clean in diffs for use by func-inventory.  If you are writting another
        software application, using flatten=False will prevent the need to
        parse the returns.
        """
        # I have not been able to get flatten=False to work if there
        # is more than 491 entries in the dict -- ashcrow
        ts = rpm.TransactionSet()
#        mi = ts.dbMatch()
#        results = []
#        for hdr in mi:
#            name = hdr['name']
#            epoch = (hdr['epoch'] or 0)
#            version = hdr['version']
#            release = hdr['release']
#            arch = hdr['arch']
#            if flatten:
#                results.append("%s %s %s %s %s" % (name, epoch, version,
#                                                   release, arch))
#            else:
#                results.append([name, epoch, version, release, arch])
        results = []
        return results


I tried uncommenting those lines, but it doesn't seem to take.
Unfortunately, I'm not a python expert, so I wasn't able to re-generate the 
compiled binaries for rpms.pyc and rpms.pyo.
I'm not sure what else I can do.

Any info is greatly appreciated.


Thanks,
Jeff


From: [email protected] [mailto:[email protected]] On 
Behalf Of Jeff Liu
Sent: Thursday, May 28, 2009 9:24 AM
To: '[email protected]'
Subject: [Func-list] func rpm: returns null

Just wondering if anyone can help.

I'm relatively new to func, and I'm attempting to gather rpm inventory.

I'm calling func's rpm module, but it's not returning any values.
The target minion is running CentOS 5.2.


func nj1qmlt01 call rpms inventory
{'nj1qmlt01': []}


I've checked /var/log/func/func.log on both the overlord and the minion, but 
there are no errors.
I'm not sure how to turn up the debugging level.

Any help would be greatly appreciated.

Thanks in advance,
Jeff

_______________________________________________
Func-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/func-list

Reply via email to