The Python module hostlist.py knows how to expand and collect LLNL hostlists, as used by SLURM, pdsh, powerman, and genders, among other projects. An 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.
The 'hostlist' command is provided to expand/collect hostlists and perform set operations on them. Example:
% hostlist n[1-10] n[5-20] n[1-20] % hostlist --difference n[1-10] n[5-20] n[1-4] % hostlist --expand --intersection n[1-10] n[5-20] n5 n6 n7 n8 n9 n10If you have questions, suggestions, bug reports or patches, please send them to email@example.com.
You might want to take a look at nodes too.
The ClusterShell project provides functionality similar to hostlist, nodes and pdsh.
You can clone the external copy of the git repository using
git clone git://www.nsc.liu.se/~kent/python-hostlist.git
The master branch should contain the latest released version while the next branch may contain additional patches not yet released.