#!/bin/bash

# alias
nfsrpcinfo() {
    local r=$@
    [ -n "$r" ] && r=|$r
    { rpcinfo -s 2>/dev/null || rpcinfo -p; } | egrep -w "nfs|mountd${r// /|}"
}

#compat service
#===============================================================================
_service_rpcbind() {
    if [ -f /etc/init.d/portmap ]; then
        service portmap $1
    else
        service rpcbind $1
    fi
}
_service_portmap() { service_rpcbind "$@"; }

_service_nfs() {
    # rhel6 - nfs
    # rhel7 - nfs-server (nfs)
    # rhel8 - nfs-server
    local sname=${FUNCNAME#_service_}
    local rc=0
    [ -f /usr/lib/systemd/system/nfs-server.service ] && sname=nfs-server

    service $sname $1
    rc=$?
    [ $rc != 0 ] && [ -x /usr/bin/journalctl ] && { echo "---> journalctl -xn"; journalctl -xn; }
    return $rc
}

_service_nfsconfig() {
    local sname=nfs-config
    local rc=0
    if [ -f /usr/lib/systemd/system/nfs-config.service ]; then
        service $sname $1
    else
        # rhel8 use nfs.conf only, if trying to use sysconfig/nfs and
        # restart nfs-config, just convert sysconfig/nfs to nfs.conf
        grep '^[^#]' /etc/sysconfig/nfs >/dev/null 2>&1
        if [[ $? -eq 0 && $1 == restart && -f /usr/sbin/nfsconvert ]]; then
            echo "[qe] Converting to the unique nfs configuration by nfsconvert"
            [ -s /etc/nfs.conf ] && cp -f /etc/nfs.conf /etc/nfs.conf.qesave && >/etc/nfs.conf
            [ -s /etc/idmapd.conf ] && cp -f /etc/idmapd.conf /etc/idmapd.conf.qesave && >/etc/idmapd.conf
            /usr/sbin/nfsconvert
            if [ -s /etc/nfs.conf ]; then
                echo "[qe] cat /etc/nfs.conf"
                cat /etc/nfs.conf
            fi
            if [ -s /etc/idmapd.conf ]; then
                echo "[qe] cat /etc/idmapd.conf"
                cat /etc/idmapd.conf
            fi
        else
            :
        fi
    fi
    rc=$?
    return $rc
}

_service_nfslock() {
    # rhel6 - nfslock
    # rhel7 - rpc-statd (nfslock/nfs-lock)
    # rhel8 - rpc-statd
    local sname=${FUNCNAME#_service_}
    local rc=0
    [ -f /usr/lib/systemd/system/rpc-statd.service ] && sname=rpc-statd

    service $sname $1
    rc=$?
    [ $rc != 0 ] && [ -x /usr/bin/journalctl ] && { echo "---> journalctl -xn"; journalctl -xn; }
    return $rc
}

_service_rpcgssd() {
    # rhel6 - rpcgssd
    # rhel7 - rpc-gssd (rpcgssd/nfs-secure)
    # rhel8 - rpc-gssd
    local sname=${FUNCNAME#_service_}
    local rc=0
    [ -f /usr/lib/systemd/system/rpc-gssd.service ] && sname=rpc-gssd

    service $sname $1
    rc=$?
    [ $rc != 0 ] && [ -x /usr/bin/journalctl ] && { echo "---> journalctl -xn"; journalctl -xn; }
    return $rc
}

_service_rpcsvcgssd() {
    local sname=${FUNCNAME#_service_}
    local rc=0
    [ -f /usr/lib/systemd/system/rpc-svcgssd.service ] && sname=rpc-svcgssd

    service $sname $1
    rc=$?
    [ $rc != 0 ] && [ -x /usr/bin/journalctl ] && { echo "---> journalctl -xn"; journalctl -xn; }
    return $rc
}

_service_rpcidmapd() {
    # rhel6 - rpcidmapd
    # rhel7 - nfs-idmapd (rpcidmapd/nfs-idmap)
    # rhel8 - nfs-idmapd
    local sname=${FUNCNAME#_service_}
    local rc=0
    [ -f /usr/lib/systemd/system/nfs-idmapd.service ] && sname=nfs-idmapd

    service $sname $1
    rc=$?
    [ $rc != 0 ] && [ -x /usr/bin/journalctl ] && { echo "---> journalctl -xn"; journalctl -xn; }
    return $rc
}

_service_autofs() {
    local sname=${FUNCNAME#_service_}
    local rc=0

    service $sname $1
    rc=$?
    [ $rc != 0 ] && [ -x /usr/bin/journalctl ] && { echo "---> journalctl -xn"; journalctl -xn; }
    return $rc
}

_service_iptables() {
    if [ -f /etc/init.d/iptables ]; then
        service iptables $1
    else
        service firewalld $1
    fi
}
_service_ip6tables() {
    if [ -f /etc/init.d/ip6tables ]; then
        service ip6tables $1
    else
        service firewalld $1
    fi
}

P=${0##*/}
_$P "$@"
