Net Soap Monitor
Problem this snippet solves:
This example perl scripts shows how to write a monitor for performing health checks against a .NET SOAP service.
The inbuilt SOAP check within the Big-IP LTM v9.x does not set "SOAPAction" in the HTTP header request. The check against the service then fails regardless.
HTTP Header Sample:
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.42) Content-Type: text/xml; charset=utf-8 SOAPAction: "https://www.website.com.au/HealthCheck"
This is an example only, and the script will need to be modified to suit your needs.
Code :
#!/usr/bin/perl -w
# Big-IP SOAP for .NET Monitor - 08/15/2007 - Evan Taylor v1.0 - evan.taylor@dumbcomputers.net
#
# This script allows you to specify SOAPAction in the HTTP header which .NET requires
# for processing SOAP requests.
#
# HTTP Header Sample:
#
# User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.42)
# Content-Type: text/xml; charset=utf-8
# SOAPAction: "https://www.website.com.au/HealthCheck"
# ...
#
# This SOAP monitor is based off information gathered from the following sources;
#
# Interoperability demo: consume a .NET web service with Perl.
# http://users.skynet.be/pascalbotte/rcx-ws-doc/perldotnet.htm
#
# SOAP::Lite interoperability with .NET Web Services
# http://devfun.ncdesign.com/archives/000096.html
#
use strict;
use SOAP::Lite;
require 5.005;
# Derive and untaint programname.
my $programname = '/' . $0;
$programname =~ m/^.*\/([^\/]+)$/;
$programname = $1;
if ($programname eq '') {
die "Bad data in program name\n"
}
# Process ID and file where it's to be stored. The format
# is significant.
my $node = $ENV{"NODE_IP"};
my $port = $ENV{"NODE_PORT"};
my $pidfile = "/var/run/$programname.$node..$port.pid";
my $pid = "$$";
# Maintenence. Clean up any existing EAV.
if (-f $pidfile ) {
open(PID, "<$pidfile");
my $pid = ;
close(PID);
if ( $pid ) {
chomp $pid; $pid =~ m/^(\d+)$/; $pid = $1;
if ( $pid ) {
kill 9, $pid;
}
}
unlink($pidfile);
}
# Create a new maintenence file.
open(PID, ">$pidfile");
print PID $pid, "\n";
close(PID);
# Strip preceding IPv6 characters for v9.x
my $ip = $ENV{"NODE_IP"};
$ip =~ s/::ffff://;
my $node_ip = $ip;
# Set some variables ...
# Variables set in EAV on the BIG-IP are $bigURI, $bigAction, and $bigProxy
# We don't currently use these ....
#my $bigProxy = $ENV{"bigProxy"};
#my $bigURI = $ENV{"bigURI"};
#my $bigAction = $ENV{"bigAction"};
# Setup the SOAP side of things ...
my $proxy = 'http://'.$node_ip.'/HealCheck.asmx';
my $soap = SOAP::Lite
-> uri('https://www.website.com.au/')
-> on_action( sub { 'https://www.website.com.au/HealthCheck' } )
-> proxy( $proxy );
my $method = SOAP::Data->name('HealthCheck')
->attr({xmlns => 'https://wwww.website.com.au'});
my $params = ( SOAP::Data->name("accessKey" => 1234));
if (($soap->call($method => $params)->result) eq "true")
{
unlink($pidfile);
print "up\n";
exit(0);
}
else{
unlink($pidfile);
exit(0);
} Published Mar 12, 2015
Version 1.0Ev-_28244
Nimbostratus
Joined August 08, 2007
Ev-_28244
Nimbostratus
Joined August 08, 2007
No CommentsBe the first to comment