[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Scripting /etc/fstab changes



Danda, Richard SFC wrote:
Greetings all,

I have a NetApp FAS270 filer that I have migrated NFS data directories too.
I need to make changes to all my RHEL machines to point to the new device
for mounts. Is there an easy way to script the change?


YOU WANT US TO DO YOUR HOMEWORK?!


Try this perl script, it's probably unelegant as hell but I found it in my "hacks" directory. No guarantees!!! Try it first manually, then set reallyWrite to 1 to replace your fstab.

Fix the regular expressions for your case.

----------8<-------------------------8<-------------------------8<------------------
#!/usr/bin/perl

# Program that can be used to replace stuff in some file

$file = $ARGV[0];

if (!defined $file) {
die "You have to pass the name of the file to modify on the commandline\n";
}

if (!(-f $file && -r $file && -w $file)) {
 die "The file '$file' is not accessible or not writeable\n";
}

open(FILE,"<$file") or die "Could not open '$file' for reading: $!\n";

@buffer = (); # Takes up the file lines that we will write eventually

while ($line = <FILE>) {
 chomp($line);
 if ($line =~ /^hostA\:(.*)$/) {
   push(@buffer,"hostB:$1");
   next;
 }
 else {
   # just keep the line as is
   push(@buffer,$line);
   next;
 }
 if ($line ne $buffer[ buffer-1]) {
   print STDERR "Line changed\n";
   print STDERR "From: $line\n";
   print STDERR "To:   $buffer[ buffer-1]\n";
 }
}

close(FILE) or die "Could not close '$file': $!\n";

# Now we will write, replacing the existing file (if reallyWrite is set to 1)

$reallyWrite = 0;

if ($reallyWrite) {
 open(FILE,">$file") or die "Could not open '$file' for writing: $!\n";
 foreach $line (@buffer) {
   print FILE "$line\n";
 }
close(FILE) or die "Could not close '$file': $!\n";
}
else {
 foreach $line (@buffer) {
   print "$line\n";
 }
}






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]