def profile(self, val=UNDEFINED): if val is None: return shutil.rmtree(self.path.profile, ignore_errors=True) if val is UNDEFINED: if not exists(self.path.profile.stamp): return None timestamp = int(os.stat(self.path.profile.stamp).st_mtime) profile_id = self._file_str(self.path.profile.profile_id) if profile_id is None: profile_id = detect_profile_id() return Profile(self.path.profile, profile_id, timestamp) else: profile_archive = val self.profile = None os.makedirs(self.path.profile) if val == self.EMPTY_PROFILE: self._file_str(self.path.profile.profile_id, val) file(self.path.profile.stamp, "w").close() elif isdir(str(val)): self.profile = None shutil.copytree(val, self.path.profile) self._file_str(self.path.profile.profile_id, self._custom_profile_id(val)) file(self.path.profile.stamp, "w").close() else: profile_archive.extract(self.path.profile) file(self.path.profile.stamp, "w").close() os.utime(self.path.profile.stamp, (0, profile_archive.timestamp)) self._file_str(self.path.profile.profile_id, profile_archive.profile_id)
def _update_profile(self, profile_id=None): """Get a new profile if we don't have a profile in the registry or the Hub has a newer profile for this appliance. If we can't contact the Hub raise an error if we don't already have profile.""" if not profile_id: if self.profile: profile_id = self.profile.profile_id else: profile_id = detect_profile_id() if profile_id == self.EMPTY_PROFILE or isdir(profile_id): self.profile = profile_id return hub_backups = hub.Backups(self.sub_apikey) if self.profile and self.profile.profile_id == profile_id: profile_timestamp = self.profile.timestamp else: # forced profile is not cached in the self profile_timestamp = None try: new_profile = hub_backups.get_new_profile(profile_id, profile_timestamp) if new_profile: self.profile = new_profile print "Downloaded %s profile" % self.profile.profile_id except hub.NotSubscribed: raise except hub_backups.Error, e: errno, errname, desc = e.args if errname == "BackupArchive.NotFound": raise self.ProfileNotFound(desc) if not self.profile or (self.profile.profile_id != profile_id): raise raise self.CachedProfile("using cached profile because of a Hub error: " + desc)
except hb.Error, e: # if the Hub is down we can hope that the cached address # is still valid and warn and try to backup anyway. # # But if we reach the Hub and it tells us the backup is invalid # we must invalidate the cached backup record and start over. if isinstance(e, hub.InvalidBackupError): warn("old backup record deleted, creating new ... ") registry.hbr = None else: warn("using cached backup record: " + str(e)) if not registry.hbr: registry.hbr = hb.new_backup_record(registry.key, detect_profile_id(), get_server_id()) conf.address = registry.hbr.address if opt_resume: conf = registry.backup_resume_conf else: # implicit resume if not opt_simulate and not opt_disable_resume and registry.backup_resume_conf == conf: print "Implicit --resume: Detected a rerun of an aborted backup session" print " You can disable this with the --disable-resume option" print time.sleep(5) opt_resume = True
""" Determine your system's default backup profile_id """ import sys import getopt from version import detect_profile_id def usage(e=None): if e: print >> sys.stderr, "error: " + str(e) print >> sys.stderr, "Syntax: %s [ path/to/root ]" % sys.argv[0] sys.exit(1) def main(): try: opts, args = getopt.gnu_getopt(sys.argv[1:], 'h', ['help']) except getopt.GetoptError, e: usage(e) for opt, val in opts: if opt in ('-h', '--help'): usage() root = args[0] if args else '/' print detect_profile_id(root) if __name__ == "__main__": main()
import sys import getopt from version import detect_profile_id def usage(e=None): if e: print >> sys.stderr, "error: " + str(e) print >> sys.stderr, "Syntax: %s [ path/to/root ]" % sys.argv[0] sys.exit(1) def main(): try: opts, args = getopt.gnu_getopt(sys.argv[1:], 'h', ['help']) except getopt.GetoptError, e: usage(e) for opt, val in opts: if opt in ('-h', '--help'): usage() root = args[0] if args else '/' print detect_profile_id(root) if __name__ == "__main__": main()