Exemple #1
0
def _ReadInstanceStatus(filename):
    """Reads an instance status file.

  @type filename: string
  @param filename: Path to status file
  @rtype: tuple; (None or number, list of lists containing instance name and
    status)
  @return: File's mtime and instance status contained in the file; mtime is
    C{None} if file can't be read

  """
    logging.debug("Reading per-group instance status from '%s'", filename)

    statcb = utils.FileStatHelper()
    try:
        content = utils.ReadFile(filename, preread=statcb)
    except EnvironmentError as err:
        if err.errno == errno.ENOENT:
            logging.error("Can't read '%s', does not exist (yet)", filename)
        else:
            logging.exception("Unable to read '%s', ignoring", filename)
        return (None, None)
    else:
        return (statcb.st.st_mtime,
                [line.split(None, 1) for line in content.splitlines()])
Exemple #2
0
def _PrepareFileUpload(getents_fn, node, filename):
  """Loads a file and prepares it for an upload to nodes.

  """
  statcb = utils.FileStatHelper()
  data = _Compress(node, utils.ReadFile(filename, preread=statcb))
  st = statcb.st

  if getents_fn is None:
    getents_fn = runtime.GetEnts

  getents = getents_fn()

  virt_filename = vcluster.MakeVirtualPath(filename)

  return [virt_filename, data, st.st_mode, getents.LookupUid(st.st_uid),
          getents.LookupGid(st.st_gid), st.st_atime, st.st_mtime]
Exemple #3
0
def ReadSsconfFile(filename):
    """Reads an ssconf file and verifies its size.

  @type filename: string
  @param filename: Path to file
  @rtype: string
  @return: File contents without newlines at the end
  @raise RuntimeError: When the file size exceeds L{_MAX_SIZE}

  """
    statcb = utils.FileStatHelper()

    data = utils.ReadFile(filename, size=_MAX_SIZE, preread=statcb)

    if statcb.st.st_size > _MAX_SIZE:
        msg = ("File '%s' has a size of %s bytes (up to %s allowed)" %
               (filename, statcb.st.st_size, _MAX_SIZE))
        raise RuntimeError(msg)

    return data.rstrip("\n")