Title Attempt to search for all upgrades
Author dcrouch
Link http://thunked.org/p/view/pri/
Created 2012-04-04 15:16:36
Expires never
Filename yumpkg.py
Language @Formula/@Command
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
'''
Support for YUM

Required python modules: yum, rpm, rpmUtils
'''
try:
    import yum
    import rpm
    from rpmUtils.arch import getBaseArch
    has_yumdeps = True
except ImportError:
    has_yumdeps = False

import logging

log = logging.getLogger(__name__)

def __virtual__():
    '''
    Confine this module to yum based systems
    '''
    if not has_yumdeps:
        return False

    # Return this for pkg on RHEL/Fedora based distros that ship with python
    # 2.6 or greater.
    dists = ('CentOS', 'Scientific', 'RedHat')
    if __grains__['os'] == 'Fedora':
        if int(__grains__['osrelease'].split('.')[0]) >= 11:
            return 'pkg'
        else:
            return False
    else:
        if __grains__['os'] in dists:
            if int(__grains__['osrelease'].split('.')[0]) >= 6:
                return 'pkg'
        else:
            return False

def _list_REMoved(old, new):
    '''
    List the packages which have been removed between the two package objects
    '''
    pkgs = []
    for pkg in old:
        if pkg not in new:
            pkgs.append(pkg)
    return pkgs
def _compare_versions(old, new):
    '''
    Returns a dict that that displays old and new versions for a package after
    install/upgrade of package.
    '''
    pkgs = {}
    for npkg in new:
        if npkg in old:
            if old[npkg] == new[npkg]:
                # no change in the package
                continue
            else:
                # the package was here before and the version has changed
                pkgs[npkg] = {'old': old[npkg],
                              'new': new[npkg]}
        else:
            # the package is freshly installed
            pkgs[npkg] = {'old': '',
                          'new': new[npkg]}
    return pkgs
def check_upgrades(*args):
    pkgs=list_upgrades()
    str=' '.join(pkgs)
   
    yb=yum.YumBase()
    versions_list=[]
    for pkgtype in ['updates']:
        pl=yb.doPackageLists(pkgtype)
        for pkg in pkgs:
            exactmatch, matched, unmatched  = yum.packages.parsePackages(pl, [pkg])
            #print 'exactmatch: %s' % exactmatch
            for pkg in exactmatch:
                if pkg.arch == getBaseArch():
                    versions_list.append(pkg)
    print versions_list    
    return versions_list    
def available_version(name):
    '''
    The available version of the package in the repository
    CLI Example::
        salt '*' pkg.available_version <package name>
    '''
    yb = yum.YumBase()
    # look for available packages only, if package is already installed with
    # latest version it will not show up here.  If we want to use wildcards
    # here we can, but for now its exact match only.
    versions_list = []
    for pkgtype in ['available', 'updates']:
        pl = yb.doPackageLists(pkgtype)
        exactmatch, matched, unmatched = yum.packages.parsePackages(pl, [name])
        # build a list of available packages from either available or updates
        # this will result in a double match for a package that is already
        # installed.  Maybe we should just return the value if we get a hit
        # on available, and only iterate though updates if we don't..
        for pkg in exactmatch:
            if pkg.arch == getBaseArch():
                versions_list.append('-'.join([pkg.version, pkg.release]))
    if len(versions_list) == 0:
        # if versions_list is empty return empty string.  It may make sense
        # to also check if a package is installed and on latest version
        # already and return a message saying 'up to date' or something along
        # those lines.
        return ''
    # remove the duplicate items from the list and return the first one
    return list(set(versions_list))[0]
def upgrade_available(name):
    '''
    Check whether or not an upgrade is available for a given package
    CLI Example::
        salt '*' pkg.upgrade_available <package name>
    '''
    return available_version(name)
def version(name):
    '''
    Returns a version if the package is installed, else returns an empty string
    CLI Example::
        salt '*' pkg.version <package name>
    '''
    pkgs = list_pkgs(name)
    if name in pkgs:
        return pkgs[name]
    else:
        return ''
def list_pkgs(*args):
    '''
    List the packages currently installed in a dict::
        {'<package_name>': '<version>'}
    CLI Example::
        salt '*' pkg.list_pkgs
    '''
    ts = rpm.TransactionSet()
    pkgs = {}
    # if no args are passed in get all packages
    if len(args) == 0:
        for h in ts.dbMatch():
            pkgs[h['name']] = '-'.join([h['version'],h['release']])
    else:
        # get package version for each package in *args
        for arg in args:
            for h in ts.dbMatch('name', arg):
                pkgs[h['name']] = '-'.join([h['version'],h['release']])
    return pkgs
