/vakap/components/postgres.py

https://github.com/ombu/vakap
Python | 34 lines | 29 code | 5 blank | 0 comment | 3 complexity | 9a870ec978586dfa962b866cea606131 MD5 | raw file
  1. from time import gmtime, strftime
  2. from fabric.decorators import task
  3. from fabric.api import settings, cd, hide, run, env
  4. from base import Component, s3_upload, s3_file_exists, s3_latest_file_in_bucket
  5. class PostgresComponent(Component):
  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_postgres(self.site_name, self.db_name, self.db_user)
  11. def status(self):
  12. date = s3_latest_file_in_bucket(env.s3_bucket, self.site_name)
  13. print("%s last backed up: %s" % (self.__class__.__name__, date))
  14. @task
  15. def backup_postgres(site_name, dbname, dbuser):
  16. date = strftime("%Y.%m.%d", gmtime())
  17. gpg_file = 'sql-%s.sql.gz.gpg' % date
  18. local_file = "%s/vakap-%s" % ('/tmp', gpg_file)
  19. s3_dest = "s3://%s/%s/%s" % (env.s3_bucket, site_name, gpg_file)
  20. if s3_file_exists(s3_dest):
  21. print " - File exists: %s. Skipping." % s3_dest
  22. return
  23. else:
  24. print " - Dumping and encrypting database: %s" % dbname
  25. run("""pg_dump --host=127.0.0.1 --clean --username={dbuser} {dbname} \
  26. | gzip | gpg --encrypt --recipient {key} > {local_file}"""
  27. .format(dbuser=dbuser, dbname=dbname, key=env.gpg_key,
  28. local_file=local_file))
  29. s3_upload(local_file, s3_dest)