Create Duplicate Disabled Pool
Problem this snippet solves:
Perl script to copy an arbitrary pool, disabling all nodes in the pool. This was intended for creating duplicate pools that start out with everything disabled, and then moving a node between pools would simply require disabling it in the pool it's in and enabling it in the one you want it in.
Code :
#!/usr/bin/perl -w
# Duplicates a pool, modifying it such that all members are disabled.
$bigpipe = "bigpipe";
if(@ARGV < 2) {
die "Usage: perl copyPool.pl \n" .
" toCopy - The name of the pool to copy\n" .
" name - The name to give the new pool\n";
}
$toCopy = shift;
$name = shift;
print "Loading pool info...\n";
if(!($poolInfo = `$bigpipe pool $toCopy list`)) {
die "Error invoking $bigpipe\n";
}
# $poolInfo = `cat poolExample.txt`;
# $poolInfo = `cat badPoolExample.txt`;
if($poolInfo =~ m/^BIGpipe:/) {
die "Error copying pool:\n$poolInfo\n";
}
if(!($poolInfo =~ m/^pool $toCopy/)) {
die "Error copying pool: No pool info received\n$poolInfo\n";
}
# The pipe here is to redirect stderr to stdout. "Successfull" checks will
# cause bigpipe to display an error in stderr and we want to surpress it.
# The pipe redirects stderr to stdout, which is already captured by perl.
if(($tmp = `$bigpipe pool $name list 2>&1`) && ($? == 0)) {
die "Error: Pool $name already exists:\n$tmp\n";
}
#print "Original Pool:\n$poolInfo\n";
# Disable all the members of the pool.
# First, remove all 'session disable' declarations from the members in the pool,
# then add a 'session disable' declaration to every member. This is simpler
# than trying to detect which members aren't already disabled and then adding
# it to just those members.
$newPoolInfo = $poolInfo;
$newPoolInfo =~ s/([ ]*member .*) session disable(.*)/$1 $2/g;
$newPoolInfo =~ s/([ ]*member [^\r\n]*)([\r\n]*)/$1 session disable$2/g;
$newPoolInfo =~ s/$toCopy/$name/g;
print "New Pool:\n$newPoolInfo";
$flatPoolInfo = $newPoolInfo;
$flatPoolInfo =~ s/(\r|\n)//g;
chomp $flatPoolInfo;
# print "Flat pool data:\n$flatPoolInfo\n";
$command = "$bigpipe $flatPoolInfo";
print "Duplicating pool...\n";
#print "Command: $command\n";
system($command);
print "Saving config...\n";
system("$bigpipe save");
print "Done.\n"; Published Mar 12, 2015
Version 1.0Andy_Herrman_22
Nimbostratus
Joined April 13, 2006
Andy_Herrman_22
Nimbostratus
Joined April 13, 2006
No CommentsBe the first to comment