def list_upgrades(*args):
    ts = rpm.TransactionSet()
    pkgs = {}
    test=[]
    # if no args are passed in get all packages
    if len(args) == 0:
        for h in ts.dbMatch():
            test.append(h['name'])
    else:
        # get package version for each package in *args
        for arg in args:
            for h in ts.dbMatch('name', arg):
                test.append(h['name'])
    return test
def refresh_db():
    '''
    Since yum refreshes the database automatically, this runs a yum clean,
    so that the next yum operation will have a clean database
    CLI Example::
        salt '*' pkg.refresh_db
    '''
    yb = yum.YumBase()
    yb.cleanMetadata()
    return True
def clean_metadata():
    '''
    Cleans local yum metadata.
    CLI Example::
        salt '*' pkg.clean_metadata
    '''
    return refresh_db()
def install(pkgs, refresh=False, repo='', skip_verify=False, **kwargs):
    '''
    Install the passed package(s)
    pkg
        The name of the package to be installed
    refresh : False
        Clean out the yum database before executing
    repo : (default)
        Specify a package repository to install from
        (e.g., ``yum --enablerepo=somerepo``)
    skip_verify : False
        Skip the GPG verification check (e.g., ``--nogpgcheck``)
    Return a dict containing the new package names and versions::
        {'<package>': {'old': '<old-version>',
                   'new': '<new-version>']}
    CLI Example::
        salt '*' pkg.install 'package package package'
    '''
    if refresh:
        refresh_db()
    if ',' in pkgs:
        pkgs = pkgs.split(',')
    else:
        pkgs = pkgs.split(' ')
    old = list_pkgs(*pkgs)
    yb = yum.YumBase()
    setattr(yb.conf, 'assumeyes', True)
    setattr(yb.conf, 'gpgcheck', not skip_verify)
    if repo:
        yb.repos.enableRepo(repo)
    for pkg in pkgs:
        try:
            yb.install(name=pkg)
        except yum.Errors.InstallError:
            log.error('Package {0} failed to install'.format(pkg))
    # Resolve Deps before attempting install.  This needs to be improved
    # by also tracking any deps that may get upgraded/installed during this
    # process.  For now only the version of the package(s) you request be
    # installed is tracked.
    yb.resolveDeps()
    yb.processTransaction(rpmDisplay=yum.rpmtrans.NoOutputCallBack())
    yb.closeRpmDB()
    new = list_pkgs(*pkgs)
    return _compare_versions(old, new)
def upgrade():
    '''
    Run a full system upgrade, a yum upgrade
    Return a dict containing the new package names and versions::
        {'<package>': {'old': '<old-version>',
                   'new': '<new-version>']}
    CLI Example::
        salt '*' pkg.upgrade
    '''
    yb = yum.YumBase()
    setattr(yb.conf, 'assumeyes', True)
    old = list_pkgs()
    # ideally we would look in the yum transaction and get info on all the
    # packages that are going to be upgraded and only look up old/new version
    # info on those packages.
    yb.update()
    yb.resolveDeps()
    yb.processTransaction(rpmDisplay=yum.rpmtrans.NoOutputCallBack())
    yb.closeRpmDB()
    new = list_pkgs()
    return _compare_versions(old, new)
def remove(pkgs):
    '''
    Removes packages with yum remove
    Return a list containing the removed packages:
    CLI Example::
        salt '*' pkg.remove <package,package,package>
    '''
    yb = yum.YumBase()
    setattr(yb.conf, 'assumeyes', True)
    pkgs = pkgs.split(',')
    old = list_pkgs(*pkgs)
    # same comments as in upgrade for remove.
    for pkg in pkgs:
        yb.remove(name=pkg)
    yb.resolveDeps()
    yb.processTransaction(rpmDisplay=yum.rpmtrans.NoOutputCallBack())
    yb.closeRpmDB()
    new = list_pkgs(*pkgs)
    return _list_removed(old, new)
def purge(pkgs):
    '''
    Yum does not have a purge, this function calls remove
    Return a list containing the removed packages:
    CLI Example::
        salt '*' pkg.purge <package name>
    '''
    return remove(pkgs)
