예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
 def post(self, request):
     logger.debug("backing up config...")
     with self._handle_exception(request):
         cbo = backup_config()
         return Response(ConfigBackupSerializer(cbo).data)