diff --git a/wifi/uname_bornes.py b/wifi/uname_bornes.py new file mode 100755 index 00000000..f80f2784 --- /dev/null +++ b/wifi/uname_bornes.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# uname_bornes.py +# --------------- +# Copyright : (c) 2009, Jeremie Dimino +# Licence : BSD3 + +"""Script qui fait un uname sur toute les bornes à la fois. + +La sortie est la sortie de `uname -v` sur chaque borne.""" + +import sys, os, commands + +if len(sys.argv) > 1: + print """\ +usage: python uname_bornes.py +Récupère la liste des bornes et récupère sur chacune le uname""" + sys.exit(2) + +# Moyen rapide pour récupérer la liste des bornes: +names = [] +for line in commands.getoutput("host -l wifi.crans.org").splitlines(): + # Chaque ligne est de la forme: + # "truc.wifi.crans.org has address 138.231.148.42" + fields = line.split() + name = fields[0].split(".")[0] + ip = fields[3] + network = ip.rsplit(".", 1)[0] + # On ne prend que les machines du réseau 138.231.148.0/24, à par + # ragnarok: + if network == "138.231.148" and ip != "138.231.148.1": + names.append(name) + +# Maintenant on lance une connection ssh par borne, le tout en parallèle: +outputs = {} +for name in names: + (stdin, stdout, stderr) = os.popen3("ssh -T -x -o BatchMode=yes -o ConnectTimeout=5 %s.wifi exec uname -v" % name) + outputs[name] = stdout + stdin.close() + stderr.close() + +# On attend que tous les fils qu'on a lancé terminent, avec une petite +# animation si la sortie est un terminal: +count = 0 +total = len(names) +show_anim = sys.stderr.isatty() +message = "Réception des résultats: %d/%d" +if show_anim: sys.stderr.write(message % (count, total)) +while count < total: + os.wait() + count += 1 + if show_anim: sys.stderr.write("\r" + message % (count, total)) +if show_anim: sys.stderr.write("\n") + +# On lit tout les résultats: +results = {} +for name, output in outputs.iteritems(): + results[name] = output.read().strip() + output.close() + +results = results.items() +results.sort(key=lambda x: x[0]) + +for name, result in results: + if result: + print "%-15s %s" % (name + ":", result) + else: + print "%-15s failure" % (name + ":") diff --git a/wifi/uname_bornes.sh b/wifi/uname_bornes.sh deleted file mode 100755 index f3fcc809..00000000 --- a/wifi/uname_bornes.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# copyright 2009: Antoine Durand-Gasselin -# license: BSD 3-clauses - -if [[ $# -gt 1 ]]; then - cat <