Filename output
Language @Formula/@Command
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
[root@salt-master ~]# salt 'salt-master' pkg.check_upgrades
09:15:47,041 [salt.minion    ][INFO    ] User root Executing command pkg.check_upgrades with jid 20120404091547030027
09:15:47,042 [salt.minion    ][DEBUG   ] Command details {'tgt_type': 'glob', 'jid': '20120404091547030027', 'tgt': 'salt-master', 'ret': '', 'user': 'root', 'arg': [], 'fun': 'pkg.check_upgrades'}
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.us.leaseweb.net
 * epel: ftp.osuosl.org
 * extras: mirrors.lga7.us.voxel.net
 * updates: mirrors.lga7.us.voxel.net
[<YumAvailablePackageSqlite : openssl-1.0.0-20.el6_2.3.x86_64 (0x388f450)>, <YumAvailablePackageSqlite : chkconfig-1.3.49.3-1.el6_2.x86_64 (0x38cbbd0)>, <YumAvailablePackageSqlite : libcurl-7.19.7-26.el6_2.4.x86_64 (0x387e090)>, <YumAvailablePackageSqlite : curl-7.19.7-26.el6_2.4.x86_64 (0x38b9150)>, <YumAvailablePackageSqlite : rpm-4.8.0-19.el6_2.1.x86_64 (0x38cbad0)>, <YumAvailablePackageSqlite : rpm-build-4.8.0-19.el6_2.1.x86_64 (0x38cba10)>, <YumAvailablePackageSqlite : libssh2-1.2.2-7.el6_2.3.x86_64 (0x38cb890)>, <YumAvailablePackageSqlite : rpm-libs-4.8.0-19.el6_2.1.x86_64 (0x38cb9d0)>, <YumAvailablePackageSqlite : rpm-python-4.8.0-19.el6_2.1.x86_64 (0x386d290)>]
09:15:51,686 [salt.minion    ][INFO    ] Returning information for job: 20120404091547030027
Process Process-4:
Traceback (most recent call last):
  File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
    self.run()
  File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python2.6/site-packages/salt/minion.py", line 201, in <lambda>
    target=lambda: self._thread_return(data)
  File "/usr/lib/python2.6/site-packages/salt/minion.py", line 264, in _thread_return
    self._return_pub(ret)
  File "/usr/lib/python2.6/site-packages/salt/minion.py", line 358, in _return_pub
    payload['load'] = self.crypticle.dumps(load)
  File "/usr/lib/python2.6/site-packages/salt/crypt.py", line 295, in dumps
    return self.encrypt(self.PICKLE_PAD + self.serial.dumps(obj))
  File "/usr/lib/python2.6/site-packages/salt/payload.py", line 79, in dumps
    return msgpack.dumps(msg)
  File "_msgpack.pyx", line 146, in msgpack._msgpack.packb (msgpack/_msgpack.c:2049)
  File "_msgpack.pyx", line 130, in msgpack._msgpack.Packer.pack (msgpack/_msgpack.c:1736)
  File "_msgpack.pyx", line 113, in msgpack._msgpack.Packer._pack (msgpack/_msgpack.c:1485)
  File "_msgpack.pyx", line 119, in msgpack._msgpack.Packer._pack (msgpack/_msgpack.c:1581)
  File "_msgpack.pyx", line 116, in msgpack._msgpack.Packer._pack (msgpack/_msgpack.c:1527)
