(List (Com {[LIT_CHARS set]} {[LIT_CHARS -e]}) (If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub 1]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Usage : "][VarSub 0][LIT_CHARS " environment (hostname)"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('ENVIRONMENT', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('EXACTHOST', {[VarSub 2]})]) (If (DBracket {B! {B1 UNARY_FILE_f {[DQ [LIT_CHARS environments/][VarSub ENVIRONMENT][LIT_CHARS .json]]}}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Error: Couldn't find '"][VarSub ENVIRONMENT][LIT_CHARS ".json'. Did you forget to pass the environment as first param?"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[{[LIT_CHARS -A]}, {[LIT_CHARS FQDNS]}] bindings=[]) (While (Com {[LIT_CHARS read]} {[LIT_CHARS HOST]} {[LIT_CHARS MACADDR]} {[LIT_CHARS IPADDR]} {[LIT_CHARS ILOIPADDR]} {[LIT_CHARS DOMAIN]} {[LIT_CHARS ROLE]}) (If (DBracket {B? LOGICAL_BINARY_OR {B1 UNARY_STRING_z {[DQ [VarSub EXACTHOST]]}} {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub EXACTHOST]]} {[LIT_CHARS all]}} {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub EXACTHOST]]} {[DQ [VarSub HOST]]}} {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub EXACTHOST]]} {[DQ [VarSub IPADDR]]}} {B? LOGICAL_BINARY_OR {B? LOGICAL_BINARY_AND {B2 BINARY_STRING_EQUAL {[DQ [VarSub EXACTHOST]]} {[DQ [LIT_CHARS heads]]}} {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS head]]}}} {B? LOGICAL_BINARY_AND {B2 BINARY_STRING_EQUAL {[DQ [VarSub EXACTHOST]]} {[DQ [LIT_CHARS workers]]}} {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS work]]}}}}}}}}) (List (= scope= flags=0 words=[] bindings=[('IDX', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub IPADDR]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[DQ [LIT_CHARS bootstrap]]}}) (Com {[LIT_CHARS continue]}) ) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[LIT_CHARS head]}}) (List (= scope= flags=0 words=[] bindings=[('HEADS', {[DQ [VarSub HEADS][LIT_CHARS " "][VarSub IPADDR]]})]) (Com {[LIT_CHARS FQDNS] [LIT_OTHER "["] [DQ [VarSub IDX]] [LIT_OTHER "]"] [LIT_OTHER "="] [DQ [VarSub HOST][LIT_CHARS .][VarSub DOMAIN]]}) ) (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub ROLE]]} {[LIT_CHARS work]}}) (List (= scope= flags=0 words=[] bindings=[('WORKERS', {[DQ [VarSub WORKERS][LIT_CHARS " "][VarSub IPADDR]]})]) (Com {[LIT_CHARS FQDNS] [LIT_OTHER "["] [DQ [VarSub IDX]] [LIT_OTHER "]"] [LIT_OTHER "="] [DQ [VarSub HOST][LIT_CHARS .][VarSub DOMAIN]]}) ) ) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "heads : "][VarSub HEADS]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "workers : "][VarSub WORKERS]]}) (= scope= flags=0 words=[] bindings=[('PASSWD', {[ComSub (Pipeline (Com {[LIT_CHARS knife]} {[LIT_CHARS data]} {[LIT_CHARS bag]} {[LIT_CHARS show]} {[LIT_CHARS configs]} {[VarSub ENVIRONMENT]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS "cobbler-root-password:"]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (For HEAD [{[VarSub HEADS]}]) (List (= scope= flags=0 words=[] bindings=[('MATCH', {[VarSub HEAD]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "About to bootstrap head node "][VarSub HEAD][LIT_CHARS ...]]}) (Com {[LIT_CHARS ./chefit.sh]} {[VarSub HEAD]} {[VarSub ENVIRONMENT]}) (Pipeline (Com {[LIT_CHARS echo]} {[VarSub PASSWD]}) (Com {[LIT_CHARS sudo]} {[LIT_CHARS knife]} {[LIT_CHARS bootstrap]} {[LIT_CHARS -E]} {[VarSub ENVIRONMENT]} {[VarSub HEAD]} {[LIT_CHARS -x]} {[LIT_CHARS ubuntu]} {[LIT_CHARS -P]} {[VarSub PASSWD]} {[LIT_CHARS --sudo]}) ) (= scope= flags=0 words=[] bindings=[('IDX', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub HEAD]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('FQDN', {[VarSub FQDNS bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub IDX]]}})]})]) (Com {[LIT_CHARS knife]} {[LIT_CHARS actor]} {[LIT_CHARS map]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS group]} {[LIT_CHARS add]} {[LIT_CHARS actor]} {[LIT_CHARS admins]} {[VarSub FQDN]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS node]} {[LIT_CHARS run_list]} {[LIT_CHARS add]} {[VarSub FQDN]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('SSHCMD', {[DQ [LIT_CHARS "./nodessh.sh "][VarSub ENVIRONMENT][LIT_CHARS " "][VarSub HEAD]]})]) (Com {[VarSub SSHCMD]} {[DQ [LIT_CHARS /home/ubuntu/finish-head.sh]]} {[LIT_CHARS sudo]}) ) ) (For WORKER [{[VarSub WORKERS]}]) (List (= scope= flags=0 words=[] bindings=[('MATCH', {[VarSub WORKER]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "About to bootstrap worker worker "][VarSub WORKER][LIT_CHARS ...]]}) (Com {[LIT_CHARS ./chefit.sh]} {[VarSub WORKER]} {[VarSub ENVIRONMENT]}) (Pipeline (Com {[LIT_CHARS echo]} {[VarSub PASSWD]}) (Com {[LIT_CHARS sudo]} {[LIT_CHARS knife]} {[LIT_CHARS bootstrap]} {[LIT_CHARS -E]} {[VarSub ENVIRONMENT]} {[VarSub WORKER]} {[LIT_CHARS -x]} {[LIT_CHARS ubuntu]} {[LIT_CHARS -P]} {[VarSub PASSWD]} {[LIT_CHARS --sudo]}) ) (= scope= flags=0 words=[] bindings=[('IDX', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub WORKER]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('FQDN', {[VarSub FQDNS bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub IDX]]}})]})]) (Com {[LIT_CHARS knife]} {[LIT_CHARS actor]} {[LIT_CHARS map]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS group]} {[LIT_CHARS add]} {[LIT_CHARS actor]} {[LIT_CHARS admins]} {[VarSub FQDN]}) (Com {[LIT_CHARS knife]} {[LIT_CHARS node]} {[LIT_CHARS run_list]} {[LIT_CHARS add]} {[VarSub FQDN]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('SSHCMD', {[DQ [LIT_CHARS "./nodessh.sh "][VarSub ENVIRONMENT][LIT_CHARS " "][VarSub WORKER]]})]) (Com {[VarSub SSHCMD]} {[DQ [LIT_CHARS /home/ubuntu/finish-worker.sh]]} {[LIT_CHARS sudo]}) ) ) (If (DBracket {B1 UNARY_STRING_z {[DQ [VarSub MATCH]]}}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Warning: No nodes found"]]}) ) )