(command.CommandList children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<nounset>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<pipefail>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'KUBE_ROOT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'KUBE_ROOT='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'KUBE_ROOT='> name:KUBE_ROOT) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [{<dirname>} {(DQ (${ Id.VSub_Name BASH_SOURCE))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'/..'> } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/env.sh'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <source> more_env: [] words: [{<source>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/env.sh'>)}] redirects: [] do_fork: T ) ] spids: [92 108] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <source> more_env: [] words: [{<source>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/hack/lib/util.sh'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <source> more_env: [] words: [{<source>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/kube-util.sh'>)}] redirects: [] do_fork: T ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <kubectl_retry> name: kubectl_retry body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'tries='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tries='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tries='> name:tries) op: assign_op.Equal rhs: {<3>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [ {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/kubectl.sh'>)} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'tries='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tries='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tries='> name:tries) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike tries) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_le left: {(${ Id.VSub_Name tries)} right: {<0>} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'(\'kubectl '> ($ Id.VSub_At '@') <'\' failed, giving up)'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [186 201] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'(kubectl failed, will retry '> (${ Id.VSub_Name tries) <' times)'>)} ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {<1>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'ALLOWED_NOTREADY_NODES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ALLOWED_NOTREADY_NODES='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'ALLOWED_NOTREADY_NODES='> name: ALLOWED_NOTREADY_NODES ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name ALLOWED_NOTREADY_NODES> var_name: ALLOWED_NOTREADY_NODES suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<0>}) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CLUSTER_READY_ADDITIONAL_TIME_SECONDS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CLUSTER_READY_ADDITIONAL_TIME_SECONDS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'CLUSTER_READY_ADDITIONAL_TIME_SECONDS='> name: CLUSTER_READY_ADDITIONAL_TIME_SECONDS ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name CLUSTER_READY_ADDITIONAL_TIME_SECONDS> var_name: CLUSTER_READY_ADDITIONAL_TIME_SECONDS suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<30>}) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EXPECTED_NUM_NODES='> name:EXPECTED_NUM_NODES) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name NUM_NODES))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name KUBERNETES_PROVIDER> var_name: KUBERNETES_PROVIDER suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } right: {(DQ <gce>)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Validating gce cluster, MULTIZONE='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name MULTIZONE> var_name: MULTIZONE suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name MULTIZONE> var_name: MULTIZONE suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } right: {(DQ <true>)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> name: EXPECTED_NUM_NODES ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <gcloud> more_env: [] words: [ {<gcloud>} {<-q>} {<compute>} {<instances>} {<list>} {<--project> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name PROJECT)) } {<--format> <Id.Lit_Equals '='> <Id.Lit_LBracket '['> <no-heading> <Id.Lit_RBracket ']'> } {<--filter> <Id.Lit_Equals '='> (DQ <'name ~ \''> (${ Id.VSub_Name NODE_INSTANCE_PREFIX) <'.*\' AND zone:('> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <gcloud> more_env: [] words: [ {<gcloud>} {<-q>} {<compute>} {<zones>} {<list>} {<--project> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name PROJECT)) } {<--filter> <Id.Lit_Equals '='> <Id.Lit_VarLike 'region='> (${ Id.VSub_Name REGION) } {<--format> <Id.Lit_Equals '='> <Id.Lit_ArrayLhsOpen 'csv['> <no-heading> <Id.Lit_RBracket ']'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('> ch:'(') <name> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'> ch:')') } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <tr> more_env: [] words: [ {<tr>} {(DQ <Id.Lit_BadBackslash '\\'> <n>)} {(DQ <','>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {(DQ <'s/,'> <Id.Lit_Dollar '$'> <'//'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) <')'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Computing number of nodes, NODE_INSTANCE_PREFIX='> (${ Id.VSub_Name NODE_INSTANCE_PREFIX) <', REGION='> (${ Id.VSub_Name REGION) <', EXPECTED_NUM_NODES='> (${ Id.VSub_Name EXPECTED_NUM_NODES) ) } ] redirects: [] do_fork: T ) ] spids: [313 333] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [275 295] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name REGISTER_MASTER_KUBELET> var_name: REGISTER_MASTER_KUBELET suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } right: {(DQ <true>)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name KUBERNETES_PROVIDER> var_name: KUBERNETES_PROVIDER suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } right: {(DQ <gce>)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'NUM_MASTERS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NUM_MASTERS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'NUM_MASTERS='> name: NUM_MASTERS ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <get-master-replicas-count> more_env: [] words: [{<get-master-replicas-count>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [487 507] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'NUM_MASTERS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NUM_MASTERS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NUM_MASTERS='> name:NUM_MASTERS) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'EXPECTED_NUM_NODES='> name: EXPECTED_NUM_NODES ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike EXPECTED_NUM_NODES) right: ($ Id.Lit_ArithVarLike NUM_MASTERS) ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] spids: [464 484] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'REQUIRED_NUM_NODES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'REQUIRED_NUM_NODES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'REQUIRED_NUM_NODES='> name:REQUIRED_NUM_NODES) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike EXPECTED_NUM_NODES) right: ($ Id.Lit_ArithVarLike ALLOWED_NOTREADY_NODES) ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'return_value='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'return_value='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'return_value='> name:return_value) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'attempt='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'attempt='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'attempt='> name:attempt) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PAUSE_BETWEEN_ITERATIONS_SECONDS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PAUSE_BETWEEN_ITERATIONS_SECONDS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'PAUSE_BETWEEN_ITERATIONS_SECONDS='> name: PAUSE_BETWEEN_ITERATIONS_SECONDS ) op: assign_op.Equal rhs: {<15>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'MAX_ATTEMPTS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'MAX_ATTEMPTS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'MAX_ATTEMPTS='> name:MAX_ATTEMPTS) op: assign_op.Equal rhs: {<100>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ADDITIONAL_ITERATIONS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ADDITIONAL_ITERATIONS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'ADDITIONAL_ITERATIONS='> name: ADDITIONAL_ITERATIONS ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike CLUSTER_READY_ADDITIONAL_TIME_SECONDS) right: ($ Id.Lit_ArithVarLike PAUSE_BETWEEN_ITERATIONS_SECONDS) ) right: {<Id.Lit_Digits 1>} ) right: ($ Id.Lit_ArithVarLike PAUSE_BETWEEN_ITERATIONS_SECONDS) ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {(${ Id.VSub_Name attempt)} right: {<0>} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {<15>}] redirects: [] do_fork: T ) ] spids: [595 610] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'attempt='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'attempt='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'attempt='> name:attempt) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike attempt) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'node='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'node='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'node='> name:node) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <kubectl_retry> more_env: [] words: [{<kubectl_retry>} {<get>} {<nodes>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'res='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'res='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '?'))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'res='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'res='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '?'))} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name res))} {<-ne>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {(DQ (${ Id.VSub_Name attempt))} right: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name last_run> var_name: last_run suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName MAX_ATTEMPTS)} ) right: <Id.Right_DollarBrace '}'> ) ) } ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_red) <' Failed to get nodes.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [725 748] ) ] else_kw: <Id.KW_Else else> else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Continue continue>)] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [703 722] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'found='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'found='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'found='> name:found) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name node))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ready='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ready='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ready='> name:ready) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name node))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-v>} {(DQ <NotReady>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_DEqual left: {(DQ (${ Id.VSub_Name found))} right: {(DQ (${ Id.VSub_Name EXPECTED_NUM_NODES))} ) right: <Id.Op_DRightParen _> redirects: [] ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_DEqual left: {(DQ (${ Id.VSub_Name ready))} right: {(DQ (${ Id.VSub_Name EXPECTED_NUM_NODES))} ) right: <Id.Op_DRightParen _> redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] spids: [845 887] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Great left: {(DQ (${ Id.VSub_Name found))} right: {(DQ (${ Id.VSub_Name EXPECTED_NUM_NODES))} ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name KUBE_USE_EXISTING_MASTER> var_name: KUBE_USE_EXISTING_MASTER suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: (rhs_word__Empty) ) right: <Id.Right_DollarBrace '}'> ) ) } right: {(DQ <true>)} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_red) <'Found '> (${ Id.VSub_Name found) <' nodes, but expected '> (${ Id.VSub_Name EXPECTED_NUM_NODES) <'. Your cluster may not behave correctly.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) ] spids: [918 938] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Break break>) ] spids: [893 915] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Great left: {(DQ (${ Id.VSub_Name ready))} right: {(DQ (${ Id.VSub_Name EXPECTED_NUM_NODES))} ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_red) <'Found '> (${ Id.VSub_Name ready) <' ready nodes, but expected '> (${ Id.VSub_Name EXPECTED_NUM_NODES) <'. Your cluster may not behave correctly.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Break break>) ] spids: [970 991] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_le left: {(DQ (${ Id.VSub_Name REQUIRED_NUM_NODES))} right: {(DQ (${ Id.VSub_Name ready))} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_green) <'Found '> (${ Id.VSub_Name REQUIRED_NUM_NODES) <' Nodes, allowing additional '> (${ Id.VSub_Name ADDITIONAL_ITERATIONS) <' iterations for other Nodes to join.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'last_run='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'last_run='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'last_run='> name:last_run) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name last_run> var_name: last_run suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike attempt) right: ($ Id.Lit_ArithVarLike ADDITIONAL_ITERATIONS ) ) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) ] spids: [1023 1044] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {(DQ (${ Id.VSub_Name attempt))} right: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name last_run> var_name: last_run suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName MAX_ATTEMPTS)} ) right: <Id.Right_DollarBrace '}'> ) ) } ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_yellow) <'Detected '> (${ Id.VSub_Name ready) <' ready nodes, found '> (${ Id.VSub_Name found) <' nodes out of expected '> (${ Id.VSub_Name EXPECTED_NUM_NODES) <'. Your cluster may not be fully functional.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <kubectl_retry> more_env: [] words: [{<kubectl_retry>} {<get>} {<nodes>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {(DQ (${ Id.VSub_Name REQUIRED_NUM_NODES))} right: {(DQ (${ Id.VSub_Name ready))} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1154 1175] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'return_value='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'return_value='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'return_value='> name: return_value ) op: assign_op.Equal rhs: {<2>} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1094 1117] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_yellow) <'Waiting for '> (${ Id.VSub_Name EXPECTED_NUM_NODES) <' ready nodes. '> (${ Id.VSub_Name ready) <' ready nodes, '> (${ Id.VSub_Name found) <' registered. Retrying.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Found '> (${ Id.VSub_Name found) <' node(s).'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <kubectl_retry> more_env: [] words: [{<kubectl_retry>} {<get>} {<nodes>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'attempt='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'attempt='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'attempt='> name:attempt) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cs_status='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cs_status='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cs_status='> name:cs_status) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <kubectl_retry> more_env: [] words: [ {<kubectl_retry>} {<get>} {<componentstatuses>} {<-o>} {<template>} {<--template> <Id.Lit_Equals '='> (SQ < '{{range .items}}{{with index .conditions 0}}{{.type}}:{{.status}}{{end}}{{"\\n"}}{{end}}' > ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'componentstatuses='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'componentstatuses='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'componentstatuses='> name: componentstatuses ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name cs_status))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-c>} {(SQ <'Healthy:'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'healthy='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'healthy='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'healthy='> name:healthy) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name cs_status))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-c>} {(SQ <'Healthy:True'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Great left: ($ Id.Lit_ArithVarLike componentstatuses) right: ($ Id.Lit_ArithVarLike healthy) ) right: <Id.Op_DRightParen _> redirects: [] ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_DEqual left: ($ Id.Lit_ArithVarLike componentstatuses) right: {<Id.Lit_Digits 0>} ) right: <Id.Op_DRightParen _> redirects: [] ) ] ops: [<Id.Op_DPipe _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.Binary op_id: Id.Arith_Less left: ($ Id.Lit_ArithVarLike attempt) right: {<Id.Lit_Digits 5>} ) right: <Id.Op_DRightParen _> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_yellow) <'Cluster not working yet.'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'attempt='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'attempt='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'attempt='> name: attempt ) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: ($ Id.Lit_ArithVarLike attempt) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <sleep> more_env: [] words: [{<sleep>} {<30>}] redirects: [] do_fork: T ) ] spids: [1384 1396] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ <' '> (${ Id.VSub_Name color_yellow) <'Validate output:'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <kubectl_retry> more_env: [] words: [{<kubectl_retry>} {<get>} {<cs>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_red) < 'Validation returned one or more failed components. Cluster is probably broken.' > (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1358 1381] ) ] else_kw: <Id.KW_Else else> else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Validate output:'>)}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <kubectl_retry> more_env: [] words: [{<kubectl_retry>} {<get>} {<cs>}] redirects: [] do_fork: T ) (command.Simple blame_tok:<true> more_env:[] words:[{<true>}] redirects:[] do_fork:T) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name return_value))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_green) <'Cluster validation succeeded'> (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) ] spids: [1504 1524] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<-e>} { (DQ (${ Id.VSub_Name color_yellow) < 'Cluster validation encountered some problems, but cluster should be in working order' > (${ Id.VSub_Name color_norm) ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {(DQ (${ Id.VSub_Name return_value))} ) ] )