(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBECTL)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBECTL>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(kubectl)})
                spids: [57 61]
              )
            }
          spids: [56]
        )
      ]
      spids: [56]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VTCTLD_PORT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name VTCTLD_PORT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(30001)})
                spids: [68 72]
              )
            }
          spids: [67]
        )
      ]
      spids: [67]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SHARDS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name SHARDS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ <'-80,80-'>)})
                spids: [79 85]
              )
            }
          spids: [78]
        )
      ]
      spids: [78]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TABLETS_PER_SHARD)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name TABLETS_PER_SHARD>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2)})
                spids: [88 92]
              )
            }
          spids: [87]
        )
      ]
      spids: [87]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RDONLY_COUNT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name RDONLY_COUNT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0)})
                spids: [95 99]
              )
            }
          spids: [94]
        )
      ]
      spids: [94]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MAX_TASK_WAIT_RETRIES)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name MAX_TASK_WAIT_RETRIES>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(300)})
                spids: [102 106]
              )
            }
          spids: [101]
        )
      ]
      spids: [101]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MAX_VTTABLET_TOPO_WAIT_RETRIES)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name MAX_VTTABLET_TOPO_WAIT_RETRIES>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(180)})
                spids: [109 113]
              )
            }
          spids: [108]
        )
      ]
      spids: [108]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VTTABLET_TEMPLATE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name VTTABLET_TEMPLATE>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: {(SQ <vttablet-pod-template.yaml>)}
                  )
                spids: [116 122]
              )
            }
          spids: [115]
        )
      ]
      spids: [115]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VTGATE_TEMPLATE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name VTGATE_TEMPLATE>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: {(SQ <vtgate-controller-template.yaml>)}
                  )
                spids: [125 131]
              )
            }
          spids: [124]
        )
      ]
      spids: [124]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VTGATE_COUNT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name VTGATE_COUNT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
                spids: [134 138]
              )
            }
          spids: [133]
        )
      ]
      spids: [133]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CELLS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name CELLS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ <test>)})
                spids: [141 147]
              )
            }
          spids: [140]
        )
      ]
      spids: [140]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ETCD_REPLICAS) op:Equal rhs:{(3)} spids:[149])]
      spids: [149]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VTGATE_REPLICAS)
          op: Equal
          rhs: {($ VSub_Name '$VTGATE_COUNT')}
          spids: [153]
        )
      ]
      spids: [153]
    )
    (FuncDef
      name: get_node_ip
      body: 
        (BraceGroup
          children: [
            (C {($ VSub_Name '$KUBECTL')} {(get)} {(-o)} {(template)} {(-t)} 
              {
                (SQ 
                  <
'{{range (index .items 0).status.addresses}}{{if eq .type "ExternalIP"}}{{.address}}{{end}}{{end}}'
                  >
                )
              } {(nodes)}
            )
          ]
          spids: [164]
        )
      spids: [160 163]
    )
    (FuncDef
      name: get_vtctld_addr
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$VTCTLD_ADDR'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:node_ip)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(get_node_ip)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [213 215]
                              )
                            }
                          spids: [212]
                        )
                      ]
                      spids: [212]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$node_ip'))} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:VTCTLD_ADDR)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ ($ VSub_Name '$node_ip') (':') ($ VSub_Name '$VTCTLD_PORT'))
                                    }
                                  spids: [234]
                                )
                              ]
                              spids: [234]
                            )
                          ]
                          spids: [16777215 231]
                        )
                      ]
                      spids: [16777215 242]
                    )
                  ]
                  spids: [16777215 209]
                )
              ]
              spids: [16777215 245]
            )
            (C {(echo)} {(DQ ($ VSub_Name '$VTCTLD_ADDR'))})
          ]
          spids: [193]
        )
      spids: [189 192]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:config_file)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_Backtick '`'>
                spids: [258 266]
              ) (/config.sh)
            }
          spids: [257]
        )
      ]
      spids: [257]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(KW_Bang '!')} {(-f)} {($ VSub_Name '$config_file')} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ ('Please run ./configure.sh first to generate config.sh file.'))})
            (C {(exit)} {(1)})
          ]
          spids: [16777215 282]
        )
      ]
      spids: [16777215 296]
    )
    (C {(source)} {($ VSub_Name '$config_file')})
  ]
)