For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Perl Create Pool

Problem this snippet solves:

This perl sample will illustrate how to query a list of pools and pool members or create a new pool with a specified list of members.

Code :

#use SOAP::Lite + trace => qw(method debug);
use SOAP::Lite;
#----------------------------------------------------------------------------
# Validate Arguments
#----------------------------------------------------------------------------
my $sHost = $ARGV[0];
my $sUID = $ARGV[1];
my $sPWD = $ARGV[2];
my $sPool = $ARGV[3];
my $sMemberList = $ARGV[4];

sub usage()
{
  die ("Usage: PoolMember.pl host port uid pwd [poolname member1:ip,member2:ip,...])\n");
}

if ( ($sHost eq "") or ($sUID eq "") or ($sPWD eq "") )
{
  usage();
}

#----------------------------------------------------------------------------
# Transport Information
#----------------------------------------------------------------------------
sub SOAP::Transport::HTTP::Client::get_basic_credentials
{
  return "$sUID" => "$sPWD";
}

$Pool = SOAP::Lite
  -> uri('urn:iControl:LocalLB/Pool')
  -> readable(1)
  -> proxy("https://$sHost/iControl/iControlPortal.cgi");

#----------------------------------------------------------------------------
# Attempt to add auth headers to avoid dual-round trip
#----------------------------------------------------------------------------
eval { $Pool->transport->http_request->header
(
  'Authorization' =>
  'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };

#----------------------------------------------------------------------------
# Main logic
#----------------------------------------------------------------------------
if ( "" eq $sPool )
{
  #------------------------------------------------------------------------
  # No pool supplied.  Query pool list and display members for given pool
  #------------------------------------------------------------------------
  $soapResponse = $Pool->get_list();
  &checkResponse($soapResponse);
  @pool_list = @{$soapResponse->result};
  $soapResponse = $Pool->get_member
  (
    SOAP::Data->name(pool_names => [@pool_list])
  );
  @memberListAofA = @{$soapResponse->result};
  for $i (0 .. $#pool_list)
  {
    $pool = @pool_list[$i];
    @memberListA = @{@memberListAofA[$i]};
    
    print "POOL $pool\n";
    foreach $member (@memberListA)
    {
      $addr = $member->{"address"};
      $port = $member->{"port"};
      
      print "  -> $addr:$port\n";
    }
  }
}
elsif ( "" ne $sMemberList )
{
  #------------------------------------------------------------------------
  # Pool and member list supplied, try to create new pool
  #------------------------------------------------------------------------
  @MemberDefA;
  
  @memberListA = split(/,/, $sMemberList, 5);
  foreach $memberItem (@memberListA)
  {
    ($memberAddr, $memberPort) = split(/:/, $memberItem, 2);
    $member =
    {
      address => $memberAddr,
      port => $memberPort
    };
    push @memberDefA, $member;
  }
  
  push @memberDefAofA, [@memberDefA];
  
  $soapResponse = $Pool->create(
    SOAP::Data->name(pool_names => [$sPool]),
    SOAP::Data->name(lb_methods => ["LB_METHOD_ROUND_ROBIN"]),
    SOAP::Data->name(members => [@memberDefAofA])
  );
  &checkResponse($soapResponse);
  
  print "Pool $sPool created successfully\n";
}
else
{
  #------------------------------------------------------------------------
  # Pool supplied, but no member list so error out.
  #------------------------------------------------------------------------
  &usage;
}

#----------------------------------------------------------------------------
# checkResponse makes sure the error isn't a SOAP error
#----------------------------------------------------------------------------
sub checkResponse()
{
  my ($soapResponse) = (@_);
  if ( $soapResponse->fault )
  {
    print $soapResponse->faultcode, " ", $soapResponse->faultstring, "\n";
    exit();
  }
}
Published Mar 08, 2015
Version 1.0
No CommentsBe the first to comment