(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))}
    )
  ]
)