Event Subscription Client
Problem this snippet solves:
This application illustrates how to use the Management::EventSubscription interface to create and manage subscriptions for system event notifications.
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-2005 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 Time::gmtime;
use MIME::Base64;
BEGIN { push (@INC, ".."); }
use iControlTypeCast;
#----------------------------------------------------------------------------
# Validate Arguments
#----------------------------------------------------------------------------
my $sHost = $ARGV[0];
my $sPort = $ARGV[1];
my $sUID = $ARGV[2];
my $sPWD = $ARGV[3];
my $sSubscription = $ARGV[4];
my $sArg1 = $ARGV[5];
my $sProtocol = "https";
# Script specific variables
if ( ("80" eq $sPort) or ("8080" eq $sPort) )
{
$sProtocol = "http";
}
if ( ($sHost eq "") or ($sPort eq "") or ($sUID eq "") or ($sPWD eq "") )
{
die ("Usage: EventSubscription.pl host port uid pwd [list|create|remove]\n");
}
#----------------------------------------------------------------------------
# Transport Information
#----------------------------------------------------------------------------
sub SOAP::Transport::HTTP::Client::get_basic_credentials
{
return "$sUID" => "$sPWD";
}
$EventSubscription = SOAP::Lite
-> uri('urn:iControl:Management/EventSubscription')
-> proxy("$sProtocol://$sHost:$sPort/iControl/iControlPortal.cgi");
eval { $EventSubscription->transport->http_request->header
(
'Authorization' =>
'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };
$EventNotification = SOAP::Lite
-> uri('urn:iControl:Management/EventNotification')
-> proxy("$sProtocol://$sHost:$sPort/iControl/iControlPortal.cgi");
eval { $EventNotification->transport->http_request->header
(
'Authorization' =>
'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };
if ( ($sSubscription eq "") or ($sSubscription eq "list") )
{
&getSubscriptionList();
}
elsif ( $sSubscription eq "create" )
{
&createSubscription();
}
elsif ( $sSubscription eq "remove" )
{
&removeSubscription($sArg1);
}
else
{
&getSubscription($sSubscription);
}
#----------------------------------------------------------------------------
# checkResponse
#----------------------------------------------------------------------------
sub checkResponse()
{
my ($soapResponse) = (@_);
if ( $soapResponse->fault )
{
print $soapResponse->faultcode, " ", $soapResponse->faultstring, "\n";
exit();
}
}
#----------------------------------------------------------------------------
# getSubscriptionList
#----------------------------------------------------------------------------
sub getSubscriptionList()
{
$soapResponse = $EventSubscription->get_list();
&checkResponse($soapResponse);
my @subscription_list = @{$soapResponse->result};
&getSubscription(@subscription_list);
}
#----------------------------------------------------------------------------
# getSubscription
#----------------------------------------------------------------------------
sub getSubscription()
{
my @subscription_id = @_;
$soapResponse = $EventSubscription->query
(
SOAP::Data->name(id_list => [@subscription_id])
);
&checkResponse($soapResponse);
@SubscriptionStatusList = @{$soapResponse->result};
@params = $soapResponse->paramsout;
@SubscriptionDefinitionList = @{@params[0]};
for $i ( 0 .. $#SubscriptionDefinitionList)
{
$SubscriptionDefinition = $SubscriptionDefinitionList[$i];
$id = $SubscriptionDefinition->{"id"};
$details = $SubscriptionDefinition->{"details"};
$name = $details->{"name"};
@event_type_list = @{$details->{"event_type_list"}};
$url = $details->{"url"};
$url_credentials = $details->{"url_credentials"};
$auth_mode = $url_credentials->{"auth_mode"};
$username = $url_credentials->{"username"};
$password = $url_credentials->{"password"};
$ttl = $details->{"ttl"};
$min_events_per_timeslice = $details->{"min_events_per_timeslice"};
$max_timeslice = $details->{"max_timeslice"};
$enabled_state = $details->{"enabled_state"};
print "Details for Subscription '$id'\n";
print " Name : $name\n";
print " url : $url\n";
print " credentials ($username:$password) type $auth_mode\n";
print " ttl : $ttl\n";
print " min_events_per_timeslice : $min_events_per_timeslice\n";
print " max_timeslice : $max_timeslice\n";
print " enabled_state : $enabled_state\n";
print " EVENTS\n";
for $j (0 .. $#event_type_list )
{
print " $event_type_list[$j]\n";
}
}
}
#----------------------------------------------------------------------------
# createSubscription
#----------------------------------------------------------------------------
sub createSubscription()
{
$name = "my subscription";
@event_type_list =
(
"EVENTTYPE_CREATE",
"EVENTTYPE_MODIFY",
"EVENTTYPE_DELETE",
"EVENTTYPE_DB_VARIABLE"
);
$url = "http://192.168.11.26";
$url_credentials =
{
auth_mode => "AUTHMODE_BASIC",
username => "admin",
password => "admin"
};
$ttl = -1;
$min_events_per_timeslice = 30;
$max_timeslice = 60;
$enabled_state = "STATE_ENABLED";
$sub_detail =
{
name => $name,
event_type_list => [@event_type_list],
url => $url,
url_credentials => $url_credentials,
ttl => $ttl,
min_events_per_timeslice => $min_events_per_timeslice,
max_timeslice => $max_timeslice,
enabled_state => $enabled_state
};
$soapResponse = $EventSubscription->create
(
SOAP::Data->name(sub_detail_list => [$sub_detail])
);
&checkResponse($soapResponse);
@SubscriptionStatusList = @{$soapResponse->result};
$i = 0;
foreach $SubscriptionStatus (@SubscriptionStatusList)
{
$code = $SubscriptionStatus->{"code"};
$data = $SubscriptionStatus->{"data"};
print "Creation of Subscription $i\n";
print " code: $code\n";
print " data: $data\n";
$i++;
}
}
#----------------------------------------------------------------------------
# removeSubscription
#----------------------------------------------------------------------------
sub removeSubscription()
{
my @subscription_id = @_;
$soapResponse = $EventSubscription->remove
(
SOAP::Data->name(id_list => [@subscription_id])
);
&checkResponse($soapResponse);
@SubscriptionStatusList = @{$soapResponse->result};
$i = 0;
foreach $SubscriptionStatus (@SubscriptionStatusList)
{
$id = @subscription_id[$i];
$code = $SubscriptionStatus->{"code"};
$data = $SubscriptionStatus->{"data"};
print "Removal of Subscription '$id'\n";
print " code: $code\n";
print " data: $data\n";
$i++;
}
}Published Mar 07, 2015
Version 1.0CodeCentral_194
Cirrostratus
Joined May 05, 2019
CodeCentral_194
Cirrostratus
Joined May 05, 2019
No CommentsBe the first to comment