コード例 #1
0
 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)
コード例 #2
0
 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')
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
 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))
コード例 #6
0
 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))
コード例 #7
0
    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())
コード例 #8
0
 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)
コード例 #9
0
 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()
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
 def tearDown(self):
     try:
         Manager(directory).destroy()
     except ZCMError:
         pass
     return super().tearDown()
コード例 #13
0
 def setUp(self):
     try:
         Manager.initialize_manager(zfs, directory)
     except ZCMError:
         pass
     return super().setUp()
コード例 #14
0
 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)