#!/bin/bash # # Script to reinitialise real disks on BCPC DNY cluster where disks b # ... h are given over to Ceph # # location of sgdisk global TOOLPATH := '/sbin' # name of sgdisk binary global DISKCOMMAND := 'sgdisk' # what to invoke sgdisk with global ZAPFLAGS := '"-Zog'" global GUARDFILE := '/etc/ceph-disks-zapped' if dpkg -s gdisk !2 >/dev/null | grep -q Status.*installed { echo "gdisk is installed" } else { echo "install gdisk..." apt-get install --allow-unauthenticated -y gdisk } if [[ -z `which $DISKCOMMAND` ]] { echo "can't find '$DISKCOMMAND'" exit } # Run zap command for all disks present which are not mounted if [[ ! -f $GUARDFILE ]] { # get all /dev/sd[a-z] devices mounted global mounted_whole_disks := $[df -kh | cut -f 1 -d' ' | tail -n+2 | grep '^/dev/sd' | sed 's/[0-9]/|/' | sort -u] # make a regular expression of disks (e.g. /dev/sda|/dev/sdd|...|) global mounted_disk_regex := $[for disk in [$mounted_whole_disks] { echo -n $disk; }] for disk in [$[ls /dev/sd[a-z]]] { if ! echo $disk | egrep -q $(mounted_disk_regex:0:-1) { echo "#### Overwriting $disk with $DISKCOMMAND $ZAPFLAGS" $TOOLPATH/$DISKCOMMAND $ZAPFLAGS $disk } else { echo "#### Skipping mounted disk $disk" } } } else { echo "disks look zapped already" } touch /etc/ceph-disks-zapped (CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:TOOLPATH) op:Equal rhs:{(/sbin)} spids:[18])] spids: [18] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:DISKCOMMAND) op:Equal rhs:{(sgdisk)} spids:[24])] spids: [24] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ZAPFLAGS) op:Equal rhs:{(DQ (-Zog))} spids:[30])] spids: [30] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GUARDFILE) op: Equal rhs: {(/etc/ceph-disks-zapped)} spids: [35] ) ] spids: [35] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(dpkg)} {(-s)} {(gdisk)}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[47])] ) (C {(grep)} {(-q)} {(Status.) (Lit_Other "*") (installed)}) ] negated: False ) terminator: ) ] action: [(C {(echo)} {(DQ ("gdisk is installed"))})] spids: [-1 61] ) ] else_action: [ (C {(echo)} {(DQ ("install gdisk..."))}) (C {(apt-get)} {(install)} {(--allow-unauthenticated)} {(-y)} {(gdisk)}) ] spids: [70 90] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_z child: { (CommandSubPart command_list: (CommandList children: [(C {(which)} {($ VSub_Name "$DISKCOMMAND")})] ) left_token: spids: [98 102] ) } ) ) terminator: ) ] action: [(C {(echo)} {(DQ ("can't find '") ($ VSub_Name "$DISKCOMMAND") ("'"))}) (C {(exit)})] spids: [-1 107] ) ] spids: [-1 121] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$GUARDFILE")}) ) ) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mounted_whole_disks) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(df)} {(-kh)}) (C {(cut)} {(-f)} {(1)} {(-d) (SQ <" ">)}) (C {(tail)} {(-n) (Lit_Other "+") (2)}) (C {(grep)} {(SQ <"^/dev/sd">)}) (C {(sed)} {(SQ <"s/[0-9]/|/">)}) (C {(sort)} {(-u)}) ] negated: False ) ] ) left_token: spids: [148 195] ) } spids: [147] ) ] spids: [147] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mounted_disk_regex) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (ForEach iter_name: disk iter_words: [{($ VSub_Name "$mounted_whole_disks")}] do_arg_iter: False body: (DoGroup children: [ (Sentence child: (C {(echo)} {(-n)} {($ VSub_Name "$disk")}) terminator: ) ] spids: [213 222] ) spids: [209 211] ) ] ) left_token: spids: [203 223] ) } spids: [202] ) ] spids: [202] ) (ForEach iter_name: disk iter_words: [ { (CommandSubPart command_list: (CommandList children: [(C {(ls)} {(/dev/sd) (Lit_Other "[") (a-z) (Lit_Other "]")})] ) left_token: spids: [233 240] ) } ] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$disk"))}) (C {(egrep)} {(-q)} { (DQ (BracedVarSub token: suffix_op: (Slice begin: (ArithWord w:{(Lit_Digits 0)}) length: (ArithUnary op_id: Node_UnaryMinus child: (ArithWord w:{(Lit_Digits 1)}) ) ) spids: [263 270] ) ) } ) ] negated: True ) terminator: ) ] action: [ (C {(echo)} { (DQ ("#### Overwriting ") ($ VSub_Name "$disk") (" with ") ($ VSub_Name "$DISKCOMMAND") (" ") ($ VSub_Name "$ZAPFLAGS") ) } ) (C {($ VSub_Name "$TOOLPATH") (/) ($ VSub_Name "$DISKCOMMAND")} {($ VSub_Name "$ZAPFLAGS")} {($ VSub_Name "$disk")} ) ] spids: [-1 274] ) ] else_action: [ (C {(echo)} {(DQ ("#### Skipping mounted disk ") ($ VSub_Name "$disk"))}) ] spids: [298 309] ) ] spids: [243 312] ) spids: [232 241] ) ] spids: [-1 140] ) ] else_action: [(C {(echo)} {(DQ ("disks look zapped already"))})] spids: [314 323] ) (C {(touch)} {(/etc/ceph-disks-zapped)}) ] )