コード例 #1
0
    def pull(self, snap_id, dest, fmt=SnapshotPackage.Format.TAR):
        """Pulls a snapshot with the given id to the given destination dir as id.tar.gz."""
        fn = snap_id + ".tar"
        if fmt == SnapshotPackage.Format.TARGZ:
            fn += ".gz"
        fname = os.path.join(dest, fn)
        self.logger.debug("Pulling %s -> %s", snap_id, fname)
        snap = self.info(snap_id)
        total_size = sum(
            [img.size for img in snap.details.images if img.present])

        try:
            it = self.stub.pullSnapshot(
                SnapshotPackage(snapshot_id=snap_id, format=fmt))
            with open(fname, "wb") as fn:
                with tqdm(fn, total=total_size, unit="B",
                          unit_scale=True) as t:
                    for msg in it:
                        if not msg.success:
                            self.logger.error("Failed to pull snapshot: %s",
                                              msg.err)
                            return False
                        fn.write(msg.payload)
                        t.update(len(msg.payload))
        except grpc._channel._Rendezvous as err:
            self.logger.error("Low level grpc error: %s ", err)
        self.logger.debug("Response %s", msg)
        return msg and msg.success, fname
コード例 #2
0
        def push_snap_iterator(fname):
            """An iterator that returns:

            1. A message containing only the id.
            2. A stream of byte objects from the tar (.gz) file.
            """
            fmt = SnapshotPackage.Format.TAR
            if fname.endswith(".tar.gz"):
                fmt = SnapshotPackage.Format.TARGZ

            total_size = os.path.getsize(fname)
            snap_id = os.path.basename(fname).replace(".gz",
                                                      "").replace(".tar", "")

            with tqdm(total=total_size, unit="B", unit_scale=True) as t:
                yield SnapshotPackage(snapshot_id=snap_id, format=fmt)
                with open(fname, "rb") as snap:
                    for chunk in read_in_chunks(snap):
                        t.update(len(chunk))
                        yield SnapshotPackage(payload=chunk)
コード例 #3
0
 def save(self, snap_id):
     """Saves a snapshot inside the emulator."""
     return self._exec_unary_grpc("saveSnapshot",
                                  SnapshotPackage(snapshot_id=snap_id))
コード例 #4
0
 def delete(self, snap_id):
     """Deletes the given snapshot from the emulator."""
     return self._exec_unary_grpc("deleteSnapshot",
                                  SnapshotPackage(snapshot_id=snap_id))
コード例 #5
0
 def load(self, snap_id):
     """Loads a snapshot inside the emulator."""
     return self._exec_unary_grpc("loadSnapshot",
                                  SnapshotPackage(snapshot_id=snap_id))