Tuesday, September 4, 2012

automating netscaler with soap


I recently had to script some citrix netscaler stuff (around using the running config to create graph trees in cacti and collectd with ecostats front end)

to use the soap interface you have to make a soap request to login, then reuse the returned cookie to authenticate the other requests like this.

I use this wget to login

wget   -O- --cookies=on --keep-session-cookies  --save-cookies cookies.txt  --post-file=login.xml --header="Content-Type: application/soap+xml"  http://yourNSip/soap  

and this to get the details of vservers etc.

  wget  -O- --load-cookies cookies.txt  --post-file=getlbserver.xml --header="Content-Type: application/soap+xml"  http://yourNSip/soap  

where the post-files contain the soap requests

you can pipe into xmllint to tidy up the output if you want

 | xmllint --format --encode utf-8 –

cat login.xml

<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:NSConfig" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:header>
   <soapenv:body>
      <urn:login soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
         <username xsi:type="xsd:string">username</username>
         <password xsi:type="xsd:string">thisisnotmypassword</password>
      </urn:login>
   </soapenv:body>
</soapenv:header></soapenv:envelope>

cat getlbserver.xml

<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:NSConfig" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:header>
   <soapenv:body>
      <urn:getlbvserver soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
      </urn:getlbvserver>
   </soapenv:body>
</soapenv:header></soapenv:envelope>

reference data  http://support.citrix.com/article/CTX117503
and http://support.citrix.com/proddocs/topic/netscaler-api-map-93/ns-api-query-config-con.html