def test_default_options_override_defaults(self): with mount.DockerMount('foobar') as m: o = m.default_options(['override', 'opts'], default_con='foobar_context', default_opt=['will not appear']) self.assertEqual(o, ['override', 'opts', 'context="foobar_context"'])
def test_mount_excepts_unknown_backend(self): def mock_info(): return {'Driver': 'foobardriver'} m = mount.DockerMount('foobar') m.client.info = mock_info exp = 'Atomic mount is not supported on the foobardriver docker ' \ 'storage backend.' self.assertRaisesRegexp(mount.MountError, exp, m.mount, 'fedora:22') self.assertRaisesRegexp(mount.MountError, exp, m.unmount)
def test_dockermount_context_manager(self): def mock_info(): return {'Driver': 'foobardriver'} dm = mount.DockerMount('foobar') dm._info = mock_info # pylint: disable=protected-access message = 'Atomic mount is not supported on the foobardriver docker ' \ 'storage backend.' with self.assertRaises(mount.MountError) as cm: with mount.MountContextManager(dm, 'fedora:25'): pass self.assertEqual(cm.exception.val, message)
def unmount(self): if os.geteuid() != 0: raise ValueError("This command must be run as root.") try: dev = mount.Mount.get_dev_at_mountpoint(self.args.mountpoint) # If there's a bind-mount over the directory, unbind it. if dev.rsplit('[', 1)[-1].strip(']') == '/rootfs' \ and self.d.info()['Driver'] == 'devicemapper': mount.Mount.unmount_path(self.args.mountpoint) return mount.DockerMount(self.args.mountpoint).unmount() except mount.MountError as dme: raise ValueError(str(dme))
def test_mount_excepts_unknown_backend(self): def mock_info(): return {'Driver': 'foobardriver'} with mount.DockerMount('foobar') as m: m._info = mock_info # pylint: disable=protected-access exp = 'Atomic mount is not supported on the foobardriver docker ' \ 'storage backend.' # assertRaisesRegexp was deprecated by assertRaisesRegex. # If it is present, prefer assertRaisesRegex. if hasattr(self, 'assertRaisesRegex'): assertRaisesRegex = getattr(self, "assertRaisesRegex") else: assertRaisesRegex = getattr(self, "assertRaisesRegexp") assertRaisesRegex(mount.MountError, exp, m.mount, 'fedora:22') assertRaisesRegex(mount.MountError, exp, m.unmount)
def mount(self): if os.geteuid() != 0: raise ValueError("This command must be run as root.") try: options = [opt for opt in self.args.options.split(',') if opt] mount.DockerMount(self.args.mountpoint, self.args.live).mount(self.args.image, options) # only need to bind-mount on the devicemapper driver if self.d.info()['Driver'] == 'devicemapper': mount.Mount.mount_path(os.path.join(self.args.mountpoint, "rootfs"), self.args.mountpoint, bind=True) except mount.MountError as dme: raise ValueError(str(dme))
def test_default_options_no_surplus_context(self): with mount.DockerMount('foobar') as m: o = m.default_options(['ro', 'context="foobang_context"'], default_con='foobar_context') self.assertEqual(o, ['ro', 'context="foobang_context"'])
def test_default_options(self): with mount.DockerMount('foobar') as m: o = m.default_options([], default_con='foobar_context', default_opt=['foo', 'bar']) self.assertEqual(o, ['foo', 'bar', 'context="foobar_context"'])
def __init__(self, docker_name): self.dm = mount.DockerMount("/tmp", mnt_mkdir=True) self.name = docker_name self.root_path = self.dm.mount(self.name) self.chroot = os.path.join(self.root_path, "rootfs")