From 1dd25b47459f4bf7aad57758d0d210c3015bd319 Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Wed, 15 Jun 2011 18:07:18 -0700 Subject: [PATCH] Add task for mounting with the kernel client. --- teuthology/task/kclient.py | 91 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 teuthology/task/kclient.py diff --git a/teuthology/task/kclient.py b/teuthology/task/kclient.py new file mode 100644 index 0000000000000..2039899d8e4c9 --- /dev/null +++ b/teuthology/task/kclient.py @@ -0,0 +1,91 @@ +import contextlib +import logging +import os + +from teuthology import misc as teuthology + +log = logging.getLogger(__name__) + +@contextlib.contextmanager +def task(ctx, config): + """ + Mount/unmount a ``kernel`` client. + + The config is expected to be a list of clients to do this + operation on. This lets you e.g. set up one client with ``cfuse`` + and another with ``kclient``. + + tasks: + - ceph: + - cfuse: [client.0] + - kclient: [client.1] + - interactive: + """ + log.info('Mounting kernel clients...') + assert isinstance(config, list), \ + "task kclient automatic configuration not supported yet, list all clients" + + for role in config: + log.debug('Mounting client {role}...'.format(role=role)) + assert isinstance(role, basestring) + PREFIX = 'client.' + assert role.startswith(PREFIX) + id_ = role[len(PREFIX):] + (remote,) = ctx.cluster.only(role).remotes.iterkeys() + remotes_and_roles = ctx.cluster.remotes.items() + roles = [roles for (remote, roles) in remotes_and_roles] + ips = [host for (host, port) in (remote.ssh.get_transport().getpeername() for (remote, roles) in remotes_and_roles)] + mons = teuthology.get_mons(roles, ips).values() + mnt = os.path.join('/tmp/cephtest', 'mnt.{id}'.format(id=id_)) + secret = '/tmp/cephtest/data/{role}.secret'.format(role=role) + teuthology.write_secret_file(remote, role, secret) + + remote.run( + args=[ + 'mkdir', + '--', + mnt, + ], + ) + + remote.run( + args=[ + 'sudo', + '/tmp/cephtest/binary/usr/local/bin/ceph-coverage', + '/tmp/cephtest/archive/coverage', + '/tmp/cephtest/binary/usr/local/sbin/mount.ceph', + '{mons}:/'.format(mons=','.join(mons)), + mnt, + '-v', + '-o', + 'name={id},secretfile={secret}'.format(id=id_, + secret=secret), + ], + ) + + try: + yield + finally: + log.info('Unmounting kernel clients...') + for role in config: + log.debug('Unmounting client {role}...'.format(role=role)) + assert isinstance(role, basestring) + PREFIX = 'client.' + assert role.startswith(PREFIX) + id_ = role[len(PREFIX):] + (remote,) = ctx.cluster.only(role).remotes.iterkeys() + mnt = os.path.join('/tmp/cephtest', 'mnt.{id}'.format(id=id_)) + remote.run( + args=[ + 'sudo', + 'umount', + mnt, + ], + ) + remote.run( + args=[ + 'rmdir', + '--', + mnt, + ], + ) -- 2.39.5