(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [64 72]
              ) (/../..)
            }
          spids: [63]
        )
      ]
      spids: [63]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ALL_VERSIONS_CSV)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Sentence
                        child: 
                          (Assignment
                            keyword: Assign_None
                            pairs: [
                              (assign_pair
                                lhs: (LhsName name:IFS)
                                op: Equal
                                rhs: {(SQ <','>)}
                                spids: [107]
                              )
                            ]
                            spids: [107]
                          )
                        terminator: <Op_Semi ';'>
                      )
                      (Sentence
                        child: 
                          (C {(echo)} 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name KUBE_AVAILABLE_GROUP_VERSIONS>
                                  bracket_op: (WholeArray op_id:Arith_Star)
                                  suffix_op: 
                                    (PatSub
                                      pat: {(' ')}
                                      replace: {(',')}
                                      do_all: True
                                      do_prefix: False
                                      do_suffix: False
                                    )
                                  spids: [115 125]
                                )
                              )
                            }
                          )
                        terminator: <Op_Semi ';'>
                      )
                      (Assignment
                        keyword: Assign_None
                        pairs: [
                          (assign_pair
                            lhs: (LhsName name:IFS)
                            op: Equal
                            rhs: {(Lit_Other '$')}
                            spids: [128]
                          )
                        ]
                        spids: [128]
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [106 130]
              )
            }
          spids: [105]
        )
      ]
      spids: [105]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TEST_API_VERSIONS)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_TEST_API_VERSIONS>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {(${ VSub_Name ALL_VERSIONS_CSV)}
                    )
                  spids: [134 140]
                )
              )
            }
          spids: [132]
        )
      ]
      spids: [132]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TIMEOUT)
          op: Equal
          rhs: {(DQ ('-timeout 600s'))}
          spids: [153]
        )
      ]
      spids: [153]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_INTEGRATION_TEST_MAX_CONCURRENCY)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_INTEGRATION_TEST_MAX_CONCURRENCY>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (-1))})
                spids: [159 165]
              )
            }
          spids: [158]
        )
      ]
      spids: [158]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:LOG_LEVEL)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name LOG_LEVEL>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2)})
                spids: [168 172]
              )
            }
          spids: [167]
        )
      ]
      spids: [167]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TEST_ARGS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_TEST_ARGS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [175 178]
              )
            }
          spids: [174]
        )
      ]
      spids: [174]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TEST_VMODULE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_TEST_VMODULE>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: {(DQ ('garbagecollector*=6,graph_builder*=6'))}
                  )
                spids: [184 190]
              )
            }
          spids: [183]
        )
      ]
      spids: [183]
    )
    (FuncDef
      name: 'kube::test::find_integration_test_dirs'
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(cd)} {(${ VSub_Name KUBE_ROOT)})
                    (Pipeline
                      children: [
                        (C {(find)} {(test/integration/)} {(-name)} {(SQ <'*_test.go'>)} {(-print0)})
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(DQ ('s|^|') (${ VSub_Name KUBE_GO_PACKAGE) ('/|'))})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[254])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(vendor/k8s.io/apiextensions-apiserver/test/integration/)} 
                          {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(DQ ('s|^|') (${ VSub_Name KUBE_GO_PACKAGE) ('/|'))})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[300])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(federation/test/integration/)} {(-name)} {(SQ <'*_test.go'>)} 
                          {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(DQ ('s|^|') (${ VSub_Name KUBE_GO_PACKAGE) ('/|'))})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[346])]
                        )
                      ]
                      negated: False
                    )
                  ]
                )
              spids: [206 354]
            )
          ]
          spids: [203]
        )
      spids: [193 202]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:CLEANUP_REQUIRED) op:Equal rhs:{(SQ )} spids:[359])]
      spids: [359]
    )
    (FuncDef
      name: cleanup
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name CLEANUP_REQUIRED))}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return>)]
                  spids: [16777215 383]
                )
              ]
              spids: [16777215 389]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Cleaning up etcd'))}
            )
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (etcd) (Lit_Other ':') (Lit_Other ':') (cleanup)}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CLEANUP_REQUIRED)
                  op: Equal
                  rhs: {(SQ )}
                  spids: [414]
                )
              ]
              spids: [414]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Integration test cleanup complete'))}
            )
          ]
          spids: [365]
        )
      spids: [361 364]
    )
    (FuncDef
      name: runTests
      body: 
        (BraceGroup
          children: [
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Starting etcd instance'))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CLEANUP_REQUIRED)
                  op: Equal
                  rhs: {(1)}
                  spids: [452]
                )
              ]
              spids: [452]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (etcd) (Lit_Other ':') (Lit_Other ':') (start)})
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Running integration test cases'))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_RACE)
                  op: Equal
                  rhs: {(DQ (-race))}
                  spids: [479]
                )
              ]
              spids: [479]
            )
            (C {(make)} {(-C)} {(DQ (${ VSub_Name KUBE_ROOT))} {(test)} 
              {(Lit_VarLike 'WHAT=') 
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name WHAT>
                    suffix_op: 
                      (StringUnary
                        op_id: VTest_ColonHyphen
                        arg_word: 
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C 
                                          {(kube) (Lit_Other ':') (Lit_Other ':') (test) 
                                            (Lit_Other ':') (Lit_Other ':') (find_integration_test_dirs)
                                          }
                                        )
                                        (C {(paste)} {(-sd) (SQ <' '>)} {(-)})
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [504 523]
                            )
                          }
                      )
                    spids: [501 524]
                  )
                )
              } 
              {(Lit_VarLike 'GOFLAGS=') 
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name GOFLAGS>
                    suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                    spids: [531 534]
                  )
                )
              } 
              {(Lit_VarLike 'KUBE_TEST_ARGS=') 
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name KUBE_TEST_ARGS>
                    suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                    spids: [541 544]
                  ) (' ') 
                  (BracedVarSub
                    token: <VSub_Name SHORT>
                    suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{('-short=true')})
                    spids: [546 550]
                  ) (' --vmodule=') (${ VSub_Name KUBE_TEST_VMODULE) (' --alsologtostderr=true')
                )
              } {(Lit_VarLike 'KUBE_RACE=') (DQ )} {(Lit_VarLike 'KUBE_TIMEOUT=') (DQ (${ VSub_Name KUBE_TIMEOUT))} 
              {(Lit_VarLike 'KUBE_TEST_API_VERSIONS=') (DQ ($ VSub_Number '$1'))}
            )
            (C {(cleanup)})
          ]
          spids: [436]
        )
      spids: [432 435]
    )
    (FuncDef
      name: checkEtcdOnPath
      body: 
        (BraceGroup
          children: [
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Checking etcd is on PATH'))}
            )
            (AndOr
              children: [(C {(which)} {(etcd)}) (ControlFlow token:<ControlFlow_Return return>)]
              op_id: Op_DAmp
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Cannot find etcd, cannot run integration tests.'))}
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {
                (DQ 
                  (
'Please see https://github.com/kubernetes/community/blob/master/contributors/devel/testing.md#install-etcd-dependency for instructions.'
                  )
                )
              }
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (usage)} 
              {(DQ ("You can use 'hack/install-etcd.sh' to install a copy in third_party/."))}
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [591]
        )
      spids: [587 590]
    )
    (C {(checkEtcdOnPath)})
    (C {(trap)} {(cleanup)} {(EXIT)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolUnary op_id:BoolUnary_n child:{(DQ (${ VSub_Name KUBE_TEST_ARGS))})
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(runTests)} {(v1)}) (C {(exit)} {(0)})]
          spids: [16777215 693]
        )
      ]
      spids: [16777215 705]
    )
    (SimpleCommand
      words: [{(read)} {(-a)} {(apiVersions)}]
      redirects: [
        (Redir
          op_id: Redir_TLess
          fd: 16777215
          arg_word: {(DQ (${ VSub_Name KUBE_TEST_API_VERSIONS))}
          spids: [722]
        )
      ]
      more_env: [(env_pair name:IFS val:{(SQ <';'>)} spids:[711])]
    )
    (ForEach
      iter_name: apiVersion
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name apiVersions>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [737 742]
            )
          )
        }
      ]
      do_arg_iter: False
      body: (DoGroup children:[(C {(runTests)} {(DQ (${ VSub_Name apiVersion))})] spids:[746 757])
      spids: [735 744]
    )
  ]
)