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
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))
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")
def rabbitmq_tags(self): return build_tags(BEHAVIOUR, 'active')
def resource_tags(self): purpose = '%s-'%BEHAVIOUR + ('master' if self.is_replication_master else 'slave') return build_tags(purpose, 'active')
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})
def cf_tags(self): return handlers.build_tags(SERVICE_NAME, 'active')
def resource_tags(self): purpose = '%s-' % __mysql__['behavior'] + ('master' if int(__mysql__['replication_master']) == 1 else 'slave') return build_tags(purpose, 'active')
def redis_tags(self): purpose = '%s-' % BEHAVIOUR + ('master' if self.is_replication_master else 'slave') return build_tags(purpose, 'active')