def post(self, request, format=None): with self._handle_exception(request): filename = request.data['file-name'] file_obj = request.data['file'] if (ConfigBackup.objects.filter(filename=filename).exists()): msg = ('Config backup(%s) already exists. Uploading a ' 'duplicate is not allowed.' % filename) handle_exception(Exception(msg), request) cbo = ConfigBackup.objects.create(filename=filename, config_backup=file_obj) if (not os.path.isdir(self.cb_dir)): os.mkdir(self.cb_dir) fp = os.path.join(self.cb_dir, filename) cbo.md5sum = self._md5sum(fp) cbo.size = os.stat(fp).st_size cbo.save() return Response(ConfigBackupSerializer(cbo).data)
def post(self, request): models = { 'storageadmin': [ 'user', 'group', 'sambashare', 'netatalkshare', 'nfsexport', 'nfsexportgroup', 'advancednfsexport', ], 'smart_manager': [ 'service', ], } model_list = [] for a in models: for m in models[a]: model_list.append('%s.%s' % (a, m)) logger.debug('model list = %s' % model_list) with self._handle_exception(request): filename = ('backup-%s.json' % datetime.now().strftime('%Y-%m-%d-%H%M%S')) if (not os.path.isdir(self.cb_dir)): os.mkdir(self.cb_dir) fp = os.path.join(self.cb_dir, filename) with open(fp, 'w') as dfo: call_command('dumpdata', *model_list, stdout=dfo) dfo.write('\n') call_command('dumpdata', database='smart_manager', *model_list, stdout=dfo) run_command(['/usr/bin/gzip', fp]) gz_name = ('%s.gz' % filename) fp = os.path.join(self.cb_dir, gz_name) md5sum = self._md5sum(fp) size = os.stat(fp).st_size cbo = ConfigBackup(filename=gz_name, md5sum=md5sum, size=size) cbo.save() return Response(ConfigBackupSerializer(cbo).data)
def post(self, request): logger.debug("backing up config...") with self._handle_exception(request): cbo = backup_config() return Response(ConfigBackupSerializer(cbo).data)