(command.CommandList children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_Number '$1'))}) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <'Usage : '> ($ Id.VSub_Number '$0') <" 'environment'">)}) (C {<echo>} {(DQ <'did nothing...'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [24 37] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ENVIRONMENT) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [60] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id:Id.BoolUnary_f child:{(DQ <cluster.txt>)}) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ < "I am a bear of very little brain so I couldn't find the cluster.txt file. No clusters were harmed in the making of this error message" > ) } ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [65 80] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_f child: {(DQ <environments/> (${ Id.VSub_Name ENVIRONMENT) <.json>)} ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ < "You are scaring me now, I don't see the environment file you asked for. Not doing nothing" > ) } ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [94 113] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (C {<read>} {<HOSTNAME>} {<MACADDR>} {<IPADDR>} {<ILOIPADDR>} {<DOMAIN>} {<ROLE>}) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$ROLE'))} right: {(DQ <bootstrap>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BOOTSTRAP_NODE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$HOSTNAME'))} spids: [167] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BCPC_HYPERVISOR_DOMAIN) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$DOMAIN'))} spids: [173] ) ] ) (C {<echo>} { (DQ <'Ignoring '> ($ Id.VSub_DollarName '$HOSTNAME') <' - bootstrap node to be retained'> ) } ) ] spids: [147 164] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$ROLE'))} right: {(DQ <work>)} ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$ROLE'))} right: {(DQ <head>)} ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CLUSTER_MEMBERS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name CLUSTER_MEMBERS) <' '> (${ Id.VSub_Name HOSTNAME))} spids: [240] ) ] ) ] spids: [188 217] ) ] else_action: [ (C {<echo>} {(DQ <'Ignoring '> ($ Id.VSub_DollarName '$HOSTNAME') <' - unknown role'>)}) ] ) ] ) redirects: [(redir.Redir op:<Id.Redir_Less '<'> fd:-1 arg_word:{<cluster.txt>})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$BOOTSTRAP_NODE'))} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <'No bootstrap node found, unsafe to continue. Are you nuts?'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [272 285] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BOOT_FQDN) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BOOTSTRAP_NODE) <.> (${ Id.VSub_Name BCPC_HYPERVISOR_DOMAIN))} spids: [309] ) ] ) (C {<echo>} {(DQ <'BOOT FQDN = '> (${ Id.VSub_Name BOOT_FQDN))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MATCH) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<knife>} {<node>} {<list>}) (C {<grep>} {($ Id.VSub_DollarName '$BOOT_FQDN')}) ] negated: F ) ] ) ) } spids: [329] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$MATCH'))} ) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ < 'Plausible level of consistency present : it looks to me like I should delete all nodes and clients except ' > ($ Id.VSub_DollarName '$MATCH') <...> ) } ) ] spids: [346 361] ) ] else_action: [ (C {<echo>} { (DQ ($ Id.VSub_DollarName '$BOOT_FQDN') <" not found in data bag, unsafe to continue. Can't fool me that way!"> ) } ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] ) (C {<echo>} {(DQ <'Making safety copy of '> (${ Id.VSub_Name ENVIRONMENT) <' configs...'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DATABAG_BACKUP) op: assign_op.Equal rhs: {(DQ <'~/'> ($ Id.VSub_DollarName '$ENVIRONMENT') <.databag.> ($ Id.VSub_Dollar '$$'))} spids: [397] ) ] ) (command.Simple words: [{<knife>} {<data>} {<bag>} {<show>} {<configs>} {(DQ (${ Id.VSub_Name ENVIRONMENT))}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ (${ Id.VSub_Name DATABAG_BACKUP))} ) ] ) (C {<echo>} { (DQ <'Databag configs for '> (${ Id.VSub_Name ENVIRONMENT) <' dumped to '> (${ Id.VSub_Name DATABAG_BACKUP) ) } ) (C {<echo>} {(DQ <'Deleting data bag configs...'>)}) (C {<knife>} {<data>} {<bag>} {<delete>} {<--yes>} {<configs>}) (C {<echo>} {(DQ <'Removing clients and nodes...'>)}) (command.ForEach iter_name: CLIENT iter_words: [{($ Id.VSub_DollarName '$CLUSTER_MEMBERS')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<knife>} {<client>} {<delete>} {<--yes>} {(DQ (${ Id.VSub_Name CLIENT) <.> (${ Id.VSub_Name BCPC_HYPERVISOR_DOMAIN))} ) (C {<knife>} {<node>} {<delete>} {<--yes>} {(DQ (${ Id.VSub_Name CLIENT) <.> (${ Id.VSub_Name BCPC_HYPERVISOR_DOMAIN))} ) ] ) ) (C {<echo>} {(DQ <'reload knife data...'>)}) (C {<knife>} {<role>} {<from>} {<file>} {<roles/> <Id.Lit_Star '*'> <.json>}) (C {<knife>} {<cookbook>} {<upload>} {<-a>} {<-o>} {<cookbooks>}) (C {<knife>} {<environment>} {<from>} {<file>} {(DQ <environments/> (${ Id.VSub_Name ENVIRONMENT) <.json>)} ) (C {<echo>} {(DQ <'Removing cobbler systems...'>)}) (command.ForEach iter_name: CLIENT iter_words: [{(DQ (${ Id.VSub_Name CLUSTER_MEMBERS))}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SOMETHING) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name CLIENT))} spids: [589] ) ] ) (C {<sudo>} {<cobbler>} {<system>} {<remove>} {<--name> <Id.Lit_Equals '='> (${ Id.VSub_Name CLIENT)} ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$SOMETHING'))} ) ) ) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {(DQ <'Sync cobbler...'>)}) (C {<sudo>} {<cobbler>} {<sync>})] spids: [614 629] ) ] ) (C {<echo>} {(DQ <'Removing cobbler profile...'>)}) (C {<sudo>} {<cobbler>} {<profile>} {<remove>} {<--name> <Id.Lit_Equals '='> <bcpc_host>}) (C {<sudo>} {<cobbler>} {<sync>}) (C {<echo>} {(DQ <'Hiding stale kickstart in case Chef goes all wibbly...'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KICKSTART_FILE) op: assign_op.Equal rhs: {(DQ </var/lib/cobbler/kickstarts/bcpc_ubuntu_host.preseed>)} spids: [682] ) ] ) (C {<sudo>} {<mv>} {(DQ (${ Id.VSub_Name KICKSTART_FILE))} {(DQ (${ Id.VSub_Name KICKSTART_FILE) <.old.> ($ Id.VSub_Dollar '$$'))} ) (C {<echo>} {(DQ <'Rerunning Chef client ...'>)}) (C {<sudo>} {<chef-client>}) (C {<sudo>} {<chef-client>}) (C {<sudo>} {<chef-client>}) (C {<echo>} {(DQ <'Checking results ...'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHECK) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<knife>} {<data>} {<bag>} {<show>} {<configs>} {(${ Id.VSub_Name ENVIRONMENT)} ) (C {<grep>} {<-i>} {<cobbler-root>}) ] negated: F ) ] ) ) } spids: [731] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$CHECK'))} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <"Warning, no cobbler-root found. I'm so sorry.">)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [758 771] ) ] else_action: [(C {<echo>} {(DQ <'Cobbler-root found : '> (${ Id.VSub_Name CHECK))})] ) (C {<echo>} {(DQ <'Verifying kickstarts...'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHECK) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<sudo>} {<cobbler>} {<profile>} {<dumpvars>} {<--name> <Id.Lit_Equals '='> <bcpc_host>} ) (C {<grep>} {<kickstart>}) (C {<grep>} {<bcpc>}) ] negated: F ) ] ) ) } spids: [804] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$CHECK'))} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <'Warning, no BCPC kickstart data found. Duh!'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [833 846] ) ] else_action: [(C {<echo>} {(DQ <'Found BCPC kickstart : '> (${ Id.VSub_Name CHECK))})] ) (C {<echo>} {(DQ <"Succesfully took off and nuked the site from orbit. It's the only way to be sure.">)} ) ] )