#!/bin/bash # Exit immediately if anything goes wrong, instead of making things worse. set -e # destroy existing ansible BCPC VMs global candidate_list := '"ansible-bcpc-bootstrap ansible-bcpc-vm1 ansible-bcpc-vm2 ansible-bcpc-vm3 ansible-bcpc-vm4 ansible-bcpc-vm5 ansible-bcpc-vm6'" global existing_vms := '( '$(VBoxManage list vms | awk -v vmpattern="${candidate_list// /|}" '$1 ~ vmpattern {gsub(/"/,"",$1);print $1}') ) for VM in [$(existing_vms[@])] { VBoxManage controlvm $VM poweroff && true VBoxManage unregistervm $VM --delete } (CommandList children: [ (C {(set)} {(-e)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:candidate_list) op: Equal rhs: { (DQ ( "ansible-bcpc-bootstrap ansible-bcpc-vm1 ansible-bcpc-vm2 ansible-bcpc-vm3 ansible-bcpc-vm4 ansible-bcpc-vm5 ansible-bcpc-vm6" ) ) } spids: [14] ) ] spids: [14] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:existing_vms) op: Equal rhs: { (ArrayLiteralPart words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(VBoxManage)} {(list)} {(vms)}) (C {(awk)} {(-v)} {(Lit_VarLike "vmpattern=") (DQ (BracedVarSub token: suffix_op: (PatSub pat: {(" ")} replace: {("|")} do_all: True do_prefix: False do_suffix: False ) spids: [37 44] ) ) } {(SQ <"$1 ~ vmpattern {gsub(/\"/,\"\",$1);print $1}">)} ) ] negated: False ) ] ) left_token: spids: [22 50] ) } ] ) } spids: [19] ) ] spids: [19] ) (ForEach iter_name: VM iter_words: [ { (BracedVarSub token: bracket_op: (WholeArray op_id:Lit_At) spids: [60 65] ) } ] do_arg_iter: False body: (DoGroup children: [ (AndOr children: [ (C {(VBoxManage)} {(controlvm)} {($ VSub_Name "$VM")} {(poweroff)}) (C {(true)}) ] op_id: Op_DAmp ) (C {(VBoxManage)} {(unregistervm)} {($ VSub_Name "$VM")} {(--delete)}) ] spids: [68 92] ) spids: [59 66] ) ] )