pyinfra/tasks/nfs.py

45 lines
1.2 KiB
Python

from pyinfra import host
from pyinfra.api import deploy
from pyinfra.facts import files
from pyinfra.operations import apt
from pyinfra.operations import files as files_op
from pyinfra.operations import server
def generate_line(config: dict[str, str]) -> str:
return f"{config.get('directory')} {config.get('ip')}{','.join(config.get('flags'))}"
@deploy
def setup_nfs():
nfs_config = host.data.get("nfs")
for export in nfs_config.get("exports"):
if not host.get_fact(files.Directory, export.get("directory")):
raise ValueError(f"Directory {export.get('directory')} does not exist on remote!")
files_op.file(
name="Ensure /etx/exports exist",
path="/etc/exports",
present=True,
)
apt.packages(
name="Install nfs package",
packages=[
"nfs-kernel-server",
],
)
for export in nfs_config.get("exports"):
files_op.line(
name=f"Add {export.get('directory')} to config",
path="/etc/exports",
line=generate_line(export),
present=True,
)
server.service(
name="Restart nfs service after configuring",
service="nfs-kernel-server",
restarted=True,
enabled=True,
)