(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [(C {(ping)} {(-c)} {(1)} {(-q)} {(metadata.google.internal)})]
                  negated: True
                )
              terminator: <Op_Amp "&">
            )
            (Sentence
              child: 
                (SimpleCommand
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[88])]
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(AndOr children:[(C {(sudo)} {(-v)})(C {(exit)} {(1)})] op_id:Op_DPipe)]
          spids: [-1 93]
        )
      ]
      spids: [-1 106]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:FOCUS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name FOCUS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ )})
                spids: [119 124]
              )
            }
          spids: [118]
        )
      ]
      spids: [118]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SKIP)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name SKIP>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ )})
                spids: [137 142]
              )
            }
          spids: [136]
        )
      ]
      spids: [136]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TEST_ARGS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name TEST_ARGS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ )})
                spids: [152 157]
              )
            }
          spids: [151]
        )
      ]
      spids: [151]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:REGISTRY)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name REGISTRY>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: {(DQ (gcr.io/google_containers))}
                  )
                spids: [164 170]
              )
            }
          spids: [163]
        )
      ]
      spids: [163]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ARCH)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name ARCH>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (amd64))})
                spids: [180 186]
              )
            }
          spids: [179]
        )
      ]
      spids: [179]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VERSION)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name VERSION>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (0.2))})
                spids: [193 199]
              )
            }
          spids: [192]
        )
      ]
      spids: [192]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBELET_BIN)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBELET_BIN>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (kubelet))})
                spids: [209 215]
              )
            }
          spids: [208]
        )
      ]
      spids: [208]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBELET)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBELET>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {
                        (DQ 
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(which)} {($ VSub_Name "$KUBELET_BIN")})]
                              )
                            left_token: <Left_Backtick "`">
                            spids: [229 233]
                          )
                        )
                      }
                  )
                spids: [225 235]
              )
            }
          spids: [224]
        )
      ]
      spids: [224]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:LOG_DIR)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name LOG_DIR>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(pwd)})])
                          left_token: <Left_Backtick "`">
                          spids: [248 250]
                        )
                      }
                  )
                spids: [245 251]
              )
            }
          spids: [244]
        )
      ]
      spids: [244]
    )
    (C {(mkdir)} {(-p)} {($ VSub_Name "$LOG_DIR")})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:NETWORK_PLUGIN)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name NETWORK_PLUGIN>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ )})
                spids: [267 272]
              )
            }
          spids: [266]
        )
      ]
      spids: [266]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CNI_CONF_DIR)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name CNI_CONF_DIR>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ )})
                spids: [279 284]
              )
            }
          spids: [278]
        )
      ]
      spids: [278]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CNI_BIN_DIR)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name CNI_BIN_DIR>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ )})
                spids: [291 296]
              )
            }
          spids: [290]
        )
      ]
      spids: [290]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBELET_KUBECONFIG)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBELET_KUBECONFIG>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: {(DQ (/var/lib/kubelet/kubeconfig))}
                  )
                spids: [303 309]
              )
            }
          spids: [302]
        )
      ]
      spids: [302]
    )
    (FuncDef
      name: create-kubelet-kubeconfig
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:api_addr)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [329]
                )
              ]
              spids: [327]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 2))}
                  spids: [339]
                )
              ]
              spids: [337]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {(DQ (${ VSub_Name dest))})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [351 359]
                        )
                      )
                    }
                  spids: [349]
                )
              ]
              spids: [347]
            )
            (Sentence
              child: (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name dest_dir))})
              terminator: <Op_Amp "&">
            )
            (AndOr
              children: [
                (SimpleCommand
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[374])]
                )
                (C {(sudo)} {(mkdir)} {(-p)} {(DQ (${ VSub_Name dest_dir))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sudo)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (AndOr
                                children: [
                                  (C {(test)} {(-w)} {(DQ (${ VSub_Name dest_dir))})
                                  (C {(echo)} {(DQ ("sudo -E"))})
                                ]
                                op_id: Op_DPipe
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [393 411]
                      )
                    }
                  spids: [392]
                )
              ]
              spids: [392]
            )
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [
                    (HereDoc
                      op_id: Redir_DLess
                      fd: -1
                      body: 
                        {
                          (DQ ("apiVersion: v1\n") ("kind: Config\n") ("clusters:\n") ("  - cluster:\n") 
                            ("      server: ") (${ VSub_Name api_addr) ("\n") ("    name: local\n") ("contexts:\n") ("  - context:\n") 
                            ("      cluster: local\n") ("    name: local\n") ("current-context: local\n")
                          )
                        }
                      do_expansion: True
                      here_end: EOF
                      was_filled: True
                      spids: [416]
                    )
                  ]
                )
                (SimpleCommand
                  words: [{(${ VSub_Name sudo)} {(tee)} {(DQ (${ VSub_Name dest))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[433])]
                )
              ]
              negated: False
            )
          ]
          spids: [324]
        )
      spids: [318 323]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:kubelet_log) op:Equal rhs:{(kubelet.log)} spids:[458])]
      spids: [458]
    )
    (FuncDef
      name: start_kubelet
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Creating kubelet.kubeconfig"))})
            (C {(create-kubelet-kubeconfig)} {(DQ ("http://localhost:8080"))} 
              {($ VSub_Name "$KUBELET_KUBECONFIG")}
            )
            (C {(echo)} {(DQ ("Starting kubelet..."))})
            (Sentence
              child: (C {(sudo)} {(-b)} {($ VSub_Name "$KUBELET")} {($ VSub_At "$@")})
              terminator: <Op_Amp "&">
            )
            (SimpleCommand
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$LOG_DIR") (/) ($ VSub_Name "$kubelet_log")}
                  spids: [500]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-ne)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(DQ ("Failed to start kubelet"))}) (C {(exit)} {(1)})]
                  spids: [-1 519]
                )
              ]
              spids: [-1 534]
            )
          ]
          spids: [465]
        )
      spids: [461 464]
    )
    (FuncDef
      name: wait_kubelet
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Health checking kubelet..."))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:healthCheckURL)
                  op: Equal
                  rhs: {(http) (Lit_Other ":") (//127.0.0.1) (Lit_Other ":") (10255/healthz)}
                  spids: [556]
                )
              ]
              spids: [556]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:maxRetry) op:Equal rhs:{(10)} spids:[566])]
              spids: [564]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:cur) op:Equal rhs:{(1)} spids:[572])]
              spids: [570]
            )
            (While
              cond: [
                (Sentence
                  child: 
                    (C {(Lit_Other "[")} {($ VSub_Name "$cur")} {(-le)} {($ VSub_Name "$maxRetry")} 
                      {(Lit_Other "]")}
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (SimpleCommand
                      words: [{(curl)} {(-s)} {($ VSub_Name "$healthCheckURL")}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[598])]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-eq)} {(0)} {(Lit_Other "]")})
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ ("Kubelet is ready"))})
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                          spids: [-1 616]
                        )
                      ]
                      spids: [-1 629]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {($ VSub_Name "$cur")} {(-eq)} 
                                  {($ VSub_Name "$maxRetry")} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ ("Health check exceeds max retry"))})
                            (C {(exit)} {(1)})
                          ]
                          spids: [-1 645]
                        )
                      ]
                      spids: [-1 660]
                    )
                    (C {(echo)} {(DQ ("Kubelet is not ready"))})
                    (C {(sleep)} {(1)})
                    (DParen
                      child: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:cur))
                    )
                  ]
                  spids: [589 682]
                )
            )
          ]
          spids: [546]
        )
      spids: [542 545]
    )
    (FuncDef
      name: kill_kubelet
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Stopping kubelet..."))})
            (C {(sudo)} {(pkill)} {($ VSub_Name "$KUBELET_BIN")})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-ne)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(DQ ("Failed to stop kubelet."))}) (C {(exit)} {(1)})]
                  spids: [-1 724]
                )
              ]
              spids: [-1 739]
            )
          ]
          spids: [694]
        )
      spids: [690 693]
    )
    (FuncDef
      name: run_test
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:env) op:Equal rhs:{(DQ )} spids:[754])]
              spids: [754]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$FOCUS"))} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:env)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name "$env") (" -e FOCUS=") 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar "\\\"">
                                ) ($ VSub_Name "$FOCUS") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                              )
                            }
                          spids: [777]
                        )
                      ]
                      spids: [777]
                    )
                  ]
                  spids: [-1 774]
                )
              ]
              spids: [-1 787]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$SKIP"))} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:env)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name "$env") (" -e SKIP=") 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar "\\\"">
                                ) ($ VSub_Name "$SKIP") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                              )
                            }
                          spids: [808]
                        )
                      ]
                      spids: [808]
                    )
                  ]
                  spids: [-1 805]
                )
              ]
              spids: [-1 818]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$TEST_ARGS"))} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:env)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name "$env") (" -e TEST_ARGS=") 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar "\\\"">
                                ) ($ VSub_Name "$TEST_ARGS") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                              )
                            }
                          spids: [839]
                        )
                      ]
                      spids: [839]
                    )
                  ]
                  spids: [-1 836]
                )
              ]
              spids: [-1 849]
            )
            (C {(sudo)} {(sh)} {(-c)} 
              {
                (DQ ("docker run -it --rm --privileged=true --net=host -v /:/rootfs ") ("    -v ") 
                  ($ VSub_Name "$config_dir") (":") ($ VSub_Name "$config_dir") (" -v ") ($ VSub_Name "$LOG_DIR") (":/var/result ") (${ VSub_Name env) 
                  (" ") ($ VSub_Name "$REGISTRY") (/node-test-) ($ VSub_Name "$ARCH") (":") ($ VSub_Name "$VERSION")
                )
              }
            )
          ]
          spids: [751]
        )
      spids: [747 750]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:pid)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(pidof)} {($ VSub_Name "$KUBELET_BIN")})])
                left_token: <Left_Backtick "`">
                spids: [905 909]
              )
            }
          spids: [904]
        )
      ]
      spids: [904]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(KW_Bang "!")} {(-z)} {($ VSub_Name "$pid")} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ("Kubelet is running (pid=") ($ VSub_Name "$pid") 
                  ("), please stop it before running the test.")
                )
              }
            )
            (C {(exit)} {(1)})
          ]
          spids: [-1 924]
        )
      ]
      spids: [-1 940]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:volume_stats_agg_period)
          op: Equal
          rhs: {(10s)}
          spids: [943]
        )
      ]
      spids: [943]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:allow_privileged) op:Equal rhs:{(true)} spids:[946])]
      spids: [946]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:serialize_image_pulls)
          op: Equal
          rhs: {(false)}
          spids: [949]
        )
      ]
      spids: [949]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:config_dir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(mktemp)} {(-d)})])
                left_token: <Left_Backtick "`">
                spids: [953 957]
              )
            }
          spids: [952]
        )
      ]
      spids: [952]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:file_check_frequency) op:Equal rhs:{(10s)} spids:[959])]
      spids: [959]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:pod_cidr) op:Equal rhs:{(10.100.0.0/24)} spids:[962])]
      spids: [962]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:log_level) op:Equal rhs:{(4)} spids:[965])]
      spids: [965]
    )
    (C {(start_kubelet)} {(--kubeconfig)} 
      {(DQ (${ VSub_Name KUBELET_KUBECONFIG_DIR) (/kubelet.kubeconfig))} {(--volume-stats-agg-period)} {($ VSub_Name "$volume_stats_agg_period")} 
      {(--allow-privileged) (Lit_Other "=") ($ VSub_Name "$allow_privileged")} {(--serialize-image-pulls) (Lit_Other "=") ($ VSub_Name "$serialize_image_pulls")} 
      {(--pod-manifest-path)} {($ VSub_Name "$config_dir")} {(--file-check-frequency)} {($ VSub_Name "$file_check_frequency")} 
      {(--pod-cidr) (Lit_Other "=") ($ VSub_Name "$pod_cidr")} {(--runtime-cgroups) (Lit_Other "=") (/docker-daemon)} {(--kubelet-cgroups) (Lit_Other "=") (/kubelet)} 
      {(--system-cgroups) (Lit_Other "=") (/system)} {(--cgroup-root) (Lit_Other "=") (/)} 
      {(--network-plugin) (Lit_Other "=") ($ VSub_Name "$NETWORK_PLUGIN")} {(--cni-conf-dir) (Lit_Other "=") ($ VSub_Name "$CNI_CONF_DIR")} 
      {(--cni-bin-dir) (Lit_Other "=") ($ VSub_Name "$CNI_BIN_DIR")} {(--v) (Lit_Other "=") ($ VSub_Name "$log_level")} {(--logtostderr)}
    )
    (C {(wait_kubelet)})
    (C {(run_test)})
    (C {(kill_kubelet)})
    (C {(sudo)} {(rm)} {(-rf)} {($ VSub_Name "$config_dir")})
  ]
)