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
Cirrus
Joined May 05, 2019
CodeCentral_194
Cirrus
Joined May 05, 2019
No CommentsBe the first to comment