code: def parse_manifest(manifest):
      
      regex = re.compile('(.*)-(.*)')
      manifest = os.path.expanduser(manifest)
  
      if not os.path.exists(manifest):
          raise JuicerManifestError('File not found: %s' % manifest)
  
      rpm_list = []
      fd = open(manifest)
      data = yaml.load(fd)
  
      if data is None:
          raise JuicerManifestError('%s contains no items' % manifest)
  
      for pkg_name, version in data.iteritems():
          if version == 'absent' or version == 'purged':
              juicer.utils.Log.log_debug('%s is absent/purged. Skipping...' % pkg_name)
          elif version == 'latest':
              juicer.utils.Log.log_debug('%s is set to latest. Finding...' % pkg_name)
              lversion, release = juicer.utils.find_latest(pkg_name)
              if not lversion and not release:
                  # package wasn't found in repo so don't add it to the list
                  continue
              juicer.utils.Log.log_debug('Adding %s version %s release %s' % (pkg_name, lversion, release))
              rpm_list.append({'name': pkg_name, 'version': lversion, 'release': release})
          else:
              try:
                  _m = regex.match(version)
                  version = _m.group(1)
                  release = _m.group(2)
                  rpm_list.append({'name': pkg_name, 'version': _m.group(1), 'release': _m.group(2)})
                  juicer.utils.Log.log_debug('Adding %s version %s release %s' % (pkg_name, version, release))
              except:
                  raise JuicerManifestError('The manifest %s is improperly formatted' % manifest)
                  return False
  
      return rpm_list
docs: return a list of dicts containing an rpm name, version and release
      eg: [{'name': 'httpd', 'version': 1.3.39, 'release': 1}]