The Python module hostlist.py knows how to expand and collect LLNL
hostlists, as used by SLURM (https://computing.llnl.gov/linux/slurm/),
pdsh (https://computing.llnl.gov/linux/pdsh.html),
powerman (https://computing.llnl.gov/linux/powerman.html) and
genders (https://computing.llnl.gov/linux/genders.html), among other projects.

Example:

  % python
  Python 2.5.1 (r251:54863, Jul 10 2008, 17:24:48) 
  [GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  >>> import hostlist
  >>> hosts = hostlist.expand_hostlist("n[1-10,17]")
  >>> hosts
  ['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7', 'n8', 'n9', 'n10', 'n17']
  >>> hostlist.collect_hostlist(hosts)
  'n[1-10,17]'
  >>> hostlist.collect_hostlist(["x1y1","x2y2", "x1y2", "x2y1"])
  'x[1-2]y[1-2]'

Bad hostlists or hostnames will result in the hostlist.BadHostlist
exception being raised.

If you invoke hostlist.py from the command line, it doubles as a utility
for doing set operations on hostlists. Example:

  % ./hostlist.py n[1-10] n[5-20]
  n[1-20]
  % ./hostlist.py --difference n[1-10] n[5-20]
  n[1-4]
  % ./hostlist.py --expand --intersection n[1-10] n[5-20] 
  n5
  n6
  n7
  n8
  n9
  n10

Install by running

  python setup.py build   (as yourself)
  python setup.py install (as root) 

or just copy the hostlist.py file to an appropriate place.

If you have questions, suggestions, bug reports or patches, please send them
to kent@nsc.liu.se.
