def __init__(self, options): manager = Manager(options.path) for id in options.id: if are_you_sure(options.force, id): manager.remove(id) if not options.quiet: print('Removed clone ' + id)
def test_migrate_existing_zfs(self): path = Path(directory) self.assertIsNotNone( zfs_create(zfs, mountpoint=directory, recursive=True)) temp_dir = path.joinpath('my', 'cool', 'subdirectory') temp_dir.mkdir(parents=True) temp_file = temp_dir.joinpath('file.txt') with temp_file.open('w', encoding='utf-8') as f: f.write('SOME TEXT') with self.assertRaises(ZCMError): Manager.initialize_manager(zfs, directory) with self.assertRaises(ZCMError): Manager.initialize_manager(zfs, directory, migrate='PATH') try: Manager.initialize_manager(zfs, directory, migrate='ZFS') except ZCMException as e: self.fail('Initialization should not raise exceptions') manager = None try: manager = Manager(zfs) except ZCMException as e: self.fail('Instantiation should not raise exceptions') self.assertTrue(temp_file.is_file()) with temp_file.open('r', encoding='utf-8') as f: self.assertEqual(f.read(), 'SOME TEXT') try: manager.destroy() except ZCMException as e: self.fail('Destroy should not raise exceptions')
def __init__(self, options): table = [] managers = [] if options.path: managers = [Manager(path) for path in options.path] else: managers = Manager.get_managers() if options.json: clones = [] for manager in managers: for clone in manager.clones: clones.append(clone.to_dictionary()) print(json.dumps(clones, indent=4)) else: for manager in managers: for clone in manager.clones: table.append({ 'manager': manager.zfs, 'a': '*' if manager.active_clone == clone else ' ', 'id': clone.id, 'clone': clone.zfs, 'mountpoint': str(clone.mountpoint), 'origin': clone.origin_id if clone.origin_id else '', 'date': clone.creation, 'size': format_bytes(clone.size) }) print_table(table, header=(not options.no_header), truncate=( not options.no_trunc), page_size=options.page_size)
def __init__(self, options): manager = Manager(options.path) id = manager.active_clone.id if options.id == 'active' else options.id clone = manager.get_clone(id) table = zfs_diff(clone.zfs, clone.origin, include_file_types=True) print_table(table, header=(not options.no_header), truncate=(not options.no_trunc), page_size=options.page_size)
def __init__(self, options): manager = Manager(options.path) clone = manager.clone(options.max_newer, options.max_total, options.auto_remove) if not options.quiet: if options.json: print(json.dumps(clone.to_dictionary(), indent=4)) else: print('Created clone %s at path %s' % (clone.id, clone.mountpoint))
def __init__(self, options): migrate = None if options.migrate_zfs: migrate = 'ZFS' if options.migrate_path: migrate = 'PATH' Manager.initialize_manager(options.zfs, options.path, migrate) if not options.quiet: print('ZCM initialized ZFS %s at path %s' % (options.zfs, options.path))
def test_create_1(self): clone = None try: manager = Manager(directory) except ZCMError as e: self.fail('Instantiation should not raise exceptions') try: manager.clone() except ZCMError as e: self.fail('Creation should not raise exceptions') self.assertEqual(manager.path, Path(directory)) self.assertEqual(manager.zfs, zfs) self.assertEqual(manager.active_clone, manager.clones[0]) self.assertEqual(manager.next_id, '00000002') self.assertEqual(len(manager.older_clones), 0) self.assertEqual(len(manager.newer_clones), 1) filesystem = zfs path = Path(directory, '.clones') self.assertTrue(zfs_is_filesystem(filesystem)) self.assertEqual(zfs_get(filesystem, 'mountpoint'), path) self.assertTrue(zfs_get(filesystem, 'mounted')) self.assertTrue(path.is_dir()) id = '00000000' filesystem = '%s/%s' % (zfs, id) path = Path(directory) self.assertEqual(manager.clones[0].id, id) self.assertEqual(manager.clones[0].zfs, filesystem) self.assertIsNone(manager.clones[0].origin) self.assertIsNone(manager.clones[0].origin_id) self.assertEqual(manager.clones[0].mountpoint, path) self.assertIsInstance(manager.clones[0].creation, datetime) self.assertTrue(zfs_is_filesystem(filesystem)) self.assertEqual(zfs_get(filesystem, 'mountpoint'), path) self.assertTrue(zfs_get(filesystem, 'mounted')) self.assertTrue(path.is_dir()) id = '00000001' filesystem = '%s/%s' % (zfs, id) path = Path(directory, '.clones', id) self.assertEqual(manager.clones[1].id, id) self.assertEqual(manager.clones[1].zfs, filesystem) self.assertEqual(manager.clones[1].origin, '%s/%s@%s' % (zfs, '00000000', id)) self.assertEqual(manager.clones[1].origin_id, '00000000') self.assertEqual(manager.clones[1].mountpoint, path) self.assertIsInstance(manager.clones[1].creation, datetime) self.assertTrue(zfs_is_filesystem(filesystem)) self.assertEqual(zfs_get(filesystem, 'mountpoint'), path) self.assertTrue(zfs_get(filesystem, 'mounted')) self.assertTrue(path.is_dir())
def __init__(self, options): managers = [Manager(path) for path in options.path] for manager in managers: if are_you_sure(options.force, manager): manager.destroy() if not options.quiet: print('Destroyed ZCM %s' % manager.zfs)
def test_initialize_existing_zfs(self): path = Path(directory) self.assertIsNotNone( zfs_create(zfs, mountpoint=directory, recursive=True)) temp_dir = path.joinpath('my', 'cool', 'subdirectory') temp_dir.mkdir(parents=True) temp_file = temp_dir.joinpath('file.txt') with temp_file.open('w', encoding='utf-8') as f: f.write('SOME TEXT') with self.assertRaises(ZCMError): Manager.initialize_manager(zfs, directory) try: zfs_destroy(zfs) except ZFSError: self.fail('zfs_destroy should not raise exceptions') self.assertFalse(temp_file.exists()) path.rmdir()
def test_activate_options(self): clone = None try: manager = Manager(directory) except ZCMError as e: self.fail('Instantiation should not raise exceptions') try: manager.clone() manager.clone() manager.clone() manager.clone() except ZCMError as e: self.fail('Creation should not raise exceptions') with self.assertRaises(ZCMException): manager.activate('00000002', max_newer=1) with self.assertRaises(ZCMException): manager.activate('00000002', max_older=1) try: manager.activate('00000002', max_older=2, max_newer=2) except ZCMError as e: self.fail('Creation should not raise exceptions') self.assertEqual(manager.path, Path(directory)) self.assertEqual(manager.zfs, zfs) self.assertEqual(manager.active_clone, manager.clones[2]) self.assertEqual(manager.next_id, '00000005') self.assertEqual(len(manager.older_clones), 2) self.assertEqual(len(manager.newer_clones), 2)
def test_clone_options(self): clone = None try: manager = Manager(directory) except ZCMError as e: self.fail('Instantiation should not raise exceptions') try: manager.clone() manager.clone() manager.clone() manager.clone() manager.clone() except ZCMError as e: self.fail('Creation should not raise exceptions') with self.assertRaises(ZCMException): manager.clone(max_newer=5) with self.assertRaises(ZCMException): manager.clone(max_total=6) self.assertEqual(manager.path, Path(directory)) self.assertEqual(manager.zfs, zfs) self.assertEqual(manager.active_clone, manager.clones[0]) self.assertEqual(manager.next_id, '00000006') self.assertEqual(len(manager.older_clones), 0) self.assertEqual(len(manager.newer_clones), 5)
def tearDown(self): try: Manager(directory).destroy() except ZCMError: pass return super().tearDown()
def setUp(self): try: Manager.initialize_manager(zfs, directory) except ZCMError: pass return super().setUp()
def __init__(self, options): manager = Manager(options.path) manager.activate(options.id, options.max_newer, options.max_older, options.max_total, options.auto_remove) if not options.quiet: print('Activated clone ' + options.id)