trop de shell tu le shell
darcs-hash:20090616090917-af139-47535d11e387ce5b8119ab54e786f4b7dc0d0c87.gz
This commit is contained in:
parent
6955bd08f3
commit
e4ae09c3e4
2 changed files with 69 additions and 23 deletions
69
wifi/uname_bornes.py
Executable file
69
wifi/uname_bornes.py
Executable file
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# uname_bornes.py
|
||||
# ---------------
|
||||
# Copyright : (c) 2009, Jeremie Dimino <jeremie@dimino.org>
|
||||
# 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 + ":")
|
Loading…
Add table
Add a link
Reference in a new issue