def run(ceph_cluster, **kw): try: log.info(f"MetaData Information {log.metadata} in {__name__}") tc = "nfs-ganesha" nfs_mounting_dir = "/mnt/nfs/" dir_name = "dir" log.info("Running cephfs %s test case" % (tc)) config = kw.get("config") build = config.get("build", config.get("rhbuild")) rhbuild = config.get("rhbuild") if "5." in rhbuild: from tests.cephfs.cephfs_utilsV1 import FsUtils fs_util = FsUtils(ceph_cluster) nfs_server = ceph_cluster.get_ceph_objects("nfs") nfs_client = ceph_cluster.get_ceph_objects("client") fs_util.auth_list(nfs_client) nfs_name = "cephfs-nfs" out, rc = nfs_client[0].exec_command( sudo=True, cmd="ceph fs ls | awk {' print $2'} ") fs_name = out.rstrip() fs_name = fs_name.strip(",") nfs_export_name = "/export1" path = "/" nfs_server_name = nfs_server[0].node.hostname # Create ceph nfs cluster nfs_client[0].exec_command(sudo=True, cmd="ceph mgr module enable nfs") out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs cluster create {nfs_name} {nfs_server_name}") # Verify ceph nfs cluster is created if wait_for_process(client=nfs_client[0], process_name=nfs_name, ispresent=True): log.info("ceph nfs cluster created successfully") else: raise CommandFailed("Failed to create nfs cluster") # Create cephfs nfs export if "5.0" in rhbuild: nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export create cephfs {fs_name} {nfs_name} " f"{nfs_export_name} path={path}", ) else: nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export create cephfs {nfs_name} " f"{nfs_export_name} {fs_name} path={path}", ) # Verify ceph nfs export is created out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export ls {nfs_name}") if nfs_export_name in out: log.info("ceph nfs export created successfully") else: raise CommandFailed("Failed to create nfs export") # Mount ceph nfs exports nfs_client[0].exec_command(sudo=True, cmd=f"mkdir -p {nfs_mounting_dir}") assert wait_for_cmd_to_succeed( nfs_client[0], cmd= f"mount -t nfs -o port=2049 {nfs_server_name}:{nfs_export_name} {nfs_mounting_dir}", ) nfs_client[0].exec_command( sudo=True, cmd= f"mount -t nfs -o port=2049 {nfs_server_name}:{nfs_export_name} {nfs_mounting_dir}", ) out, rc = nfs_client[0].exec_command(cmd="mount") mount_output = out.split() log.info("Checking if nfs mount is is passed of failed:") assert nfs_mounting_dir.rstrip("/") in mount_output log.info("Creating Directory") out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"mkdir {nfs_mounting_dir}{dir_name}") nfs_client[0].exec_command( sudo=True, cmd= f"python3 /home/cephuser/smallfile/smallfile_cli.py --operation create --threads 10 --file-size 4 " f"--files 1000 --files-per-dir 10 --dirs-per-dir 2 --top " f"{nfs_mounting_dir}{dir_name}", long_running=True, ) nfs_client[0].exec_command( sudo=True, cmd= f"python3 /home/cephuser/smallfile/smallfile_cli.py --operation read --threads 10 --file-size 4 " f"--files 1000 --files-per-dir 10 --dirs-per-dir 2 --top " f"{nfs_mounting_dir}{dir_name}", long_running=True, ) # Unmount nfs nfs_client[0].exec_command(sudo=True, cmd=f"umount {nfs_mounting_dir}") # Delete cephfs nfs export nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export delete {nfs_name} {nfs_export_name}") # Verify cephfs nfs export is deleted out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export ls {nfs_name}") if nfs_export_name not in out: log.info("cephf nfs export deleted successfully") else: raise CommandFailed("Failed to delete cephfs nfs export") # Delete nfs cluster nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs cluster delete {nfs_name}") # Adding Delay to reflect in cluster list time.sleep(5) if not wait_for_process(client=nfs_client[0], process_name=nfs_name, ispresent=False): raise CommandFailed("Cluster has not been deleted") # Verify nfs cluster is deleted out, rc = nfs_client[0].exec_command(sudo=True, cmd="ceph nfs cluster ls") if nfs_name not in out: log.info("ceph nfs cluster deleted successfully") else: raise CommandFailed("Failed to delete nfs cluster") else: from tests.cephfs.cephfs_utils import FsUtils fs_util = FsUtils(ceph_cluster) client_info, rc = fs_util.get_clients(build) if rc == 0: log.info("Got client info") else: raise CommandFailed("fetching client info failed") nfs_server = [client_info["kernel_clients"][0]] nfs_client = [client_info["kernel_clients"][1]] rc1 = fs_util.auth_list(nfs_server) rc2 = fs_util.auth_list(nfs_client) print(rc1, rc2) if rc1 == 0 and rc2 == 0: log.info("got auth keys") else: raise CommandFailed("auth list failed") rc = fs_util.nfs_ganesha_install(nfs_server[0]) if rc == 0: log.info("NFS ganesha installed successfully") else: raise CommandFailed("NFS ganesha installation failed") rc = fs_util.nfs_ganesha_conf(nfs_server[0], "admin") if rc == 0: log.info("NFS ganesha config added successfully") else: raise CommandFailed("NFS ganesha config adding failed") rc = fs_util.nfs_ganesha_mount(nfs_client[0], nfs_mounting_dir, nfs_server[0].node.hostname) if rc == 0: log.info("NFS-ganesha mount passed") else: raise CommandFailed("NFS ganesha mount failed") mounting_dir = nfs_mounting_dir + "ceph/" out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"mkdir {mounting_dir}{dir_name}") nfs_client[0].exec_command( sudo=True, cmd= f"python3 /home/cephuser/smallfile/smallfile_cli.py --operation create --threads 10 --file-size 4 " f"--files 1000 --files-per-dir 10 --dirs-per-dir 2 --top " f"{mounting_dir}{dir_name}", long_running=True, ) nfs_client[0].exec_command( sudo=True, cmd= f"python3 /home/cephuser/smallfile/smallfile_cli.py --operation read --threads 10 --file-size 4 " f"--files 1000 --files-per-dir 10 --dirs-per-dir 2 --top " f"{mounting_dir}{dir_name}", long_running=True, ) log.info("Cleaning up") nfs_client[0].exec_command(sudo=True, cmd=f"rm -rf {mounting_dir}*") log.info("Unmounting nfs-ganesha mount on client:") nfs_client[0].exec_command(sudo=True, cmd=" umount %s -l" % (nfs_mounting_dir)) log.info("Removing nfs-ganesha mount dir on client:") nfs_client[0].exec_command(sudo=True, cmd="rm -rf %s" % (nfs_mounting_dir)) log.info("Cleaning up successfull") return 0 except CommandFailed as e: log.info(e) log.info(traceback.format_exc()) return 1 except Exception as e: log.info(e) log.info(traceback.format_exc()) return 1
def run(ceph_cluster, **kw): try: tc = "nfs-ganesha" nfs_mounting_dir = "/mnt/nfs/" dir_name = "dir" log.info("Running cephfs %s test case" % (tc)) mons = ceph_cluster.get_ceph_objects("mon") config = kw.get("config") build = config.get("build", config.get("rhbuild")) rhbuild = config.get("rhbuild") if "5." in rhbuild: from tests.cephfs.cephfs_utilsV1 import FsUtils fs_util = FsUtils(ceph_cluster) nfs_server = ceph_cluster.get_ceph_objects("nfs") nfs_client = ceph_cluster.get_ceph_objects("client") fs_util.auth_list(nfs_client) nfs_name = "cephfs-nfs" out, rc = nfs_client[0].exec_command( cmd=" sudo ceph fs ls | awk {' print $2'} ") fs_name = out.read().decode().rstrip() fs_name = fs_name.strip(",") nfs_export_name = "/export1" path = "/" nfs_server_name = nfs_server[0].node.hostname # Create ceph nfs cluster nfs_client[0].exec_command(sudo=True, cmd="ceph mgr module enable nfs") nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs cluster create {nfs_name} {nfs_server_name}") # Verify ceph nfs cluster is created out, rc = nfs_client[0].exec_command(sudo=True, cmd="ceph nfs cluster ls") output = out.read().decode() output.split() if nfs_name in output: log.info("ceph nfs cluster created successfully") else: log.error("Failed to create nfs cluster") # Create cephfs nfs export nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export create cephfs {fs_name} {nfs_name} " f"{nfs_export_name} path={path}") # Verify ceph nfs export is created out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export ls {nfs_name}") output = out.read().decode() output.split() if nfs_export_name in output: log.info("ceph nfs export created successfully") else: log.error("Failed to create nfs export") # Mount ceph nfs exports nfs_client[0].exec_command(sudo=True, cmd=f"mkdir -p {nfs_mounting_dir}") nfs_client[0].exec_command( sudo=True, cmd= f"mount -t nfs -o port=2049 {nfs_server_name}:{nfs_export_name} {nfs_mounting_dir}" ) out, rc = nfs_client[0].exec_command(cmd="mount") mount_output = out.read().decode() mount_output = mount_output.split() log.info("Checking if nfs mount is is passed of failed:") assert nfs_mounting_dir.rstrip("/") in mount_output log.info("Creating Directory") out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"mkdir {nfs_mounting_dir}{dir_name}") out, rc = nfs_client[0].exec_command( sudo=True, cmd= f"python3 /home/cephuser/smallfile/smallfile_cli.py --operation create --threads 10 --file-size 4 " f"--files 1000 --files-per-dir 10 --dirs-per-dir 2 --top " f"{nfs_mounting_dir}{dir_name}", long_running=True, ) out, rc = nfs_client[0].exec_command( sudo=True, cmd= f"python3 /home/cephuser/smallfile/smallfile_cli.py --operation read --threads 10 --file-size 4 " f"--files 1000 --files-per-dir 10 --dirs-per-dir 2 --top " f"{nfs_mounting_dir}{dir_name}", long_running=True, ) # Unmount nfs nfs_client[0].exec_command(sudo=True, cmd=f"umount {nfs_mounting_dir}") # Delete cephfs nfs export nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export delete {nfs_name} {nfs_export_name}") # Verify cephfs nfs export is deleted out, rc = nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs export ls {nfs_name}") output = out.read().decode() output.split() if nfs_export_name not in output: log.info("cephf nfs export deleted successfully") else: log.error("Failed to delete cephfs nfs export") # Delete nfs cluster nfs_client[0].exec_command( sudo=True, cmd=f"ceph nfs cluster delete {nfs_name}") # Adding Delay to reflect in cluster list time.sleep(5) # Verify nfs cluster is deleted out, rc = nfs_client[0].exec_command(sudo=True, cmd="ceph nfs cluster ls") output = out.read().decode() output.split() if nfs_name not in output: log.info("ceph nfs cluster deleted successfully") else: log.error("Failed to delete nfs cluster") else: from tests.cephfs.cephfs_utils import FsUtils fs_util = FsUtils(ceph_cluster) client_info, rc = fs_util.get_clients(build) if rc == 0: log.info("Got client info") else: raise CommandFailed("fetching client info failed") nfs_server = [client_info["kernel_clients"][0]] nfs_client = [client_info["kernel_clients"][1]] rc1 = fs_util.auth_list(nfs_server) rc2 = fs_util.auth_list(nfs_client) print(rc1, rc2) if rc1 == 0 and rc2 == 0: log.info("got auth keys") else: raise CommandFailed("auth list failed") rc = fs_util.nfs_ganesha_install(nfs_server[0]) if rc == 0: log.info("NFS ganesha installed successfully") else: raise CommandFailed("NFS ganesha installation failed") rc = fs_util.nfs_ganesha_conf(nfs_server[0], "admin") if rc == 0: log.info("NFS ganesha config added successfully") else: raise CommandFailed("NFS ganesha config adding failed") rc = fs_util.nfs_ganesha_mount(nfs_client[0], nfs_mounting_dir, nfs_server[0].node.hostname) if rc == 0: log.info("NFS-ganesha mount passed") else: raise CommandFailed("NFS ganesha mount failed") mounting_dir = nfs_mounting_dir + "/ceph" for num in range(0, 4): log.info("Creating Directories") out, rc = nfs_client[0].exec_command( sudo=True, cmd="mkdir %s%s_%d" % (mounting_dir, dir_name, num)) print(out.read().decode()) out, rc = nfs_client[0].exec_command(sudo=True, cmd="ls %s | grep %s" % (mounting_dir, dir_name)) dirs = out.read().decode() dirs.splitlines() print(dirs) print(dirs[0]) with parallel() as p: p.spawn( fs_util.stress_io, nfs_client, mounting_dir, dirs[0], 0, 5, iotype="fio", ) p.spawn( fs_util.stress_io, nfs_client, mounting_dir, dirs[2], 0, 5, iotype="dd", ) p.spawn( fs_util.stress_io, nfs_client, mounting_dir, dirs[1], 0, 1, iotype="smallfile", ) p.spawn( fs_util.stress_io, nfs_client, mounting_dir, dirs[3], 0, 1, iotype="smallfile_create", fnum=1000, fsize=1024, ) for client in nfs_client: log.info("Unmounting nfs-ganesha mount on client:") client.exec_command(cmd="sudo umount %s -l" % (nfs_mounting_dir)) log.info("Removing nfs-ganesha mount dir on client:") client.exec_command(cmd="sudo rm -rf %s" % (nfs_mounting_dir)) if rc == 0: log.info("Cleaning up successfull") return 0 except CommandFailed as e: log.info(e) log.info(traceback.format_exc()) return 1 except Exception as e: log.info(e) log.info(traceback.format_exc()) return 1