Perl Gtm Pool Member
Problem this snippet solves:
This perl sample will allow you to query a wideip's pool members and set their enabled state.
Code :
#!/usr/bin/perl
#----------------------------------------------------------------------------
# The contents of this file are subject to the "END USER LICENSE AGREEMENT FOR F5
# Software Development Kit for iControl"; you may not use this file except in
# compliance with the License. The License is included in the iControl
# Software Development Kit.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# The Original Code is iControl Code and related documentation
# distributed by F5.
#
# The Initial Developer of the Original Code is F5 Networks,
# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2004 F5 Networks,
# Inc. All Rights Reserved. iControl (TM) is a registered trademark of F5 Networks, Inc.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License (the "GPL"), in which case the
# provisions of GPL are applicable instead of those above. If you wish
# to allow use of your version of this file only under the terms of the
# GPL and not to allow others to use your version of this file under the
# License, indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by the GPL.
# If you do not delete the provisions above, a recipient may use your
# version of this file under either the License or the GPL.
#----------------------------------------------------------------------------
#use SOAP::Lite + trace => qw(method debug);
use SOAP::Lite;
use MIME::Base64;
use HTTP::Cookies;
BEGIN { push (@INC, ".."); }
use iControlTypeCast;
#----------------------------------------------------------------------------
# Validate Arguments
#----------------------------------------------------------------------------
my $sHost = $ARGV[0];
my $sUID = $ARGV[1];
my $sPWD = $ARGV[2];
my $sWideIP = $ARGV[3];
my $sPool = $ARGV[4];
my $sPoolMember = $ARGV[5];
my $sState = $ARGV[6];
if ( ($sHost eq "") or ($sUID eq "") or ($sPWD eq "") )
{
&usage();
}
sub usage()
{
die ("Usage: GTMPoolMember.pl host uid pwd [wideip [pool [member [enable|disable]]]]\n");
}
#----------------------------------------------------------------------------
# Transport Information
#----------------------------------------------------------------------------
sub SOAP::Transport::HTTP::Client::get_basic_credentials
{
return "$sUID" => "$sPWD";
}
$GlobalLBPool = SOAP::Lite
-> uri('urn:iControl:GlobalLB/Pool')
-> proxy("https://$sHost/iControl/iControlPortal.cgi",
cookie_jar => HTTP::Cookies->new(ignore_discard => 1));
eval { $GlobalLBPool->transport->http_request->header
(
'Authorization' =>
'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };
$GlobalLBPoolMember = SOAP::Lite
-> uri('urn:iControl:GlobalLB/PoolMember')
-> proxy("https://$sHost/iControl/iControlPortal.cgi",
cookie_jar => HTTP::Cookies->new(ignore_discard => 1));
eval { $GlobalLBPoolMember->transport->http_request->header
(
'Authorization' =>
'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };
$GlobalLBWideIP = SOAP::Lite
-> uri('urn:iControl:GlobalLB/WideIP')
-> proxy("https://$sHost/iControl/iControlPortal.cgi",
cookie_jar => HTTP::Cookies->new(ignore_discard => 1));
eval { $GlobalLBWideIP->transport->http_request->header
(
'Authorization' =>
'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };
#----------------------------------------------------------------------------
# sub getWideIPList
#----------------------------------------------------------------------------
sub getWideIPList()
{
$soapResponse = $GlobalLBWideIP->get_list();
&checkResponse($soapResponse);
@wideipList = @{$soapResponse->result};
print "WideIP's\n";
print "=============\n";
foreach $wideip (@wideipList)
{
print "$wideip\n";
}
}
#----------------------------------------------------------------------------
# sub getWideIPPoolList
#----------------------------------------------------------------------------
sub getWideIPPoolList()
{
my ($wideIP) = @_;
print "getting pools for wideip: $wideIP\n";
$soapResponse = $GlobalLBWideIP->get_wideip_pool(
SOAP::Data->name(wide_ips => [$wideIP])
);
&checkResponse($soapResponse);
@WideIPPoolAofA = @{$soapResponse->result};
print "Wideip: $wideIP\n";
@WideIPPoolA = @{@WideIPPoolAofA[0]};
foreach $WideIPPool (@WideIPPoolA)
{
$pool_name = $WideIPPool->{"pool_name"};
$order = $WideIPPool->{"order"};
$ratio = $WideIPPool->{"ratio"};
print " Pool $pool_name; order $order; ratio: $ratio\n";
}
}
#----------------------------------------------------------------------------
# sub getWideIPPoolMemberList
#----------------------------------------------------------------------------
sub getWideIPPoolMemberList()
{
my ($wideIP, $pool) = (@_);
print "Retriving pool members for wideip pool ${wideIP}:${pool}\n";
$soapResponse = $GlobalLBPool->get_member(
SOAP::Data->name(pool_names => [$pool])
);
&checkResponse($soapResponse);
@PoolMemberDefinitionAofA = @{$soapResponse->result};
print "WideIP: $wideIP\n";
print "Pool : $pool\n";
@PoolMemberDefinitionA = @{@PoolMemberDefinitionAofA[0]};
foreach $PoolMemberDefinition (@PoolMemberDefinitionA)
{
$member = $PoolMemberDefinition->{"member"};
$address = $member->{"address"};
$port = $member->{"port"};
$order = $PoolMemberDefinition->{"order"};
print " MEMBER: ${address}:${port}; order ${order}\n";
}
}
#----------------------------------------------------------------------------
# sub getWideIPPoolMemberState
#----------------------------------------------------------------------------
sub getWideIPPoolMemberState()
{
my ($wideIP, $pool, $memberdef) = (@_);
($addr, $port) = split(/:/, $memberdef, 2);
$IPPortDefinition = {
address => $addr,
port => $port
};
my @membersA;
push @membersA, $IPPortDefinition;
my @membersAofA;
push @membersAofA, [@membersA];
$soapResponse = $GlobalLBPoolMember->get_enabled_state(
SOAP::Data->name(pool_names => [$pool]),
SOAP::Data->name(members => [@membersAofA])
);
&checkResponse($soapResponse);
@memberEnabledStateAofA = @{$soapResponse->result};
@memberEnabledStateA = @{@memberEnabledStateAofA[0]};
$memberEnabledState = @memberEnabledStateA[0];
$member = $memberEnabledState->{"member"};
$state = $memberEnabledState->{"state"};
print "WIDEIP : $wideIP\n";
print "POOL : $pool\n";
print "Member : $memberdef\n";
print "State : $state\n";
}
#----------------------------------------------------------------------------
# sub setWideIPPoolMemberState
#----------------------------------------------------------------------------
sub setWideIPPoolMemberState()
{
my ($wideIP, $pool, $memberdef, $state) = (@_);
($addr, $port) = split(/:/, $memberdef, 2);
$IPPortDefinition = {
address => $addr,
port => $port
};
if ( ($state eq "STATE_DISABLED") or ($state eq "STATE_ENABLED") )
{
}
elsif ( ($state eq "enable") or ($state eq "enabled") )
{
$state = "STATE_ENABLED";
}
elsif ( ($state eq "disable") or ($state eq "disabled") )
{
$state = "STATE_DISABLED";
}
else
{
&usage();
}
$memberEnabledState = {
member => $IPPortDefinition,
state => $state
};
my @memberEnabledStateA;
push @memberEnabledStateA, $memberEnabledState;
my @memberEnabledStateAofA;
push @memberEnabledStateAofA, [@memberEnabledStateA];
$soapResponse = $GlobalLBPoolMember->set_enabled_state(
SOAP::Data->name(pool_names => [$pool]),
SOAP::Data->name(states => [@memberEnabledStateAofA])
);
&checkResponse($soapResponse);
print "Pool Member State Updated\n";
print "${wideIP}:${pool}:${memberdef} -> ${state}\n";
}
if ( "" eq $sWideIP )
{
# get wideip list
&getWideIPList();
}
elsif ( "" eq $sPool )
{
# get wideip pool list
&getWideIPPoolList($sWideIP);
}
elsif ( "" eq $sPoolMember )
{
# get pool member list
&getWideIPPoolMemberList($sWideIP, $sPool);
}
elsif ( "" eq $sState )
{
# Get pool member state
&getWideIPPoolMemberState($sWideIP, $sPool, $sPoolMember);
}
else
{
# Toggle specified pool member
&setWideIPPoolMemberState($sWideIP, $sPool, $sPoolMember, $sState);
&getWideIPPoolMemberState($sWideIP, $sPool, $sPoolMember);
}
#----------------------------------------------------------------------------
# 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.0CodeCentral_194
Cirrostratus
Joined May 05, 2019
CodeCentral_194
Cirrostratus
Joined May 05, 2019
No CommentsBe the first to comment