Skip to content

Commit

Permalink
Add NFS tool
Browse files Browse the repository at this point in the history
  • Loading branch information
dsrivastavv committed Jan 19, 2022
1 parent f4b054a commit 785b95a
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lisa/tools/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
from .modprobe import Modprobe
from .mount import Mount
from .netperf import Netperf
from .nfs_client import NFSClient
from .nfs_server import NFSServer
from .nm import Nm
from .ntp import Ntp
from .ntpstat import Ntpstat
Expand Down Expand Up @@ -107,6 +109,8 @@
"Modprobe",
"Mount",
"Netperf",
"NFSClient",
"NFSServer",
"Nm",
"Ntp",
"Ntpstat",
Expand Down
46 changes: 46 additions & 0 deletions lisa/tools/nfs_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

from lisa.executable import Tool
from lisa.operating_system import SLES, Debian, Redhat
from lisa.tools import Firewall, Mount
from lisa.util import UnsupportedDistroException


class NFSClient(Tool):
@property
def command(self) -> str:
return "/sbin/mount.nfs"

def can_install(self) -> bool:
return True

def setup(
self,
server_ip: str,
server_shared_dir: str,
mount_dir: str,
protocol: str = "tcp",
) -> None:
# stop firewall
self.node.tools[Firewall].stop()

# mount server shared directory
self.node.tools[Mount].mount(
disk_name=f"{server_ip}:{server_shared_dir}",
point=mount_dir,
type="nfs",
options=f"proto={protocol},vers=3",
)

def _install(self) -> bool:
if isinstance(self.node.os, Redhat):
self.node.os.install_packages("nfs-utils")
elif isinstance(self.node.os, Debian):
self.node.os.install_packages("nfs-common")
elif isinstance(self.node.os, SLES):
pass
else:
raise UnsupportedDistroException(self.node.os)

return self._check_exists()
74 changes: 74 additions & 0 deletions lisa/tools/nfs_server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

from pathlib import PurePosixPath
from typing import List

from lisa.executable import Tool
from lisa.operating_system import SLES, Debian, Redhat
from lisa.tools import Echo, Firewall
from lisa.tools.service import Service
from lisa.util import UnsupportedDistroException


class NFSServer(Tool):
@property
def command(self) -> str:
return ""

def can_install(self) -> bool:
return True

def create_shared_dir(self, client_ips: List[str], dir_name: str) -> None:
# create directory to share
self.node.execute(f"chmod -R a+rwX {dir_name}", sudo=True)

# add client ip to /etc/exports file
for client_ip in client_ips:
self.node.tools[Echo].write_to_file(
f"{dir_name} {client_ip}(rw,sync,no_subtree_check)",
PurePosixPath("/etc/exports"),
sudo=True,
append=True,
)

# stop firewall
self.node.tools[Firewall].stop()

# restart nfs service
if isinstance(self.node.os, Redhat):
self.node.tools[Service].restart_service(
"nfs-server",
)
elif isinstance(self.node.os, Debian):
self.node.tools[Service].restart_service(
"nfs-kernel-server",
)
elif isinstance(self.node.os, SLES):
self.node.tools[Service].restart_service(
"nfsserver",
)
else:
raise UnsupportedDistroException(self.node.os)

def _install(self) -> bool:
if isinstance(self.node.os, Redhat):
self.node.os.install_packages("nfs-utils")
elif isinstance(self.node.os, Debian):
self.node.os.install_packages("nfs-kernel-server")
elif isinstance(self.node.os, SLES):
self.node.os.install_packages("nfs-kernel-server")
else:
raise UnsupportedDistroException(self.node.os)

return self._check_exists()

def _check_exists(self) -> bool:
if isinstance(self.node.os, Redhat):
return self.node.tools[Service].check_service_exists("nfs-utils")
elif isinstance(self.node.os, Debian):
return self.node.tools[Service].check_service_exists("nfs-kernel-server")
elif isinstance(self.node.os, SLES):
return self.node.tools[Service].check_service_exists("nfs-kernel-server")
else:
raise UnsupportedDistroException(self.node.os)

0 comments on commit 785b95a

Please sign in to comment.