docs: def list(cls, datacenter=None, flavor=None, match='', exact_match=False):
          """ List available kernels for datacenter."""
          if not datacenter:
              dc_ids = [dc['id'] for dc in Datacenter.filtered_list()]
              kmap = {}
              for dc_id in dc_ids:
                  vals = cls.safe_call('hosting.disk.list_kernels', dc_id)
                  for key in vals:
                      kmap.setdefault(key, []).extend(vals.get(key, []))
              # remove duplicates
              for key in kmap:
                  kmap[key] = list(set(kmap[key]))
          else:
              dc_id = Datacenter.usable_id(datacenter)
              kmap = cls.safe_call('hosting.disk.list_kernels', dc_id)
  
          if match:
              for flav in kmap:
                  if exact_match:
                      kmap[flav] = [x for x in kmap[flav] if match == x]
                  else:
                      kmap[flav] = [x for x in kmap[flav] if match in x]
          if flavor:
              if flavor not in kmap:
                  cls.error('flavor %s not supported here' % flavor)
              return dict([(flavor, kmap[flavor])])
  
          return kmap