Forum Discussion

Michel_van_der_'s avatar
Michel_van_der_
Icon for Nimbostratus rankNimbostratus
Oct 31, 2005

Follow up questions about Networking/VLAN

I wrote this little perl script:

!/usr/bin/perl
use strict;
use SOAP::Lite;
require "dumpvar.pl";
my ($u, $p, $ip, $soap, $soapResponse, $vlans, $vlan, $memberEntry);
sub SOAP::Transport::HTTP::Client::get_basic_credentials {
    return $u => $p;
}
$u = $ARGV[0];
$p = $ARGV[1];
$ip = $ARGV[2];
$soap = SOAP::Lite
  ->uri("urn:iControl:Networking/VLAN")
  ->proxy("https://$ip/iControl/iControlPortal.cgi");
$soapResponse = $soap->get_list();
if ( $soapResponse->fault ) {
    print "Can't get VLAN list: " .
      $soapResponse->faultcode . " " .
      $soapResponse->faultstring;
    exit 1;
}
$vlans = $soapResponse->result;
for $vlan ( @$vlans ) {
    print "$vlan:\n";
    $soapResponse = $soap->get_member(
        SOAP::Data->name('vlans' => [ $vlan ] ),
    );
    if ( $soapResponse->fault ) {
        print "Can't get VLAN members: " .
          $soapResponse->faultcode . " " .
          $soapResponse->faultstring;
        exit 1;
    }
    $memberEntry = $soapResponse->result();
    main::dumpValue($memberEntry);
};
1;

However, SOAP::Lite is not happy with the second call and starts spewing:

Unrecognized type '{urn:iControl}Networking.MemberType'

xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:A="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:s="http://www.w3.org/2001/XMLSchema-instance"

xmlns:y="http://www.w3.org/2001/XMLSchema"

xmlns:iControl="urn:iControl"

E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

xmlns:m="urn:iControl:Networking/VLAN">

s:type="A:Array"

A:arrayType="iControl:Networking.VLAN.MemberEntry[][1]">

A:arrayType="iControl:Networking.VLAN.MemberEntry[1]">

s:type="iControl:Networking.VLAN.MemberEntry">

s:type="y:string">1.1

s:type="iControl:Networking.MemberType">MEMBER_INTERFACE

s:type="iControl:Networking.MemberTagType">MEMBER_UNTAGGED

at ./testVLAN line 28

Any suggestions as to what is wrong here? I truned on tracing on the F5, all seems OK:


[root@kopsildb003:Standby] config  tail /var/log/debug 
Oct 31 14:11:45 kopsildb003 iControlPortal.cgi[24677]: Networking:-------------------------------------
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: icontrol_portal:ernalÉ
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:+++++++++++++++++++++++++++++++++++++
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:VLAN::get_list ( ) called by user "admin"
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:-------------------------------------
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: icontrol_portal:external
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:+++++++++++++++++++++++++++++++++++++
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:VLAN::get_member ( ) called by user "admin"
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:    [0] VLAN: external
Oct 31 14:12:52 kopsildb003 iControlPortal.cgi[24677]: Networking:-------------------------------------
[root@kopsildb003:Standby] config  

Michel

1 Reply

  • Since we moved to custom enum types in 9.0, you'll need to override the SOAP::Deserializer::typecast() routine.

     

     

    All of the SDK samples reference iControlTypeCast.pm which is included in the "sdk/samples/soap/perl/soaplite" directory in the SDK. This module has all of the enum types included with a override method to allow all of them.

     

     

    Either include this in your project, or copy the relevant elements that need to be typecasted.

     

     

    -Joe