def test_encode_decode_are_inverse(self): tag = 'volume' volume = {'volume': True} # regular volume self.assertEquals(encode_tag(**decode_tag(tag)), tag) self.assertEquals(decode_tag(encode_tag(**volume)), volume) # backup volume tag = 'backup.1.backup1' volume = { 'timestamp': 1.0, 'backup_id': 'backup1' } self.assertEquals(encode_tag(**decode_tag(tag)), tag) self.assertEquals(decode_tag(encode_tag(**volume)), volume) # restore volume tag = 'restore.vol1.backup1' volume = { 'backup_source_volume_id': 'vol1', 'backup_id': 'backup1' } self.assertEquals(encode_tag(**decode_tag(tag)), tag) self.assertEquals(decode_tag(encode_tag(**volume)), volume) # zero volume tag = 'zero' volume = {'zero': True} self.assertEquals(encode_tag(**decode_tag(tag)), tag) self.assertEquals(decode_tag(encode_tag(**volume)), volume)
def clone(self, id=None, src=None, backup=None, size=None): """ This runs a clone job outside of the storage api, which is useful for performance testing backup restores (Example: storage tools clone volume-clone --backup volume-backup --src volume-original) """ # Set basic Logging logging.basicConfig() # Get the lunr logger log = logger.get_logger() # Output Debug level info log.logger.setLevel(logging.DEBUG) # Load the local storage configuration conf = LunrConfig.from_storage_conf() # Init the volume helper volume = VolumeHelper(conf) # Attempt to figure out the original volume size size = size or str(volume.get(src)['size'] / 1073741824) # Size is in gigs if not re.match('G', size): size = size + 'G' # Create a tag to apply to the lvm volume tag = encode_tag(source_volume_id=src, backup_id=backup) # Create the volume execute('lvcreate', volume.volume_group, name=id, size=size, addtag=tag) # Get info for the newly created volume new = volume.get(id) with self.timeit(): print("Starting Backup") # Restore volume from the backup volume.clone(new, src, backup)
def test_encode_tag(self): # normal volume self.assertEquals(encode_tag(), 'volume') # backup volume result = encode_tag(timestamp=1, backup_id='backup1') self.assertEquals(result, 'backup.1.backup1') # restore volume result = encode_tag(backup_source_volume_id='vol1', backup_id='backup1') self.assertEquals(result, 'restore.vol1.backup1') # scrub volume result = encode_tag(zero=True) self.assertEquals(result, 'zero') # image conversion result = encode_tag(image_id='someimageid') self.assertEquals(result, 'convert.someimageid')