TypeError: object of type 'YumAvailablePackageSqlite' has no len()
09:15:53,010 [salt.minion    ][INFO    ] User root Executing command saltutil.find_job with jid 20120404091553000991
09:15:53,010 [salt.minion    ][DEBUG   ] Command details {'tgt_type': 'glob', 'jid': '20120404091553000991', 'tgt': 'salt-master', 'ret': '', 'user': 'root', 'arg': ['20120404091547030027'], 'fun': 'saltutil.find_job'}
09:15:53,015 [cmdmod_module  ][INFO    ] Executing command ps -efH in directory /root
09:15:53,030 [cmdmod_module  ][DEBUG   ] output: UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 09:11 ?        00:00:00 [kthreadd]
root         3     2  0 09:11 ?        00:00:00   [migration/0]
root         4     2  0 09:11 ?        00:00:00   [ksoftirqd/0]
root         5     2  0 09:11 ?        00:00:00   [migration/0]
root         6     2  0 09:11 ?        00:00:00   [watchdog/0]
root         7     2  0 09:11 ?        00:00:00   [migration/1]
root         8     2  0 09:11 ?        00:00:00   [migration/1]
root         9     2  0 09:11 ?        00:00:00   [ksoftirqd/1]
root        10     2  0 09:11 ?        00:00:00   [watchdog/1]
root        11     2  0 09:11 ?        00:00:00   [migration/2]
root        12     2  0 09:11 ?        00:00:00   [migration/2]
root        13     2  0 09:11 ?        00:00:00   [ksoftirqd/2]
root        14     2  0 09:11 ?        00:00:00   [watchdog/2]
root        15     2  0 09:11 ?        00:00:00   [migration/3]
root        16     2  0 09:11 ?        00:00:00   [migration/3]
root        17     2  0 09:11 ?        00:00:00   [ksoftirqd/3]
root        18     2  0 09:11 ?        00:00:00   [watchdog/3]
root        19     2  0 09:11 ?        00:00:00   [events/0]
root        20     2  0 09:11 ?        00:00:00   [events/1]
root        21     2  0 09:11 ?        00:00:00   [events/2]
root        22     2  0 09:11 ?        00:00:00   [events/3]
root        23     2  0 09:11 ?        00:00:00   [cpuset]
root        24     2  0 09:11 ?        00:00:00   [khelper]
root        25     2  0 09:11 ?        00:00:00   [netns]
root        26     2  0 09:11 ?        00:00:00   [async/mgr]
root        27     2  0 09:11 ?        00:00:00   [pm]
root        28     2  0 09:11 ?        00:00:00   [sync_supers]
root        29     2  0 09:11 ?        00:00:00   [bdi-default]
root        30     2  0 09:11 ?        00:00:00   [kintegrityd/0]
root        31     2  0 09:11 ?        00:00:00   [kintegrityd/1]
root        32     2  0 09:11 ?        00:00:00   [kintegrityd/2]
root        33     2  0 09:11 ?        00:00:00   [kintegrityd/3]
root        34     2  0 09:11 ?        00:00:00   [kblockd/0]
root        35     2  0 09:11 ?        00:00:00   [kblockd/1]
root        36     2  0 09:11 ?        00:00:00   [kblockd/2]
root        37     2  0 09:11 ?        00:00:00   [kblockd/3]
root        38     2  0 09:11 ?        00:00:00   [kacpid]
root        39     2  0 09:11 ?        00:00:00   [kacpi_notify]
root        40     2  0 09:11 ?        00:00:00   [kacpi_hotplug]
root        41     2  0 09:11 ?        00:00:00   [ata/0]
root        42     2  0 09:11 ?        00:00:00   [ata/1]
root        43     2  0 09:11 ?        00:00:00   [ata/2]
root        44     2  0 09:11 ?        00:00:00   [ata/3]
root        45     2  0 09:11 ?        00:00:00   [ata_aux]
root        46     2  0 09:11 ?        00:00:00   [ksuspend_usbd]
root        47     2  0 09:11 ?        00:00:00   [khubd]
root        48     2  0 09:11 ?        00:00:00   [kseriod]
root        49     2  0 09:11 ?        00:00:00   [md/0]
root        50     2  0 09:11 ?        00:00:00   [md/1]
root        51     2  0 09:11 ?        00:00:00   [md/2]
root        52     2  0 09:11 ?        00:00:00   [md/3]
root        53     2  0 09:11 ?        00:00:00   [md_misc/0]
root        54     2  0 09:11 ?        00:00:00   [md_misc/1]
root        55     2  0 09:11 ?        00:00:00   [md_misc/2]
root        56     2  0 09:11 ?        00:00:00   [md_misc/3]
root        57     2  0 09:11 ?        00:00:00   [khungtaskd]
root        58     2  0 09:11 ?        00:00:00   [kswapd0]
root        59     2  0 09:11 ?        00:00:00   [ksmd]
root        60     2  0 09:11 ?        00:00:00   [aio/0]
root        61     2  0 09:11 ?        00:00:00   [aio/1]
root        62     2  0 09:11 ?        00:00:00   [aio/2]
root        63     2  0 09:11 ?        00:00:00   [aio/3]
root        64     2  0 09:11 ?        00:00:00   [crypto/0]
root        65     2  0 09:11 ?        00:00:00   [crypto/1]
root        66     2  0 09:11 ?        00:00:00   [crypto/2]
root        67     2  0 09:11 ?        00:00:00   [crypto/3]
root        72     2  0 09:11 ?        00:00:00   [kthrotld/0]
root        73     2  0 09:11 ?        00:00:00   [kthrotld/1]
root        74     2  0 09:11 ?        00:00:00   [kthrotld/2]
root        75     2  0 09:11 ?        00:00:00   [kthrotld/3]
root        77     2  0 09:11 ?        00:00:00   [kpsmoused]
root        78     2  0 09:11 ?        00:00:00   [usbhid_resumer]
root       108     2  0 09:11 ?        00:00:00   [kstriped]
root       209     2  0 09:11 ?        00:00:00   [scsi_eh_0]
root       210     2  0 09:11 ?        00:00:00   [scsi_eh_1]
root       229     2  0 09:11 ?        00:00:00   [scsi_eh_2]
root       271     2  0 09:11 ?        00:00:00   [kdmflush]
root       273     2  0 09:11 ?        00:00:00   [kdmflush]
root       292     2  0 09:11 ?        00:00:00   [jbd2/dm-0-8]
root       293     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       294     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       295     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       296     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       502     2  0 09:11 ?        00:00:00   [flush-8:0]
root       503     2  0 09:11 ?        00:00:00   [flush-253:0]
root       647     2  0 09:11 ?        00:00:00   [jbd2/sda1-8]
root       648     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       649     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       650     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       651     2  0 09:11 ?        00:00:00   [ext4-dio-unwrit]
root       706     2  0 09:11 ?        00:00:00   [kauditd]
root         1     0  0 09:11 ?        00:00:00 /sbin/init
root       363     1  0 09:11 ?        00:00:00   /sbin/udevd -d
root      1410   363  0 09:11 ?        00:00:00     /sbin/udevd -d
root      1411   363  0 09:11 ?        00:00:00     /sbin/udevd -d
root       971     1  0 09:11 ?        00:00:00   /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth1.leases -pf /var/run/dhclient-eth1.pid eth1
root      1105     1  0 09:11 ?        00:00:00   /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth2.leases -pf /var/run/dhclient-eth2.pid eth2
root      1149     1  0 09:11 ?        00:00:00   auditd
root      1165     1  0 09:11 ?        00:00:00   /sbin/rsyslogd -i /var/run/syslogd.pid -c 4
dbus      1177     1  0 09:11 ?        00:00:00   dbus-daemon --system
root      1208     1  0 09:11 ?        00:00:00   /usr/sbin/sshd
root      1420  1208  0 09:13 ?        00:00:00     sshd: root@pts/0
root      1423  1420  0 09:13 pts/0    00:00:00       -bash
root      1436  1208  0 09:13 ?        00:00:00     sshd: root@pts/1
root      1438  1436  0 09:13 pts/1    00:00:00       -bash
root      1463  1438  1 09:14 pts/1    00:00:00         /usr/bin/python /usr/bin/salt-minion -l debug
root      1541  1463  0 09:15 pts/1    00:00:00           /usr/bin/python /usr/bin/salt-minion -l debug
root      1542  1541  0 09:15 pts/1    00:00:00             ps -efH
root      1505  1438  4 09:15 pts/1    00:00:00         /usr/bin/python /usr/bin/salt salt-master pkg.check_upgrades
root      1284     1  0 09:11 ?        00:00:00   /usr/libexec/postfix/master
postfix   1290  1284  0 09:11 ?        00:00:00     pickup -l -t fifo -u
postfix   1291  1284  0 09:11 ?        00:00:00     qmgr -l -t fifo -u
qpidd     1297     1  0 09:11 ?        00:00:00   /usr/sbin/qpidd --data-dir /var/lib/qpidd --daemon
root      1328     1  0 09:11 ?        00:00:00   crond
root      1342     1  0 09:11 ?        00:00:00   /usr/bin/python /usr/bin/salt-master -d
root      1343  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1356  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1359  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1360  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1364  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1368  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1370  1342  0 09:11 ?        00:00:00     /usr/bin/python /usr/bin/salt-master -d
root      1398     1  0 09:11 tty1     00:00:00   /sbin/mingetty /dev/tty1
root      1400     1  0 09:11 tty2     00:00:00   /sbin/mingetty /dev/tty2
root      1402     1  0 09:11 tty3     00:00:00   /sbin/mingetty /dev/tty3
root      1404     1  0 09:11 tty4     00:00:00   /sbin/mingetty /dev/tty4
root      1406     1  0 09:11 tty5     00:00:00   /sbin/mingetty /dev/tty5
root      1408     1  0 09:11 tty6     00:00:00   /sbin/mingetty /dev/tty6
09:15:53,036 [salt.minion    ][INFO    ] Returning information for job: 20120404091553000991