(CommandList
  children: [
    (AndOr
      children: [
        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-z)} 
          {
            (BracedVarSub
              token: <VSub_Name UTIL_SH_DEBUG>
              suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(x)})
              spids: [54 58]
            )
          } {(Lit_Other "]")}
        )
        (C {(set)} {(-x)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (SimpleCommand
          words: [{(command)} {(-v)} {(kubectl)}]
          redirects: [
            (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[75])
            (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[78])
          ]
        )
        (BraceGroup
          children: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(echo)} {(DQ ("kubectl not found in path. Aborting."))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[87])]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [83]
        )
      ]
      op_id: Op_DPipe
    )
    (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: [104 112]
              ) (/../..)
            }
          spids: [103]
        )
      ]
      spids: [103]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [118 126]
              )
            }
          spids: [117]
        )
      ]
      spids: [115]
    )
    (C {(source)} 
      {
        (DQ ($ VSub_Name "$ROOT") (/) 
          (BracedVarSub
            token: <VSub_Name KUBE_CONFIG_FILE>
            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (config-default.sh))})
            spids: [133 139]
          )
        )
      }
    )
    (C {(source)} {(DQ ($ VSub_Name "$KUBE_ROOT") (/cluster/common.sh))})
    (C {(export)} {(Lit_VarLike "LIBVIRT_DEFAULT_URI=") (qemu) (Lit_Other ":") (///system)})
    (C {(export)} 
      {(Lit_VarLike "SERVICE_ACCOUNT_LOOKUP=") 
        (BracedVarSub
          token: <VSub_Name SERVICE_ACCOUNT_LOOKUP>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
          spids: [160 164]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "ADMISSION_CONTROL=") 
        (BracedVarSub
          token: <VSub_Name ADMISSION_CONTROL>
          suffix_op: 
            (StringUnary
              op_id: VTest_ColonHyphen
              arg_word: 
                {
                  (
"Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,ResourceQuota"
                  )
                }
            )
          spids: [169 173]
        )
      }
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:POOL) op:Equal rhs:{(kubernetes)} spids:[177])]
      spids: [175]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:POOL_PATH)
          op: Equal
          rhs: {(/var/lib/libvirt/images/kubernetes)}
          spids: [182]
        )
      ]
      spids: [180]
    )
    (AndOr
      children: [
        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-d)} {(DQ (${ VSub_Name POOL_PATH))} {(Lit_Other "]")})
        (Subshell
          child: 
            (CommandList
              children: [
                (Sentence
                  child: (C {(echo)} {(DQ ($ VSub_Name "$POOL_PATH"))} {(does)} {(not)} {(exist)})
                  terminator: <Op_Semi ";">
                )
                (C {(exit)} {(1)})
              ]
            )
          spids: [202 221]
        )
      ]
      op_id: Op_DAmp
    )
    (FuncDef
      name: create-kubelet-kubeconfig
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:apiserver_address)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [241]
                )
              ]
              spids: [239]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:destination)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 2))}
                  spids: [251]
                )
              ]
              spids: [249]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name apiserver_address))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ("Must provide API server address to create Kubelet kubeconfig file!"))}
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 274]
                )
              ]
              spids: [-1 289]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolUnary op_id:BoolUnary_z child:{(DQ (${ VSub_Name destination))})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ("Must provide destination path to create Kubelet kubeconfig file!"))}
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 307]
                )
              ]
              spids: [-1 322]
            )
            (C {(echo)} {(DQ ("Creating Kubelet kubeconfig file"))})
            (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 destination))})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [336 344]
                        )
                      )
                    }
                  spids: [334]
                )
              ]
              spids: [332]
            )
            (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:[359])]
                )
                (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: [378 396]
                      )
                    }
                  spids: [377]
                )
              ]
              spids: [377]
            )
            (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 apiserver_address) ("\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: [401]
                    )
                  ]
                )
                (SimpleCommand
                  words: [{(${ VSub_Name sudo)} {(tee)} {(DQ (${ VSub_Name destination))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[418])]
                )
              ]
              negated: False
            )
          ]
          spids: [236]
        )
      spids: [230 235]
    )
    (FuncDef
      name: join
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [464]
                )
              ]
              spids: [462]
            )
            (C {(shift)})
            (C {(echo)} {(DQ ($ VSub_Star "$*"))})
          ]
          spids: [459]
        )
      spids: [455 458]
    )
    (FuncDef
      name: detect-master
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_MASTER_IP)
                  op: Equal
                  rhs: {($ VSub_Name "$MASTER_IP")}
                  spids: [492]
                )
              ]
              spids: [492]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_MASTER)
                  op: Equal
                  rhs: {($ VSub_Name "$MASTER_NAME")}
                  spids: [496]
                )
              ]
              spids: [496]
            )
            (C {(export)} 
              {(Lit_VarLike "KUBERNETES_MASTER=") (http) (Lit_Other ":") (//) 
                ($ VSub_Name "$KUBE_MASTER_IP") (Lit_Other ":") (8080)
              }
            )
            (C {(echo)} {(DQ ("KUBE_MASTER_IP: ") ($ VSub_Name "$KUBE_MASTER_IP"))})
            (C {(echo)} {(DQ ("KUBE_MASTER: ") ($ VSub_Name "$KUBE_MASTER"))})
          ]
          spids: [489]
        )
      spids: [485 488]
    )
    (FuncDef
      name: detect-nodes
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_NODE_IP_ADDRESSES)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name NODE_IPS>
                                bracket_op: (WholeArray op_id:Lit_At)
                                spids: [542 547]
                              )
                            )
                          }
                        ]
                      )
                    }
                  spids: [539]
                )
              ]
              spids: [539]
            )
          ]
          spids: [536]
        )
      spids: [532 535]
    )
    (FuncDef
      name: generate_certs
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:node_names)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_At "@"))}])}
                  spids: [561]
                )
              ]
              spids: [561]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tempdir)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(mktemp)} {(-d)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [576 580]
                      )
                    }
                  spids: [575]
                )
              ]
              spids: [575]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CA_KEY)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name CA_KEY>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(DQ ($ VSub_Name "$tempdir") (/ca-key.pem))}
                          )
                        spids: [584 591]
                      )
                    }
                  spids: [583]
                )
              ]
              spids: [583]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CA_CERT)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name CA_CERT>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(DQ ($ VSub_Name "$tempdir") (/ca.pem))}
                          )
                        spids: [595 602]
                      )
                    }
                  spids: [594]
                )
              ]
              spids: [594]
            )
            (SimpleCommand
              words: [{(openssl)} {(genrsa)} {(-out)} {(DQ (${ VSub_Name CA_KEY))} {(2048)}]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[619])]
            )
            (SimpleCommand
              words: [
                {(openssl)}
                {(req)}
                {(-x509)}
                {(-new)}
                {(-nodes)}
                {(-key)}
                {(DQ (${ VSub_Name CA_KEY))}
                {(-days)}
                {(10000)}
                {(-out)}
                {(DQ (${ VSub_Name CA_CERT))}
                {(-subj)}
                {(DQ ("/CN=kube-ca"))}
              ]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[659])]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_KEY)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name KUBE_KEY>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(DQ ($ VSub_Name "$tempdir") (/apiserver-key.pem))}
                          )
                        spids: [669 676]
                      )
                    }
                  spids: [668]
                )
              ]
              spids: [668]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:API_SERVER_CERT_REQ)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name API_SERVER_CERT_REQ>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(DQ ($ VSub_Name "$tempdir") (/apiserver.csr))}
                          )
                        spids: [680 687]
                      )
                    }
                  spids: [679]
                )
              ]
              spids: [679]
            )
            (SimpleCommand
              words: [{(openssl)} {(genrsa)} {(-out)} {(DQ (${ VSub_Name KUBE_KEY))} {(2048)}]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[704])]
            )
            (SimpleCommand
              words: [
                {(openssl)}
                {(req)}
                {(-new)}
                {(-key)}
                {(DQ (${ VSub_Name KUBE_KEY))}
                {(-out)}
                {(DQ (${ VSub_Name API_SERVER_CERT_REQ))}
                {(-subj)}
                {(DQ ("/CN=kube-apiserver"))}
                {(-config)}
                {(cluster/libvirt-coreos/openssl.cnf)}
              ]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[748])]
              more_env: [
                (env_pair
                  name: KUBERNETES_SVC
                  val: 
                    {
                      (BracedVarSub
                        token: <VSub_Name SERVICE_CLUSTER_IP_RANGE>
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(".*")})
                        spids: [709 713]
                      ) (.1)
                    }
                  spids: [708]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_CERT)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name KUBE_CERT>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(DQ ($ VSub_Name "$tempdir") (/apiserver.pem))}
                          )
                        spids: [753 760]
                      )
                    }
                  spids: [752]
                )
              ]
              spids: [752]
            )
            (SimpleCommand
              words: [
                {(openssl)}
                {(x509)}
                {(-req)}
                {(-in)}
                {(DQ (${ VSub_Name API_SERVER_CERT_REQ))}
                {(-CA)}
                {(DQ (${ VSub_Name CA_CERT))}
                {(-CAkey)}
                {(DQ (${ VSub_Name CA_KEY))}
                {(-CAcreateserial)}
                {(-out)}
                {(DQ (${ VSub_Name KUBE_CERT))}
                {(-days)}
                {(365)}
                {(-extensions)}
                {(v3_req)}
                {(-extfile)}
                {(cluster/libvirt-coreos/openssl.cnf)}
              ]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[823])]
              more_env: [
                (env_pair
                  name: KUBERNETES_SVC
                  val: 
                    {
                      (BracedVarSub
                        token: <VSub_Name SERVICE_CLUSTER_IP_RANGE>
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(".*")})
                        spids: [764 768]
                      ) (.1)
                    }
                  spids: [763]
                )
              ]
            )
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/certs))})
            (C {(cp)} {(DQ (${ VSub_Name KUBE_CERT))} 
              {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/certs))}
            )
            (C {(cp)} {(DQ (${ VSub_Name KUBE_KEY))} 
              {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/certs))}
            )
            (C {(cp)} {(DQ (${ VSub_Name CA_CERT))} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/certs))})
            (ForExpr
              init: 
                (BinaryAssign
                  op_id: Arith_Equal
                  left: (LhsName name:i)
                  right: (ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (ArithBinary
                  op_id: Arith_Less
                  left: (ArithVarRef name:i)
                  right: (ArithWord w:{($ VSub_Name "$NUM_NODES")})
                )
              update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
              body: 
                (DoGroup
                  children: [
                    (SimpleCommand
                      words: [
                        {(openssl)}
                        {(genrsa)}
                        {(-out)}
                        {($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [927 932]
                          ) (-node-key.pem)
                        }
                        {(2048)}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[937])]
                    )
                    (C {(cp)} 
                      {
                        (DQ ($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [946 951]
                          ) (-node-key.pem)
                        )
                      } {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/certs))}
                    )
                    (SimpleCommand
                      words: [
                        {(openssl)}
                        {(req)}
                        {(-new)}
                        {(-key)}
                        {($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [979 984]
                          ) (-node-key.pem)
                        }
                        {(-out)}
                        {($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [991 996]
                          ) (-node.csr)
                        }
                        {(-subj)}
                        {
                          (DQ ("/CN=") 
                            (BracedVarSub
                              token: <VSub_Name node_names>
                              bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                              spids: [1003 1008]
                            )
                          )
                        }
                        {(-config)}
                        {(cluster/libvirt-coreos/node-openssl.cnf)}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[1015])]
                      more_env: [
                        (env_pair
                          name: WORKER_IP
                          val: 
                            {
                              (BracedVarSub
                                token: <VSub_Name NODE_IPS>
                                bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                spids: [962 967]
                              )
                            }
                          spids: [961]
                        )
                      ]
                    )
                    (SimpleCommand
                      words: [
                        {(openssl)}
                        {(x509)}
                        {(-req)}
                        {(-in)}
                        {($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [1037 1042]
                          ) (-node.csr)
                        }
                        {(-CA)}
                        {(DQ (${ VSub_Name CA_CERT))}
                        {(-CAkey)}
                        {(DQ (${ VSub_Name CA_KEY))}
                        {(-CAcreateserial)}
                        {(-out)}
                        {($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [1067 1072]
                          ) (-node.pem)
                        }
                        {(-days)}
                        {(365)}
                        {(-extensions)}
                        {(v3_req)}
                        {(-extfile)}
                        {(cluster/libvirt-coreos/node-openssl.cnf)}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[1087])]
                      more_env: [
                        (env_pair
                          name: WORKER_IP
                          val: 
                            {
                              (BracedVarSub
                                token: <VSub_Name NODE_IPS>
                                bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                spids: [1020 1025]
                              )
                            }
                          spids: [1019]
                        )
                      ]
                    )
                    (C {(cp)} 
                      {
                        (DQ ($ VSub_Name "$tempdir") (/) 
                          (BracedVarSub
                            token: <VSub_Name node_names>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [1096 1101]
                          ) (-node.pem)
                        )
                      } {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/certs))}
                    )
                  ]
                  spids: [916 1111]
                )
            )
            (C {(echo)} {(DQ ("TLS assets generated..."))})
          ]
          spids: [558]
        )
      spids: [554 557]
    )
    (FuncDef
      name: setup_registry_proxy
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ ($ VSub_Name "$ENABLE_CLUSTER_REGISTRY"))}
                              right: {(DQ (true))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(cp)} 
                      {(DQ (./cluster/saltbase/salt/kube-registry-proxy/kube-registry-proxy.yaml))} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/manifests))}
                    )
                  ]
                  spids: [-1 1150]
                )
              ]
              spids: [-1 1165]
            )
          ]
          spids: [1130]
        )
      spids: [1126 1129]
    )
    (FuncDef
      name: verify-prereqs
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(which)} {(virsh)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [1188]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("Can't find virsh in PATH, please fix and retry."))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1201])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 1192]
                )
              ]
              spids: [-1 1210]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(virsh)} {(nodeinfo)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [1221]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(exit)} {(1)})]
                  spids: [-1 1225]
                )
              ]
              spids: [-1 1233]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_ne
                              left: 
                                {
                                  (DQ 
                                    (CommandSubPart
                                      command_list: 
                                        (CommandList
                                          children: [
                                            (SimpleCommand
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_Less
                                                  fd: -1
                                                  arg_word: {(/sys/kernel/mm/ksm/run)}
                                                  spids: [1242]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                      left_token: <Left_CommandSub "$(">
                                      spids: [1241 1244]
                                    )
                                  )
                                }
                              right: {(DQ (1))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("KSM is not enabled"))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1265])]
                    )
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(DQ ("Enabling it would reduce the memory footprint of large clusters"))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1275])]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (DBracket expr:(BoolUnary op_id:BoolUnary_t child:{(0)}))
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(read)} {(-t)} {(5)} {(-n)} {(1)} {(-p)} 
                              {(DQ ("Do you want to enable KSM (requires root password) (y/n)? "))} {(answer)}
                            )
                            (C {(echo)} {(DQ )})
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: 
                                            (BoolBinary
                                              op_id: BoolBinary_GlobDEqual
                                              left: {(DQ ($ VSub_Name "$answer"))}
                                              right: {(SQ <y>)}
                                            )
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [(C {(su)} {(-c)} {(SQ <"echo 1 > /sys/kernel/mm/ksm/run">)})]
                                  spids: [-1 1335]
                                )
                              ]
                              spids: [-1 1347]
                            )
                          ]
                          spids: [-1 1290]
                        )
                      ]
                      else_action: [
                        (SimpleCommand
                          words: [{(echo)} {(DQ ("You can enable it with (as root):"))}]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1359])]
                        )
                        (SimpleCommand
                          words: [{(echo)} {(DQ )}]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1368])]
                        )
                        (SimpleCommand
                          words: [{(echo)} {(DQ ("  echo 1 > /sys/kernel/mm/ksm/run"))}]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1378])]
                        )
                        (SimpleCommand
                          words: [{(echo)} {(DQ )}]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1387])]
                        )
                      ]
                      spids: [1350 1391]
                    )
                  ]
                  spids: [-1 1256]
                )
              ]
              spids: [-1 1394]
            )
          ]
          spids: [1177]
        )
      spids: [1173 1176]
    )
    (FuncDef
      name: destroy-pool
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(virsh)} {(pool-info)} {($ VSub_Name "$POOL")}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(/dev/null)}
                      spids: [1427]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[1430])
                  ]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
              op_id: Op_DPipe
            )
            (C {(rm)} {(-rf)} {(DQ ($ VSub_Name "$POOL_PATH")) (/kubernetes/) (Lit_Other "*")})
            (C {(rm)} {(-rf)} 
              {(DQ ($ VSub_Name "$POOL_PATH")) (/kubernetes_config) (Lit_Other "*") (/) (Lit_Other "*")}
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:vol) op:Equal spids:[1465])]
              spids: [1463]
            )
            (Pipeline
              children: [
                (C {(virsh)} {(vol-list)} {($ VSub_Name "$POOL")})
                (C {(awk)} {(SQ <"NR>2 && !/^$/ && $1 ~ /^kubernetes/ {print $1}">)})
                (While
                  cond: [(Sentence child:(C {(read)} {(vol)}) terminator:<Op_Semi ";">)]
                  body: 
                    (DoGroup
                      children: [
                        (C {(virsh)} {(vol-delete)} {($ VSub_Name "$vol")} {(--pool)} 
                          {($ VSub_Name "$POOL")}
                        )
                      ]
                      spids: [1493 1507]
                    )
                )
              ]
              negated: False
            )
            (AndOr
              children: [
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ ($ VSub_Number "$1"))}
                      right: {(SQ <keep_base_image>)}
                    )
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
              op_id: Op_DAmp
            )
            (C {(set)} {(Lit_Other "+") (e)})
            (C {(virsh)} {(vol-delete)} {(coreos_base.img)} {(--pool)} {($ VSub_Name "$POOL")})
            (C {(virsh)} {(pool-destroy)} {($ VSub_Name "$POOL")})
            (C {(rmdir)} {(DQ ($ VSub_Name "$POOL_PATH"))})
            (C {(set)} {(-e)})
          ]
          spids: [1418]
        )
      spids: [1414 1417]
    )
    (FuncDef
      name: initialize-pool
      body: 
        (BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$POOL_PATH"))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(virsh)} {(pool-info)} {($ VSub_Name "$POOL")}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [1604]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [1607]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(virsh)} {(pool-create-as)} {($ VSub_Name "$POOL")} {(dir)} {(--target)} 
                      {(DQ ($ VSub_Name "$POOL_PATH"))}
                    )
                  ]
                  spids: [-1 1611]
                )
              ]
              spids: [-1 1629]
            )
            (C {(wget)} {(-N)} {(-P)} {(DQ ($ VSub_Name "$ROOT"))} 
              {(https) (Lit_Other ":") (//) 
                (BracedVarSub
                  token: <VSub_Name COREOS_CHANNEL>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(alpha)})
                  spids: [1646 1650]
                ) (.release.core-os.net/amd64-usr/current/coreos_production_qemu_image.img.bz2)
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_nt
                              left: 
                                {(DQ ($ VSub_Name "$ROOT") (/coreos_production_qemu_image.img.bz2))}
                              right: {(DQ ($ VSub_Name "$POOL_PATH") (/coreos_base.img))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(bunzip2)} {(-f)} {(-k)} 
                      {(DQ ($ VSub_Name "$ROOT") (/coreos_production_qemu_image.img.bz2))}
                    )
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [
                            {(virsh)}
                            {(vol-delete)}
                            {(coreos_base.img)}
                            {(--pool)}
                            {($ VSub_Name "$POOL")}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [1698]
                            )
                          ]
                        )
                        (C {(true)})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 1673]
                )
              ]
              spids: [-1 1707]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(virsh)} {(vol-list)} {($ VSub_Name "$POOL")})
                            (C {(grep)} {(-q)} {(coreos_base.img)})
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(virsh)} {(vol-create-as)} {($ VSub_Name "$POOL")} {(coreos_base.img)} {(10G)} 
                      {(--format)} {(qcow2)}
                    )
                    (C {(virsh)} {(vol-upload)} {(coreos_base.img)} 
                      {(DQ ($ VSub_Name "$ROOT") (/coreos_production_qemu_image.img))} {(--pool)} {($ VSub_Name "$POOL")}
                    )
                  ]
                  spids: [-1 1729]
                )
              ]
              spids: [-1 1763]
            )
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes))})
            (C {(kube-push-internal)})
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/manifests))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ ($ VSub_Name "$ENABLE_NODE_LOGGING"))}
                              right: {(DQ (true))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ ($ VSub_Name "$LOGGING_DESTINATION"))}
                                      right: {(DQ (elasticsearch))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(cp)} 
                              {
                                (DQ ($ VSub_Name "$KUBE_ROOT") 
                                  (/cluster/saltbase/salt/fluentd-es/fluentd-es.manifest)
                                )
                              } {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/manifests))}
                            )
                          ]
                          spids: [-1 1828]
                        )
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ ($ VSub_Name "$LOGGING_DESTINATION"))}
                                      right: {(DQ (gcp))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(cp)} 
                              {
                                (DQ ($ VSub_Name "$KUBE_ROOT") 
                                  (/cluster/saltbase/salt/fluentd-gcp/fluentd-gcp.manifest)
                                )
                              } {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/manifests))}
                            )
                          ]
                          spids: [1844 1861]
                        )
                      ]
                      spids: [-1 1877]
                    )
                  ]
                  spids: [-1 1808]
                )
              ]
              spids: [-1 1880]
            )
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/addons))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ ($ VSub_Name "$ENABLE_CLUSTER_DNS"))}
                              right: {(DQ (true))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(render-template)} {(DQ ($ VSub_Name "$ROOT") (/namespace.yaml))}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: 
                            {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/addons/namespace.yaml))}
                          spids: [1921]
                        )
                      ]
                    )
                    (SimpleCommand
                      words: [{(render-template)} {(DQ ($ VSub_Name "$ROOT") (/kube-dns.yaml))}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: 
                            {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/addons/kube-dns.yaml))}
                          spids: [1936]
                        )
                      ]
                    )
                  ]
                  spids: [-1 1911]
                )
              ]
              spids: [-1 1944]
            )
            (C {(virsh)} {(pool-refresh)} {($ VSub_Name "$POOL")})
          ]
          spids: [1582]
        )
      spids: [1578 1581]
    )
    (FuncDef
      name: destroy-network
      body: 
        (BraceGroup
          children: [
            (C {(set)} {(Lit_Other "+") (e)})
            (C {(virsh)} {(net-destroy)} {(kubernetes_global)})
            (C {(virsh)} {(net-destroy)} {(kubernetes_pods)})
            (C {(set)} {(-e)})
          ]
          spids: [1961]
        )
      spids: [1957 1960]
    )
    (FuncDef
      name: initialize-network
      body: 
        (BraceGroup
          children: [
            (C {(virsh)} {(net-create)} {(DQ ($ VSub_Name "$ROOT") (/network_kubernetes_global.xml))})
            (C {(virsh)} {(net-create)} {(DQ ($ VSub_Name "$ROOT") (/network_kubernetes_pods.xml))})
          ]
          spids: [1995]
        )
      spids: [1991 1994]
    )
    (FuncDef
      name: render-template
      body: 
        (BraceGroup
          children: [
            (C {(eval)} 
              {
                (DQ ("echo ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(cat)} {($ VSub_Number "$1")})])
                    left_token: <Left_CommandSub "$(">
                    spids: [2032 2036]
                  ) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                )
              }
            )
          ]
          spids: [2024]
        )
      spids: [2020 2023]
    )
    (FuncDef
      name: wait-cluster-readiness
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Wait for cluster readiness"))})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:timeout) op:Equal rhs:{(120)} spids:[2060])]
              spids: [2058]
            )
            (While
              cond: [
                (Sentence
                  child: 
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_ne
                          left: {($ VSub_Name "$timeout")}
                          right: {(0)}
                        )
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:nb_ready_nodes)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (AndOr
                                        children: [
                                          (Pipeline
                                            children: [
                                              (SimpleCommand
                                                words: [
                                                  {(kubectl)}
                                                  {(get)}
                                                  {(nodes)}
                                                  {(-o)}
                                                  {(go-template) (Lit_Other "=") 
                                                    (DQ 
                                                      (
"{{range.items}}{{range.status.conditions}}{{.type}}{{end}}:{{end}}"
                                                      )
                                                    )
                                                  }
                                                ]
                                                redirects: [
                                                  (Redir
                                                    op_id: Redir_Great
                                                    fd: 2
                                                    arg_word: {(/dev/null)}
                                                    spids: [2096]
                                                  )
                                                ]
                                              )
                                              (C {(tr)} {(SQ <":">)} {(SQ <"\\n">)})
                                              (C {(grep)} {(-c)} {(Ready)})
                                            ]
                                            negated: False
                                          )
                                          (C {(true)})
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [2081 2122]
                              )
                            }
                          spids: [2080]
                        )
                      ]
                      spids: [2080]
                    )
                    (C {(echo)} 
                      {
                        (DQ ("Nb ready nodes: ") ($ VSub_Name "$nb_ready_nodes") (" / ") 
                          ($ VSub_Name "$NUM_NODES")
                        )
                      }
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_eq
                                      left: {(DQ ($ VSub_Name "$nb_ready_nodes"))}
                                      right: {(DQ ($ VSub_Name "$NUM_NODES"))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                          spids: [-1 2152]
                        )
                      ]
                      spids: [-1 2160]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:timeout)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name "$timeout")})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [2165 2170]
                              )
                            }
                          spids: [2164]
                        )
                      ]
                      spids: [2164]
                    )
                    (C {(sleep)} {(.5)})
                  ]
                  spids: [2077 2178]
                )
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [2047]
        )
      spids: [2043 2046]
    )
    (FuncDef
      name: kube-up
      body: 
        (BraceGroup
          children: [
            (C {(detect-master)})
            (C {(detect-nodes)})
            (C {(initialize-pool)} {(keep_base_image)})
            (C {(generate_certs)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name NODE_NAMES>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [2213 2218]
                  )
                )
              }
            )
            (C {(setup_registry_proxy)})
            (C {(initialize-network)})
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ssh_keys)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(cat)} 
                                      {(TildeSubPart prefix:"") (/.ssh/) (Lit_Other "*") (.pub)}
                                    )
                                    (C {(sed)} {(SQ <"s/^/  - /">)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [2233 2248]
                        )
                      )
                    }
                  spids: [2231]
                )
              ]
              spids: [2229]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:kubernetes_dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes))}
                  spids: [2254]
                )
              ]
              spids: [2252]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:i) op:Equal spids:[2264])]
              spids: [2262]
            )
            (ForExpr
              init: 
                (BinaryAssign
                  op_id: Arith_Equal
                  left: (LhsName name:i)
                  right: (ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (ArithBinary
                  op_id: Arith_LessEqual
                  left: (ArithVarRef name:i)
                  right: (ArithWord w:{($ VSub_Name "$NUM_NODES")})
                )
              update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_eq
                                      left: {($ VSub_Name "$i")}
                                      right: {($ VSub_Name "$NUM_NODES")}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {(etcd2_initial_cluster) (Lit_Other "[") ($ VSub_Name "$i") 
                                (Lit_Other "]") (Lit_Other "=") (DQ (${ VSub_Name MASTER_NAME) ("=http://") (${ VSub_Name MASTER_IP) (":2380"))
                              }
                            )
                          ]
                          spids: [-1 2310]
                        )
                      ]
                      else_action: [
                        (C 
                          {(etcd2_initial_cluster) (Lit_Other "[") ($ VSub_Name "$i") (Lit_Other "]") 
                            (Lit_Other "=") 
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name NODE_NAMES>
                                bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                spids: [2339 2344]
                              ) ("=http://") 
                              (BracedVarSub
                                token: <VSub_Name NODE_IPS>
                                bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                spids: [2346 2351]
                              ) (":2380")
                            )
                          }
                        )
                      ]
                      spids: [2330 2356]
                    )
                  ]
                  spids: [2294 2359]
                )
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:etcd2_initial_cluster)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(join)} {(Lit_Comma ",")} 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name etcd2_initial_cluster>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2369 2374]
                                    )
                                  )
                                }
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [2363 2376]
                      )
                    }
                  spids: [2362]
                )
              ]
              spids: [2362]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:machines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(join)} {(Lit_Comma ",")} 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name KUBE_NODE_IP_ADDRESSES>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2388 2393]
                                    )
                                  )
                                }
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [2382 2395]
                      )
                    }
                  spids: [2381]
                )
              ]
              spids: [2379]
            )
            (ForExpr
              init: 
                (BinaryAssign
                  op_id: Arith_Equal
                  left: (LhsName name:i)
                  right: (ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (ArithBinary
                  op_id: Arith_LessEqual
                  left: (ArithVarRef name:i)
                  right: (ArithWord w:{($ VSub_Name "$NUM_NODES")})
                )
              update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_eq
                                      left: {($ VSub_Name "$i")}
                                      right: {($ VSub_Name "$NUM_NODES")}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:type)
                                  op: Equal
                                  rhs: {(master)}
                                  spids: [2445]
                                )
                              ]
                              spids: [2445]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:name)
                                  op: Equal
                                  rhs: {($ VSub_Name "$MASTER_NAME")}
                                  spids: [2449]
                                )
                              ]
                              spids: [2449]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:public_ip)
                                  op: Equal
                                  rhs: {($ VSub_Name "$MASTER_IP")}
                                  spids: [2453]
                                )
                              ]
                              spids: [2453]
                            )
                          ]
                          spids: [-1 2442]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:type)
                              op: Equal
                              rhs: 
                                {(node-) 
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [(C {(printf)} {(DQ ("%02d"))} {($ VSub_Name "$i")})]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [2462 2470]
                                  )
                                }
                              spids: [2460]
                            )
                          ]
                          spids: [2460]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:name)
                              op: Equal
                              rhs: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name NODE_NAMES>
                                    bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                    spids: [2474 2479]
                                  )
                                }
                              spids: [2473]
                            )
                          ]
                          spids: [2473]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:public_ip)
                              op: Equal
                              rhs: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name NODE_IPS>
                                    bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                                    spids: [2483 2488]
                                  )
                                }
                              spids: [2482]
                            )
                          ]
                          spids: [2482]
                        )
                      ]
                      spids: [2457 2491]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:image)
                          op: Equal
                          rhs: {($ VSub_Name "$name") (.img)}
                          spids: [2494]
                        )
                      ]
                      spids: [2494]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:config)
                          op: Equal
                          rhs: {(kubernetes_config_) ($ VSub_Name "$type")}
                          spids: [2499]
                        )
                      ]
                      spids: [2499]
                    )
                    (C {(virsh)} {(vol-create-as)} {($ VSub_Name "$POOL")} {($ VSub_Name "$image")} 
                      {(10G)} {(--format)} {(qcow2)} {(--backing-vol)} {(coreos_base.img)} {(--backing-vol-format)} {(qcow2)}
                    )
                    (C {(mkdir)} {(-p)} 
                      {
                        (DQ ($ VSub_Name "$POOL_PATH") (/) ($ VSub_Name "$config") (/openstack/latest))
                      }
                    )
                    (SimpleCommand
                      words: [{(render-template)} {(DQ ($ VSub_Name "$ROOT") (/user_data.yml))}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: 
                            {
                              (DQ ($ VSub_Name "$POOL_PATH") (/) ($ VSub_Name "$config") 
                                (/openstack/latest/user_data)
                              )
                            }
                          spids: [2548]
                        )
                      ]
                    )
                    (C {(virsh)} {(pool-refresh)} {($ VSub_Name "$POOL")})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:domain_xml)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(mktemp)})])
                                left_token: <Left_CommandSub "$(">
                                spids: [2567 2569]
                              )
                            }
                          spids: [2566]
                        )
                      ]
                      spids: [2566]
                    )
                    (SimpleCommand
                      words: [{(render-template)} {($ VSub_Name "$ROOT") (/coreos.xml)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {($ VSub_Name "$domain_xml")}
                          spids: [2577]
                        )
                      ]
                    )
                    (C {(virsh)} {(create)} {($ VSub_Name "$domain_xml")})
                    (C {(rm)} {($ VSub_Name "$domain_xml")})
                  ]
                  spids: [2426 2594]
                )
            )
            (C {(export)} {(Lit_VarLike "KUBE_SERVER=") (DQ ("http://192.168.10.1:8080"))})
            (C {(export)} {(Lit_VarLike "CONTEXT=") (DQ (libvirt-coreos))})
            (C {(create-kubeconfig)})
            (C {(create-kubelet-kubeconfig)} {(DQ ("http://") (${ VSub_Name MASTER_IP) (":8080"))} 
              {(DQ (${ VSub_Name POOL_PATH) (/kubernetes/kubeconfig/kubelet.kubeconfig))}
            )
            (C {(wait-cluster-readiness)})
            (C {(echo)} {(DQ ("Kubernetes cluster is running. The master is running at:"))})
            (C {(echo)})
            (C {(echo)} {(DQ ("  http://") (${ VSub_Name KUBE_MASTER_IP) (":8080"))})
            (C {(echo)})
            (C {(echo)} {(DQ ("You can control the Kubernetes cluster with: 'kubectl'"))})
            (C {(echo)} 
              {
                (DQ ("You can connect on the master with: 'ssh core@") (${ VSub_Name KUBE_MASTER_IP) 
                  ("'")
                )
              }
            )
            (C {(wait-registry-readiness)})
          ]
          spids: [2196]
        )
      spids: [2192 2195]
    )
    (FuncDef
      name: create_registry_rc
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ (" Create registry replication controller"))})
            (C {(kubectl)} {(create)} {(-f)} {($ VSub_Name "$ROOT") (/registry-rc.yaml)})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:timeout) op:Equal rhs:{(120)} spids:[2717])]
              spids: [2715]
            )
            (While
              cond: [
                (Sentence
                  child: 
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_ne
                          left: {($ VSub_Name "$timeout")}
                          right: {(0)}
                        )
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:phase)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(kubectl)} {(get)} {(pods)} {(-n)} {(kube-system)} 
                                        {(-lk8s-app) (Lit_Other "=") (kube-registry)} {(--output) (Lit_Other "=") (SQ <"jsonpath={.items..status.phase}">)}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [2738 2758]
                              )
                            }
                          spids: [2737]
                        )
                      ]
                      spids: [2737]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$phase"))} {(Lit_Other "=")} 
                                  {(DQ (Running))} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                          spids: [-1 2778]
                        )
                      ]
                      spids: [-1 2786]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:timeout)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name "$timeout")})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [2790 2795]
                              )
                            }
                          spids: [2789]
                        )
                      ]
                      spids: [2789]
                    )
                    (C {(sleep)} {(.5)})
                  ]
                  spids: [2734 2803]
                )
            )
          ]
          spids: [2695]
        )
      spids: [2689 2694]
    )
    (FuncDef
      name: create_registry_svc
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ (" Create registry service"))})
            (C {(kubectl)} {(create)} {(-f)} 
              {(DQ (${ VSub_Name KUBE_ROOT) (/cluster/addons/registry/registry-svc.yaml))}
            )
          ]
          spids: [2815]
        )
      spids: [2809 2814]
    )
    (FuncDef
      name: wait-registry-readiness
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {(DQ ($ VSub_Name "$ENABLE_CLUSTER_REGISTRY"))}
                              right: {(DQ (true))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [-1 2867]
                )
              ]
              spids: [-1 2875]
            )
            (C {(echo)} {(DQ ("Wait for registry readiness..."))})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:timeout) op:Equal rhs:{(120)} spids:[2887])]
              spids: [2885]
            )
            (While
              cond: [
                (Sentence
                  child: 
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_ne
                          left: {($ VSub_Name "$timeout")}
                          right: {(0)}
                        )
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:phase)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(kubectl)} {(get)} {(namespaces)} 
                                        {(--output) (Lit_Other "=") (Lit_VarLike "jsonpath=") 
                                          (SQ 
                                            <
"{.items[?(@.metadata.name==\"kube-system\")].status.phase}"
                                            >
                                          )
                                        }
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [2908 2921]
                              )
                            }
                          spids: [2907]
                        )
                      ]
                      spids: [2907]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$phase"))} {(Lit_Other "=")} 
                                  {(DQ (Active))} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(create_registry_rc)})
                            (C {(create_registry_svc)})
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(0)}
                            )
                          ]
                          spids: [-1 2941]
                        )
                      ]
                      spids: [-1 2955]
                    )
                    (C {(echo)} {(DQ ("waiting for namespace kube-system"))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:timeout)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name "$timeout")})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [2966 2971]
                              )
                            }
                          spids: [2965]
                        )
                      ]
                      spids: [2965]
                    )
                    (C {(sleep)} {(.5)})
                  ]
                  spids: [2904 2979]
                )
            )
          ]
          spids: [2847]
        )
      spids: [2841 2846]
    )
    (FuncDef
      name: kube-down
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(virsh)} {(list)})
                (C {(awk)} {(SQ <"NR>2 && !/^$/ && $2 ~ /^kubernetes/ {print $2}">)})
                (While
                  cond: [(Sentence child:(C {(read)} {(dom)}) terminator:<Op_Semi ";">)]
                  body: 
                    (DoGroup
                      children: [(C {(virsh)} {(destroy)} {($ VSub_Name "$dom")})]
                      spids: [3017 3027]
                    )
                )
              ]
              negated: False
            )
            (C {(destroy-pool)} {(keep_base_image)})
            (C {(destroy-network)})
          ]
          spids: [2991]
        )
      spids: [2987 2990]
    )
    (FuncDef
      name: upload-server-tars
      body: 
        (BraceGroup
          children: [
            (C {(tar)} {(-x)} {(-C)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes))} {(-f)} 
              {(DQ ($ VSub_Name "$SERVER_BINARY_TAR"))} {(kubernetes)}
            )
            (C {(rm)} {(-rf)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/bin))})
            (C {(mv)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/kubernetes/server/bin))} 
              {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/bin))}
            )
            (C {(chmod)} {(-R)} {(755)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/bin))})
            (C {(rm)} {(-fr)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/kubernetes))})
          ]
          spids: [3047]
        )
      spids: [3043 3046]
    )
    (FuncDef
      name: kube-push
      body: 
        (BraceGroup
          children: [
            (C {(kube-push-internal)})
            (C {(ssh-to-node)} {(DQ ($ VSub_Name "$MASTER_NAME"))} 
              {(DQ ("sudo systemctl restart kube-apiserver kube-controller-manager kube-scheduler"))}
            )
            (ForExpr
              init: 
                (BinaryAssign
                  op_id: Arith_Equal
                  left: (LhsName name:i)
                  right: (ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (ArithBinary
                  op_id: Arith_Less
                  left: (ArithVarRef name:i)
                  right: (ArithVarRef name:NUM_NODES)
                )
              update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
              body: 
                (DoGroup
                  children: [
                    (C {(ssh-to-node)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name NODE_NAMES>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                            spids: [3168 3173]
                          )
                        )
                      } {(DQ ("sudo systemctl restart kubelet kube-proxy"))}
                    )
                  ]
                  spids: [3162 3181]
                )
            )
            (C {(wait-cluster-readiness)})
          ]
          spids: [3124]
        )
      spids: [3120 3123]
    )
    (FuncDef
      name: kube-push-internal
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: 
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name KUBE_PUSH>
                      suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(release)})
                      spids: [3199 3203]
                    )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [{(release)}]
                  action: [(C {(kube-push-release)})]
                  spids: [3209 3210 3214 -1]
                )
                (case_arm
                  pat_list: [{(Assign_Local local)}]
                  action: [(C {(kube-push-local)})]
                  spids: [3217 3218 3222 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("The only known push methods are ") 
                            (EscapedLiteralPart
                              token: <Lit_EscapedChar "\\\"">
                            ) (release) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" to use the release tarball or ") 
                            (EscapedLiteralPart
                              token: <Lit_EscapedChar "\\\"">
                            ) (local) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                            (" to use the binaries built by make. KUBE_PUSH is set ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$KUBE_PUSH") 
                            (EscapedLiteralPart
                              token: <Lit_EscapedChar "\\\"">
                            )
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[3246])]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [3225 3226 3253 -1]
                )
              ]
              spids: [3196 3206 3256]
            )
          ]
          spids: [3193]
        )
      spids: [3189 3192]
    )
    (FuncDef
      name: kube-push-release
      body: (BraceGroup children:[(C {(find-release-tars)})(C {(upload-server-tars)})] spids:[3265])
      spids: [3261 3264]
    )
    (FuncDef
      name: kube-push-local
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-rf)} {(DQ ($ VSub_Name "$POOL_PATH") ("/kubernetes/bin/*"))})
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/bin))})
            (C {(cp)} {(DQ (${ VSub_Name KUBE_ROOT) (/_output/local/go/bin)) (/) (Lit_Other "*")} 
              {(DQ ($ VSub_Name "$POOL_PATH") (/kubernetes/bin))}
            )
          ]
          spids: [3280]
        )
      spids: [3276 3279]
    )
    (FuncDef
      name: test-build-release
      body: (BraceGroup children:[(C {(echo)} {(DQ (TODO))})] spids:[3329])
      spids: [3325 3328]
    )
    (FuncDef
      name: test-setup
      body: 
        (BraceGroup
          children: [(C {(DQ (${ VSub_Name KUBE_ROOT) (/cluster/kube-up.sh))})]
          spids: [3348]
        )
      spids: [3344 3347]
    )
    (FuncDef
      name: test-teardown
      body: (BraceGroup children:[(C {(kube-down)})] spids:[3368])
      spids: [3364 3367]
    )
    (FuncDef
      name: ssh-to-node
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:node)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [3388]
                )
              ]
              spids: [3386]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cmd)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [3396]
                )
              ]
              spids: [3394]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:machine) op:Equal spids:[3404])]
              spids: [3402]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (DBracket
                              expr: 
                                (BoolBinary
                                  op_id: BoolBinary_GlobDEqual
                                  left: {(DQ ($ VSub_Name "$node"))}
                                  right: {(DQ ($ VSub_Name "$MASTER_IP"))}
                                )
                            )
                            (DBracket
                              expr: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(DQ ($ VSub_Name "$node"))}
                                  right: {(Lit_Other "^") (DQ ($ VSub_Name "$NODE_IP_BASE"))}
                                )
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:machine)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$node"))}
                          spids: [3445]
                        )
                      ]
                      spids: [3445]
                    )
                  ]
                  spids: [-1 3442]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ ($ VSub_Name "$node"))}
                              right: {(DQ ($ VSub_Name "$MASTER_NAME"))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:machine)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$MASTER_IP"))}
                          spids: [3471]
                        )
                      ]
                      spids: [3471]
                    )
                  ]
                  spids: [3451 3468]
                )
              ]
              else_action: [
                (ForExpr
                  init: 
                    (BinaryAssign
                      op_id: Arith_Equal
                      left: (LhsName name:i)
                      right: (ArithWord w:{(Lit_Digits 0)})
                    )
                  cond: 
                    (ArithBinary
                      op_id: Arith_Less
                      left: (ArithVarRef name:i)
                      right: (ArithVarRef name:NUM_NODES)
                    )
                  update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
                  body: 
                    (DoGroup
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (DBracket
                                      expr: 
                                        (BoolBinary
                                          op_id: BoolBinary_GlobDEqual
                                          left: {(DQ ($ VSub_Name "$node"))}
                                          right: 
                                            {
                                              (DQ 
                                                (BracedVarSub
                                                  token: <VSub_Name NODE_NAMES>
                                                  bracket_op: 
                                                    (ArrayIndex
                                                      expr: (ArithWord w:{($ VSub_Name "$i")})
                                                    )
                                                  spids: [3515 3520]
                                                )
                                              )
                                            }
                                        )
                                    )
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:machine)
                                      op: Equal
                                      rhs: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              token: <VSub_Name NODE_IPS>
                                              bracket_op: 
                                                (ArrayIndex
                                                  expr: (ArithWord w:{($ VSub_Name "$i")})
                                                )
                                              spids: [3531 3536]
                                            )
                                          )
                                        }
                                      spids: [3529]
                                    )
                                  ]
                                  spids: [3529]
                                )
                                (ControlFlow
                                  token: <ControlFlow_Break break>
                                )
                              ]
                              spids: [-1 3526]
                            )
                          ]
                          spids: [-1 3543]
                        )
                      ]
                      spids: [3501 3546]
                    )
                )
              ]
              spids: [3477 3549]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$machine"))})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ($ VSub_Name "$node") (" is an unknown machine to ssh to"))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[3575])]
                    )
                  ]
                  spids: [-1 3565]
                )
              ]
              spids: [-1 3579]
            )
            (C {(ssh)} {(-o)} {(Lit_VarLike "ConnectTimeout=") (30)} {(-o)} 
              {(Lit_VarLike "StrictHostKeyChecking=") (no)} {(-o)} {(Lit_VarLike "UserKnownHostsFile=") (/dev/null)} {(-o)} {(Lit_VarLike "ControlMaster=") (no)} 
              {(DQ ("core@") ($ VSub_Name "$machine"))} {(DQ ($ VSub_Name "$cmd"))}
            )
          ]
          spids: [3383]
        )
      spids: [3379 3382]
    )
    (FuncDef
      name: prepare-e2e
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ("libvirt-coreos doesn't need special preparations for e2e tests"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[3634])]
            )
          ]
          spids: [3625]
        )
      spids: [3619 3624]
    )
  ]
)