/vakap/components/duplicity.py

https://github.com/ombu/vakap · Python · 42 lines · 34 code · 7 blank · 1 comment · 3 complexity · ef2a9a7f4e099e8a29f9716059cc1b64 MD5 · raw file

  1. from fabric.decorators import task
  2. from fabric.api import settings, cd, hide, run, env, local
  3. from base import Component
  4. class DuplicityComponent(Component):
  5. """ Backup a path with [Duplicity](http://duplicity.nongnu.org/) """
  6. def __init__(self, site_name, raw_data):
  7. super(type(self), self).__init__(site_name, raw_data)
  8. def backup(self):
  9. with settings(host_string=self.host_string):
  10. backup_files(self.site_name, self.site_path)
  11. def status(self):
  12. with settings(host_string=self.host_string):
  13. s3_dest = _get_dest(env.s3_bucket, self.site_name)
  14. run("AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s duplicity \
  15. collection-status %s" % (env.s3_access_key, env.s3_secret, s3_dest))
  16. def clean(self):
  17. with settings(host_string=self.host_string):
  18. s3_dest = _get_dest(env.s3_bucket, self.site_name)
  19. local("AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s duplicity --force \
  20. remove-all-but-n-full 1 %s" % (env.s3_access_key, env.s3_secret, s3_dest))
  21. local("AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s duplicity \
  22. cleanup --force %s" % (env.s3_access_key, env.s3_secret, s3_dest))
  23. @task
  24. def backup_files(site_name, path):
  25. from time import gmtime, strftime
  26. s3_dest = _get_dest(env.s3_bucket, site_name)
  27. print " - Running Duplicity on directory: %s" % path
  28. run("AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s duplicity \
  29. -v2 --volsize=256 --asynchronous-upload \
  30. --exclude %s/logs \
  31. --archive-dir /tmp/duplicity-cache \
  32. --encrypt-key %s --full-if-older-than 30D %s %s" %
  33. (env.s3_access_key, env.s3_secret, path, env.gpg_key, path, s3_dest))
  34. def _get_dest(bucket, name):
  35. return "s3+http://%s/%s/%s" % (env.s3_bucket, name, 'duplicity')