#!/usr/bin/perl -wi.bak
use strict;
####
my %params;
my $filename = shift || die "Usage: netswap.pl CONFILENAME\n";
##
##
open(FH,"$filename")
or die "Could not open network configuration file: [$filename] for reading: $!\n";
##
##
while(){
# Skip the blank lines or the commented lines
next if (/^\s*$/ || /^\s*\#/);
# Get the name and the values
my ($name, $value) = split(/:/, $_, 2);
# Remove starting/trailing spaces
s/(?:^\s*|\s*$)//g foreach ($name, $value);
# Store the values in the hash in lowercase to
# avoid typing mistakes
$params{$name} = lc($value);
}
##
##
print <<"EOL";
new hostname = [$params{hostname}]
new domainname = [$params{domainname}]
new ip = [$params{ip}]
new Subnet Mask = [$params{subnetmask}]
new DNS = [$params{dns}]
new gateway = [$params{gateway}]
EOL
##
##
my $replacements = {
'/etc/hosts' => {
'hosts' => {
"^.*$params{hostname}.*" => "$params{ip}\t$params{hostname}.$params{domainname}\t$params{hostname}",
},
'/etc/sysconfig/network' => {
"^GATEWAY.*" => qq'GATEWAY="$params{gateway}"',
"^HOSTNAME.*" => qq'HOSTNAME="$params{hostname}"',
"^DOMAINNAME.*" => qq'DOMAINNAME="$params{domainname}"',
},
'/etc/sysconfig/network-scripts/ifcfg-eth0' => {
"^IPADDR.*" => qq'IPADDR="$params{ip}"',
"^NETMASK.*" => qq'NETMASK="$params{subnetmask}"',
},
'/etc/resolv.conf' => {
"^nameserver.*" => "nameserver $params{dns}",
"^SEARCH.*" => "SEARCH $params{domainname}",
},
};
file_edit($replacements);
`/etc/init.d/network restart`;
########################file_edit###################
sub file_edit {
my $replacements = shift;
foreach my $filename (keys %{$replacements}){
print STDERR "Processing file [$filename]\n";
##
##
unless (-e $filename){
print STDERR " [$filename] cannot be found!\n";
next;
}
##
##
@ARGV=($filename); # put the filename where perl can find it.
while(<>){
foreach my $search (keys %{$replacements->{$filename}}){
s/$search/$replacements->{$filename}->{$search}/;
print;
}
}
print STDERR " done\n";
}
}