Esempio n. 1
0
        def do_backup(op, backup_conf=None):
            try:
                purpose = '{0}-{1}'.format(
                        __mysql__.behavior, 
                        'master' if int(__mysql__.replication_master) == 1 else 'slave')
                backup = {
                    'type': 'mysqldump',
                    'cloudfs_dir': __node__.platform.scalrfs.backups('mysql'),
                    'description': 'MySQL backup (farm: {0} role: {1})'.format(
                            __node__.farm_id, __node__.role_name),
                    'tags': build_tags(purpose, 'active')
                }
                backup.update(backup_conf or {})

                if backup['type'] == 'snap_mysql':
                    backup['description'].replace('backup', 'data bundle')
                    backup['volume'] = __mysql__.volume

                bak = op.data['bak'] = backup_module.backup(**backup)
                try:
                    restore = bak.run()
                finally:
                    del op.data['bak']

                # For Scalr < 4.5.0
                if bak.type == 'mysqldump':
                    __node__.messaging.send('DbMsr_CreateBackupResult', {
                        'db_type': __mysql__.behavior,
                        'status': 'ok',
                        'backup_parts': restore.parts
                    })
                else:
                    data = {
                        'restore': dict(restore)
                    }
                    if backup["type"] == 'snap_mysql':
                        data.update({
                            'snapshot_config': dict(restore.snapshot),
                            'log_file': restore.log_file,
                            'log_pos': restore.log_pos,
                        })
                    __node__.messaging.send('DbMsr_CreateDataBundleResult', {
                        'db_type': __mysql__.behavior,
                        'status': 'ok',
                        __mysql__.behavior: data
                    })
 
                return dict(restore)
            except:
                # For Scalr < 4.5.0
                c, e, t = sys.exc_info()
                msg_name = 'DbMsr_CreateBackupResult' \
                            if backup['type'] == 'mysqldump' else \
                            'DbMsr_CreateDataBundleResult'
                __node__.messaging.send(msg_name, {
                    'db_type': __mysql__.behavior,
                    'status': 'error',
                    'last_error': str(e)
                })
                raise c, e, t
Esempio n. 2
0
 def _plug_new_style_volumes(self, volumes):
     for vol in volumes:
         vol = storage2.volume(**vol)
         vol.tags.update(build_tags())
         self._log_ensure_volume(vol)
         vol.ensure(mount=bool(vol.mpoint), mkfs=True)
         self._volumes.append(dict(vol))
Esempio n. 3
0
    def _plug_volume(self, qe_mpoint):
        try:
            assert len(qe_mpoint.volumes), 'Invalid mpoint info %s. Volumes list is empty' % qe_mpoint
            qe_volume = qe_mpoint.volumes[0]
            mpoint = qe_mpoint.dir or None
            assert qe_volume.volume_id, 'Invalid volume info %s. volume_id should be non-empty' % qe_volume
            
            vol = storage2.volume(
                type=self._vol_type, 
                id=qe_volume.volume_id, 
                name=qe_volume.device,
                mpoint=mpoint
            )
            LOG.info("Plugging volume with tags: %s" % str(vol.tags))
            if mpoint:
                logger = bus.init_op.logger if bus.init_op else LOG
                logger.info('Ensure %s: take %s, mount to %s', self._vol_type, vol.id, vol.mpoint)

                vol.ensure(mount=True, mkfs=True, fstab=True)

            vol._create_tags_async(qe_volume.volume_id, build_tags())  # [SCALARIZR-1012]

        except:
            LOG.exception("Can't attach volume")
Esempio n. 4
0
 def rabbitmq_tags(self):
     return build_tags(BEHAVIOUR, 'active')
Esempio n. 5
0
 def resource_tags(self):
     purpose = '%s-'%BEHAVIOUR + ('master' if self.is_replication_master else 'slave')
     return build_tags(purpose, 'active')
Esempio n. 6
0
        return dict(restore)

    @rpc.command_method
    def create_backup(self, backup=None, async=True):
        """
        Creates a new backup of every available database and uploads gzipped data to the cloud storage.
        """
        purpose = '{0}-{1}'.format(
                __mysql__.behavior,
                'master' if int(__mysql__.replication_master) == 1 else 'slave')
        backup_conf = {
            'type': 'mysqldump',
            'cloudfs_dir': __node__.platform.scalrfs.backups('mysql'),
            'description': 'MySQL backup (farm: {0} role: {1})'.format(
                    __node__.farm_id, __node__.role_name),
            'tags': build_tags(purpose, 'active')
        }

        backup_conf.update(backup or {})

        if backup_conf['type'] == 'snap_mysql':
            backup_conf['description'].replace('backup', 'data bundle')
            backup_conf['volume'] = dict(__mysql__['volume'])

        _create_backup_callback = functools.partial(create_backup_callback, backup_conf, backup)

        async_result = __node__['bollard'].apply_async('api.mysql.create-backup',
            args=(backup_conf,),
            soft_timeout=(1 * 24) * 3600,
            hard_timeout=(1 * 24 + 1) * 3600,
            callbacks={'task.pull': _create_backup_callback})
Esempio n. 7
0
 def cf_tags(self):
     return handlers.build_tags(SERVICE_NAME, 'active')
Esempio n. 8
0
 def resource_tags(self):
     purpose = '%s-' % __mysql__['behavior'] + ('master' if int(__mysql__['replication_master']) == 1 else 'slave')
     return build_tags(purpose, 'active')
Esempio n. 9
0
 def rabbitmq_tags(self):
     return build_tags(BEHAVIOUR, 'active')
Esempio n. 10
0
 def redis_tags(self):
     purpose = '%s-' % BEHAVIOUR + ('master' if self.is_replication_master
                                    else 'slave')
     return build_tags(purpose, 'active')
Esempio n. 11
0
 def cf_tags(self):
     return handlers.build_tags(SERVICE_NAME, 'active')