#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
#####################################################
#
#   xCAT post script for diskless nodes 
#   to setup tunable parameters for NFSv4 replication failover
#   It only works on AIX for now
#
#####################################################

# Change these two parameters according to your requirements
$::NFSRETRIES = 3;
$::NFSTIMEO = 10;

# Candidate commands: mount, df, lsfs, nfs4cl showfs
# Only the mount command could list all file systems
# Even the file system is not in /etc/filesystems
my $cmd = "mount";
&runcmd($cmd);
my @nfs4fs;

foreach my $line (@::outref)
{
    chomp($line);

    #header line
    if ($line =~ /node\s+mounted\s+mounted over/)
    {
        next;
    }

    if ($line =~ /^-------/)
    {
        next;
    }
    my ($node, $mounted, $mountedover, $vfs, $dummy) = split(/\s+/, $line, 5);
    if ($vfs eq "nfs4")
    {
        push @nfs4fs, $mountedover;
    }
}
     
foreach my $nfs4mnt (@nfs4fs)
{
    my $nfscmd = "nfs4cl setfsoptions $nfs4mnt timeo=$::NFSTIMEO; nfs4cl setfsoptions $nfs4mnt retrans=$::NFSRETRIES";
    &runcmd($nfscmd);
}

sub runcmd
{
    my ($cmd) = @_;
    my $rc=0;
    $cmd .= ' 2>&1' ;
    @::outref = `$cmd`;
    if ($?)
    {
        $rc = $? >> 8;
        if ($rc > 0)
        {
            `logger -t xcat -p local4.err "runcmd $cmd failed, error message is:"`;
            my $errmsg;
            foreach my $err (@::outref)
            {
                $errmsg .= $err;
            }
            `logger -t xcat -p local4.err "$errmsg"`;

             exit;
        }
    }
    return $rc;
}
