(command.CommandList children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_Number '$1'))} ) right: (bool_expr.LogicalOr left: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_Number '$2'))} ) right: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_Number '$3'))} ) ) ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NAME) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<basename>} {(DQ ($ Id.VSub_Number '$0'))}) ) } spids: [71] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$NAME'))} right: {<nodescp>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ <'Usage: '> ($ Id.VSub_Number '$0') <' \'environment\' \'nodename|IP address\' \'from\' \'to\''> ) } ) ] spids: [81 96] ) ] else_action: [ (C {<echo>} { (DQ <'Usage: '> ($ Id.VSub_Number '$0') <' \'environment\' \'nodename|IP address\' \'command\' (sudo)'> ) } ) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [39 68] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<which>} {<sshpass>}) ) } ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ < 'Error: sshpass required for this tool. You should be able to \'sudo apt-get install sshpass\' to get it' > ) } ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [129 146] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ENVIRONMENT) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [161] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IP) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [164] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMAND) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [167] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KNIFESTAT) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple words: [ {<knife>} {<Id.KW_Data data>} {<bag>} {<show>} {<configs>} {($ Id.VSub_DollarName '$ENVIRONMENT')} ] redirects: [ (redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (C {<grep>} {<ERROR>}) ] negated: F ) ) } spids: [174] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$KNIFESTAT'))} ) ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'knife error '> ($ Id.VSub_DollarName '$KNIFESTAT') <' when showing the config'>)} ) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [200 215] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PASSWD) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<knife>} {<Id.KW_Data data>} {<bag>} {<show>} {<configs>} {($ Id.VSub_DollarName '$ENVIRONMENT')} ) (C {<grep>} {(DQ <'cobbler-root-password:'>)}) (C {<awk>} {(SQ <' {print $2}'>)}) ] negated: F ) ) } spids: [235] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$PASSWD'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'Failed to retrieve \'cobbler-root-password\''>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit>) ] spids: [268 281] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<basename>} {(DQ ($ Id.VSub_Number '$0'))}) ) } right: {<nssh>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SSH1COMMON) op: assign_op.Equal rhs: {(DQ )} spids: [338] ) ] ) ] spids: [316 335] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SSHCOMMON) op: assign_op.Equal rhs: { (DQ < '-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o VerifyHostKeyDNS=no' > ) } spids: [345] ) ] ) ] ) (command.ShFunction name: apply_command body: (BraceGroup children: [ (C {(DQ ($ Id.VSub_At '$@'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RES) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [365] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {(DQ ($ Id.VSub_DollarName '$RES'))} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'Executing \''> ($ Id.VSub_At '$@') <'\' failed'>)}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName '$RES')} ) ] spids: [369 384] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<basename>} {(DQ ($ Id.VSub_Number '$0'))}) ) } right: {<nodescp>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SCPCMD) op: assign_op.Equal rhs: {(DQ <'scp '> ($ Id.VSub_DollarName '$SSHCOMMON'))} spids: [428] ) ] ) (C {<apply_command>} {<sshpass>} {<-p>} {($ Id.VSub_DollarName '$PASSWD')} {($ Id.VSub_DollarName '$SCPCMD')} {<-p>} {(DQ ($ Id.VSub_Number '$3'))} {(DQ <'ubuntu@'> ($ Id.VSub_Number '$2') <':'> ($ Id.VSub_Number '$4'))} ) ] spids: [406 425] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SSHCMD) op: assign_op.Equal rhs: {(DQ <'ssh '> ($ Id.VSub_DollarName '$SSHCOMMON'))} spids: [470] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_Number '$4'))} right: {<sudo>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<apply_command>} {<sshpass>} {<-p>} {($ Id.VSub_DollarName '$PASSWD')} {($ Id.VSub_DollarName '$SSHCMD')} {<-t>} {<ubuntu> <Id.Lit_At '@'> ($ Id.VSub_DollarName '$IP')} { (DQ <'echo '> ($ Id.VSub_DollarName '$PASSWD') <' | sudo -S '> ($ Id.VSub_DollarName '$COMMAND') ) } ) ] spids: [478 493] ) ] else_action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$COMMAND'))} right: {<->} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ <'You might need this : cobbler_root = '> ($ Id.VSub_DollarName '$PASSWD')) } ) (C {<apply_command>} {<sshpass>} {<-p>} {($ Id.VSub_DollarName '$PASSWD')} {($ Id.VSub_DollarName '$SSHCMD')} {<-t>} {<ubuntu> <Id.Lit_At '@'> ($ Id.VSub_DollarName '$IP')} ) ] spids: [532 547] ) ] else_action: [ (C {<apply_command>} {<sshpass>} {<-p>} {($ Id.VSub_DollarName '$PASSWD')} {($ Id.VSub_DollarName '$SSHCMD')} {<-t>} {<ubuntu> <Id.Lit_At '@'> ($ Id.VSub_DollarName '$IP')} {(DQ ($ Id.VSub_DollarName '$COMMAND'))} ) ] ) ] ) ] ) ] )