Jul 28
Voici un minuscule exemple d’utilisation de fabric: Vérifier l’état des disques de plusieurs machines en RAID1.
On importe tout d’abord les .py nécessaires, et on s’assure qu’on utilise un shell compatible sur tous les systèmes :
from fabric.api import * from fabric.operations import * env.shell = "/bin/sh -c"
On définit un rôle fabric qu’on appelera raid1 :
env.roledefs = {
'raid1': ['tatooine', 'coruscant', 'mustafar'],
}
Puis on écrit notre fonction, brutale, mais fonctionnelle:
def raidcheck():
'''Checks raid status'''
opsys = run("uname -s")
if opsys == "Linux":
run("cat /proc/mdstat")
if opsys == "NetBSD":
sudo("for raid in `/sbin/mount|grep -oE raid[0-9]|sort -u`;do /sbin/raidctl -s $raid;done")
J’obtiens ainsi l’information souhaitée en executant :
$ fab -R raid1 raidcheck
qui affichera le résultat suivant :
[tatooine] Executing task 'raidcheck' [tatooine] run: uname -s [tatooine] out: Linux [tatooine] run: cat /proc/mdstat [tatooine] out: Personalities : [raid1] [tatooine] out: md1 : active raid1 sda5[2] sdb5[1] [tatooine] out: 955777616 blocks super 1.2 [2/2] [UU] [tatooine] out: [tatooine] out: md0 : active raid1 sda1[2] sdb1[1] [tatooine] out: 20979763 blocks super 1.2 [2/2] [UU] [tatooine] out: [tatooine] out: unused devices:[coruscant] Executing task 'raidcheck' [coruscant] run: uname -s [coruscant] out: NetBSD [coruscant] sudo: for raid in `/sbin/mount|grep -oE raid[0-9]|sort -u`;do /sbin/raidctl -s $raid;done [coruscant] out: Components: [coruscant] out: /dev/wd0a: optimal [coruscant] out: /dev/wd2a: optimal [coruscant] out: No spares. [coruscant] out: Component label for /dev/wd0a: [coruscant] out: Row: 0, Column: 0, Num Rows: 1, Num Columns: 2 [coruscant] out: Version: 2, Serial Number: 20090619, Mod Counter: 438 [coruscant] out: Clean: No, Status: 0 [coruscant] out: sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1 [coruscant] out: Queue size: 100, blocksize: 512, numBlocks: 976772992 [coruscant] out: RAID Level: 1 [coruscant] out: Autoconfig: Yes [coruscant] out: Root partition: Yes [coruscant] out: Last configured as: raid0 [coruscant] out: Component label for /dev/wd2a: [coruscant] out: Row: 0, Column: 1, Num Rows: 1, Num Columns: 2 [coruscant] out: Version: 2, Serial Number: 20090619, Mod Counter: 438 [coruscant] out: Clean: No, Status: 0 [coruscant] out: sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1 [coruscant] out: Queue size: 100, blocksize: 512, numBlocks: 976772992 [coruscant] out: RAID Level: 1 [coruscant] out: Autoconfig: Yes [coruscant] out: Root partition: Yes [coruscant] out: Last configured as: raid0 [coruscant] out: Parity status: clean [coruscant] out: Reconstruction is 100% complete. [coruscant] out: Parity Re-write is 100% complete. [coruscant] out: Copyback is 100% complete. [coruscant] out: Components: [coruscant] out: /dev/wd1a: optimal [coruscant] out: /dev/wd3a: optimal [coruscant] out: No spares. [coruscant] out: Component label for /dev/wd1a: [coruscant] out: Row: 0, Column: 0, Num Rows: 1, Num Columns: 2 [coruscant] out: Version: 2, Serial Number: -1354219479, Mod Counter: 41 [coruscant] out: Clean: No, Status: 0 [coruscant] out: sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1 [coruscant] out: Queue size: 100, blocksize: 512, numBlocks: 3907028992 [coruscant] out: RAID Level: 1 [coruscant] out: Autoconfig: Yes [coruscant] out: Root partition: No [coruscant] out: Last configured as: raid1 [coruscant] out: Component label for /dev/wd3a: [coruscant] out: Row: 0, Column: 1, Num Rows: 1, Num Columns: 2 [coruscant] out: Version: 2, Serial Number: -1354219479, Mod Counter: 41 [coruscant] out: Clean: No, Status: 0 [coruscant] out: sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1 [coruscant] out: Queue size: 100, blocksize: 512, numBlocks: 3907028992 [coruscant] out: RAID Level: 1 [coruscant] out: Autoconfig: Yes [coruscant] out: Root partition: No [coruscant] out: Last configured as: raid1 [coruscant] out: Parity status: clean [coruscant] out: Reconstruction is 100% complete. [coruscant] out: Parity Re-write is 100% complete. [coruscant] out: Copyback is 100% complete. [mustafar] Executing task 'raidcheck' [mustafar] run: uname -s [mustafar] out: Linux [mustafar] run: cat /proc/mdstat [mustafar] out: Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [mustafar] out: md3 : active raid1 sda3[0] sdb3[1] [mustafar] out: 465855936 blocks [2/2] [UU] [mustafar] out: [mustafar] out: md1 : active raid1 sda1[0] sdb1[1] [mustafar] out: 20479936 blocks [2/2] [UU] [mustafar] out: [mustafar] out: unused devices: Done. Disconnecting from tatooine... done. Disconnecting from mustafar... done. Disconnecting from coruscant... done.
Tout va bien :)
Twitter
GooglePlus
GitHub
August 16th, 2012 at 10:37 pm
pour que ça aille plus vite, met un -P. Ça mélange juste un peu les outputs :)