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 + ":")
|
|
@ -1,23 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# copyright 2009: Antoine Durand-Gasselin <adg@crans.org>
|
|
||||||
# license: BSD 3-clauses
|
|
||||||
|
|
||||||
if [[ $# -gt 1 ]]; then
|
|
||||||
cat <<EOF
|
|
||||||
usage: sh uptime_bornes.sh
|
|
||||||
Récupère la liste des bornes et récupère sur chacune le uname
|
|
||||||
EOF
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
pids=""
|
|
||||||
(for borne in $(host -l wifi.crans.org | grep 138.231.148 | \
|
|
||||||
grep -v '138.231.148.1$' | awk '{print $1}');
|
|
||||||
do
|
|
||||||
ssh ${borne/.crans.org/} -o Connecttimeout=1 "printf '%-15s%s\n' ${borne/.wifi.crans.org/}1 \"\`uname -v\`\"" & pids="$pids $!"
|
|
||||||
sleep 0.001 # pour que les bornes sortent dans l'ordre
|
|
||||||
done
|
|
||||||
|
|
||||||
for pid in $pids; do
|
|
||||||
wait $pid
|
|
||||||
done) | sort
|
|
Loading…
Add table
Add a link
Reference in a new issue