SOAP in unexpected “actually, quite easy” incident.

Wednesday, 09. 30. 2009  –  Category: sw, web

In web service access shuffle, today’s mission is introducing large N number of new backend pools, traffic rules and virtual servers to Zeus ZXTM balancers. No time for monkeying around in the web UI, better check out their well documented API. It uses SOAP, which I’ve never got busy with before – slightly apprehensive.

The reference documentation has examples in Perl and PHP which got me so far, but I’m most comfortable in Ruby now, and was happy to find ((I was going to paste example code, but this’ll do)) this pointer to using the soap4r library.

Chief bonus here is the wsdl2ruby.rb tool that’ll transform the WSDL data into Ruby objects with heirarchy, attribute accessors and everything else to make operating the API really comfortable. If your WSDL is a moving target during development it’ll even do this on the fly.

This meant getting the scripting done to configure the ZXTMs was pretty straightforward, without any faffing with the underlying access mech. Refreshing!

ipmitool for OSX

Tuesday, 09. 29. 2009  –  Category: sw

Nothing searchable in MacPorts, but found this.

Update: Turns out this build is missing isol mode serial-on-LAN for IPMI 1.5 hosts ((Dell R200 uses IPMI 1.5, Dell R410 uses 2.0. Both do SOL and remote power management well enough)), and building the ipmitool distribution wasn’t so hard after all. Packaging systems have made me lazy!

vxargs – visual parallel xargs

Friday, 09. 18. 2009  –  Category: sw

Flag for vxargs, an xargs-a-like that runs its multiple command invocations in parallel and provides a (ncurses) histogram of the progress. Its companion program pattern provides an easy way to generate IP / hostnames based on a logical sequence. Together the make a reasonble way to run a command on a bunch of hosts and collate the stdout, stderr and exit status of each.

As a same-same-but-different alternative to

  • pssh
  • That xterm multiplexer I can never remember the name of
  • screen(1) and Terminal.app‘s send-to-many option
  • Quick and dirty shell scripts iterating over a host list
  • Capistrano‘s shell (even on hosts that don’t run any other Ruby!)

… it’s proving pretty solid.

Example:


[admin@manage3 tmp]$ pattern.py foo[1-8] | vxargs -y -o ~/tmp ssh {} varnishadm -Tlocalhost:6082 ping

Terminal clears, and shows progress:


8/8:ssh -l root foo8 varnishadm -Tlocalhost:6082 ping
Done
Done
Done
Done
Done
( 10s)  6: foo7 
Done

and exits

exit code 0: 7 job(s)
exit code 1: 1 job(s)
total number of jobs: 8

Now you can inspect the output from each host, exit status and an overall failure list

[admin@manage3 tmp]$ cat ~/tmp/abnormal_list
foo5
[admin@manage3 tmp]$ cat ~/tmp/foo5.err 
Warning: Permanently added 'foo5,10.221.11.0' (RSA) to the list of known hosts.
connect(): Connection refused
An error occured in receiving status.

Via Trivium