46 lines
1.2 KiB
Python
46 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,
|
||
|
)
|