Add mount_missing_nfs.py

This commit is contained in:
gru
2025-05-24 10:20:58 +02:00
commit 9c27bf9073

65
mount_missing_nfs.py Normal file
View File

@ -0,0 +1,65 @@
#!/usr/bin/env python3
import subprocess
import os
import re
import argparse
FSTAB_PATH = '/etc/fstab'
def parse_fstab():
mounts = []
with open(FSTAB_PATH, 'r') as f:
for line in f:
line = line.strip()
if not line or line.startswith('#'):
continue
parts = re.split(r'\s+', line)
if len(parts) >= 3 and parts[2] == 'nfs':
source, target, fstype = parts[:3]
mounts.append(target)
return mounts
def get_mounted():
result = subprocess.run(['mount'], stdout=subprocess.PIPE, text=True)
mounts = set()
for line in result.stdout.splitlines():
parts = line.split()
if len(parts) >= 3:
mounts.add(parts[2])
return mounts
def restart_services(services):
for service in services:
print(f"Restarting service: {service}")
try:
subprocess.run(['systemctl', 'restart', service], check=True)
except subprocess.CalledProcessError as e:
print(f"Failed to restart {service}: {e}")
def mount_missing(services_to_restart):
fstab_mounts = parse_fstab()
mounted = get_mounted()
something_mounted = False
for mountpoint in fstab_mounts:
if not os.path.ismount(mountpoint):
print(f"Mounting missing NFS mount: {mountpoint}")
try:
subprocess.run(['mount', mountpoint], check=True)
something_mounted = True
except subprocess.CalledProcessError as e:
print(f"Failed to mount {mountpoint}: {e}")
if something_mounted and services_to_restart:
restart_services(services_to_restart)
def main():
parser = argparse.ArgumentParser(description='Mount missing NFS from fstab and optionally restart systemd services.')
parser.add_argument('--restart-service', action='append', help='Systemd service to restart if any mount succeeds. Can be used multiple times.', default=[])
args = parser.parse_args()
mount_missing(args.restart_service)
if __name__ == '__main__':
main()