(command.CommandList
  children: [
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <Id.Lit_LBracket '['>
          more_env: []
          words: [
            {<Id.Lit_LBracket '['>}
            {<Id.KW_Bang '!'>}
            {<-z>}
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name UTIL_SH_DEBUG>
                var_name: UTIL_SH_DEBUG
                suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<x>})
                right: <Id.Right_DollarBrace '}'>
              )
            }
            {<Id.Lit_RBracket ']'>}
          ]
          redirects: []
          do_fork: T
        )
        (command.Simple
          blame_tok: <set>
          more_env: []
          words: [{<set>} {<-x>}]
          redirects: []
          do_fork: T
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <command>
          more_env: []
          words: [{<command>} {<-v>} {<kubectl>}]
          redirects: [
            (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
            (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
          ]
          do_fork: T
        )
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'kubectl not found in path. Aborting.'>)}]
                  redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Sentence
              child: (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              terminator: <Id.Op_Semi _>
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'KUBE_ROOT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'KUBE_ROOT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'KUBE_ROOT='> name:KUBE_ROOT)
          op: assign_op.Equal
          rhs: 
            {
              (CommandSub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    blame_tok: <dirname>
                    more_env: []
                    words: [{<dirname>} {(DQ (${ Id.VSub_Name BASH_SOURCE))}]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Eof_RParen _>
              ) <'/../..'>
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [
        {<readonly>}
        {<Id.Lit_VarLike 'ROOT='> 
          (CommandSub
            left_token: <Id.Left_DollarParen '$('>
            child: 
              (command.Simple
                blame_tok: <dirname>
                more_env: []
                words: [{<dirname>} {(DQ (${ Id.VSub_Name BASH_SOURCE))}]
                redirects: []
                do_fork: T
              )
            right: <Id.Eof_RParen _>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [
        {<source>}
        {
          (DQ ($ Id.VSub_DollarName ROOT) <'/'> 
            (BracedVarSub
              left: <Id.Left_DollarBrace '${'>
              token: <Id.VSub_Name KUBE_CONFIG_FILE>
              var_name: KUBE_CONFIG_FILE
              suffix_op: 
                (suffix_op.Unary
                  op: <Id.VTest_ColonHyphen _>
                  arg_word: {(DQ <config-default.sh>)}
                )
              right: <Id.Right_DollarBrace '}'>
            )
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [{<source>} {(DQ ($ Id.VSub_DollarName KUBE_ROOT) <'/cluster/common.sh'>)}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [
        {<export>}
        {<Id.Lit_VarLike 'LIBVIRT_DEFAULT_URI='> <qemu> <Id.Lit_Colon ':'> <'///system'>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [
        {<export>}
        {<Id.Lit_VarLike 'SERVICE_ACCOUNT_LOOKUP='> 
          (BracedVarSub
            left: <Id.Left_DollarBrace '${'>
            token: <Id.VSub_Name SERVICE_ACCOUNT_LOOKUP>
            var_name: SERVICE_ACCOUNT_LOOKUP
            suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<true>})
            right: <Id.Right_DollarBrace '}'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [
        {<export>}
        {<Id.Lit_VarLike 'ADMISSION_CONTROL='> 
          (BracedVarSub
            left: <Id.Left_DollarBrace '${'>
            token: <Id.VSub_Name ADMISSION_CONTROL>
            var_name: ADMISSION_CONTROL
            suffix_op: 
              (suffix_op.Unary
                op: <Id.VTest_ColonHyphen _>
                arg_word: 
                  {
                    <
'Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,ResourceQuota'
                    >
                  }
              )
            right: <Id.Right_DollarBrace '}'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [{<readonly>} {<Id.Lit_VarLike 'POOL='> <kubernetes>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [{<readonly>} {<Id.Lit_VarLike 'POOL_PATH='> <'/var/lib/libvirt/images/kubernetes'>}]
      redirects: []
      do_fork: T
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <Id.Lit_LBracket '['>
          more_env: []
          words: [
            {<Id.Lit_LBracket '['>}
            {<Id.KW_Bang '!'>}
            {<-d>}
            {(DQ (${ Id.VSub_Name POOL_PATH))}
            {<Id.Lit_RBracket ']'>}
          ]
          redirects: []
          do_fork: T
        )
        (command.Subshell
          left: <Id.Op_LParen _>
          child: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ ($ Id.VSub_DollarName POOL_PATH))} {<does>} {<not>} {<exist>}]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          right: <Id.Right_Subshell _>
          redirects: []
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create-kubelet-kubeconfig>
      name: create-kubelet-kubeconfig
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'apiserver_address='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'destination='> (DQ (${ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: {(DQ (${ Id.VSub_Name apiserver_address))}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'Must provide API server address to create Kubelet kubeconfig file!'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [259 274]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: {(DQ (${ Id.VSub_Name destination))}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'Must provide destination path to create Kubelet kubeconfig file!'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [292 307]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Creating Kubelet kubeconfig file'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'dest_dir='> 
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <dirname>
                          more_env: []
                          words: [{<dirname>} {(DQ (${ Id.VSub_Name destination))}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <mkdir>
                  more_env: []
                  words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name dest_dir))}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_AndGreat '&>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <sudo>
                  more_env: []
                  words: [{<sudo>} {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name dest_dir))}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'sudo='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'sudo='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sudo='> name:sudo)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.AndOr
                            children: [
                              (command.Simple
                                blame_tok: <test>
                                more_env: []
                                words: [{<test>} {<-w>} {(DQ (${ Id.VSub_Name dest_dir))}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <echo>
                                more_env: []
                                words: [{<echo>} {(DQ <'sudo -E'>)}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_DPipe _>]
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {<EOF>}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'apiVersion: v1\n'>
                            <'kind: Config\n'>
                            <'clusters:\n'>
                            <'  - cluster:\n'>
                            <'      server: '>
                            (${ Id.VSub_Name apiserver_address)
                            <'\n'>
                            <'    name: local\n'>
                            <'contexts:\n'>
                            <'  - context:\n'>
                            <'      cluster: local\n'>
                            <'    name: local\n'>
                            <'current-context: local\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Left_DollarBrace '${'>
                  more_env: []
                  words: [{(${ Id.VSub_Name sudo)} {<tee>} {(DQ (${ Id.VSub_Name destination))}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <join>
      name: join
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'IFS='> (DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_Star '*'))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <detect-master>
      name: detect-master
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'KUBE_MASTER_IP='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'KUBE_MASTER_IP='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'KUBE_MASTER_IP='> name:KUBE_MASTER_IP)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName MASTER_IP)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'KUBE_MASTER='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'KUBE_MASTER='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'KUBE_MASTER='> name:KUBE_MASTER)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName MASTER_NAME)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <export>
              more_env: []
              words: [
                {<export>}
                {<Id.Lit_VarLike 'KUBERNETES_MASTER='> <http> <Id.Lit_Colon ':'> <'//'> 
                  ($ Id.VSub_DollarName KUBE_MASTER_IP) <Id.Lit_Colon ':'> <8080>
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'KUBE_MASTER_IP: '> ($ Id.VSub_DollarName KUBE_MASTER_IP))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'KUBE_MASTER: '> ($ Id.VSub_DollarName KUBE_MASTER))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <detect-nodes>
      name: detect-nodes
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'KUBE_NODE_IP_ADDRESSES='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'KUBE_NODE_IP_ADDRESSES='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'KUBE_NODE_IP_ADDRESSES='>
                      name: KUBE_NODE_IP_ADDRESSES
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (ShArrayLiteral
                        left: <Id.Op_LParen _>
                        words: [
                          {
                            (DQ 
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name NODE_IPS>
                                var_name: NODE_IPS
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                right: <Id.Right_DollarBrace '}'>
                              )
                            )
                          }
                        ]
                        right: <Id.Right_ShArrayLiteral _>
                      )
                    }
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <generate_certs>
      name: generate_certs
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'node_names='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'node_names='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'node_names='> name:node_names)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (ShArrayLiteral
                        left: <Id.Op_LParen _>
                        words: [{(DQ (${ Id.VSub_At '@'))}]
                        right: <Id.Right_ShArrayLiteral _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'tempdir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'tempdir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tempdir='> name:tempdir)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <mktemp>
                            more_env: []
                            words: [{<mktemp>} {<-d>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'CA_KEY='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'CA_KEY='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CA_KEY='> name:CA_KEY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name CA_KEY>
                        var_name: CA_KEY
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VTest_ColonHyphen _>
                            arg_word: {(DQ ($ Id.VSub_DollarName tempdir) <'/ca-key.pem'>)}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'CA_CERT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'CA_CERT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CA_CERT='> name:CA_CERT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name CA_CERT>
                        var_name: CA_CERT
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VTest_ColonHyphen _>
                            arg_word: {(DQ ($ Id.VSub_DollarName tempdir) <'/ca.pem'>)}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <openssl>
              more_env: []
              words: [{<openssl>} {<genrsa>} {<-out>} {(DQ (${ Id.VSub_Name CA_KEY))} {<2048>}]
              redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <openssl>
              more_env: []
              words: [
                {<openssl>}
                {<req>}
                {<-x509>}
                {<-new>}
                {<-nodes>}
                {<-key>}
                {(DQ (${ Id.VSub_Name CA_KEY))}
                {<-days>}
                {<10000>}
                {<-out>}
                {(DQ (${ Id.VSub_Name CA_CERT))}
                {<-subj>}
                {(DQ <'/CN=kube-ca'>)}
              ]
              redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'KUBE_KEY='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'KUBE_KEY='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'KUBE_KEY='> name:KUBE_KEY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name KUBE_KEY>
                        var_name: KUBE_KEY
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VTest_ColonHyphen _>
                            arg_word: {(DQ ($ Id.VSub_DollarName tempdir) <'/apiserver-key.pem'>)}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'API_SERVER_CERT_REQ='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'API_SERVER_CERT_REQ='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'API_SERVER_CERT_REQ='>
                      name: API_SERVER_CERT_REQ
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name API_SERVER_CERT_REQ>
                        var_name: API_SERVER_CERT_REQ
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VTest_ColonHyphen _>
                            arg_word: {(DQ ($ Id.VSub_DollarName tempdir) <'/apiserver.csr'>)}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <openssl>
              more_env: []
              words: [{<openssl>} {<genrsa>} {<-out>} {(DQ (${ Id.VSub_Name KUBE_KEY))} {<2048>}]
              redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <openssl>
              more_env: [
                (EnvPair
                  left: <Id.Lit_VarLike 'KUBERNETES_SVC='>
                  name: KUBERNETES_SVC
                  val: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name SERVICE_CLUSTER_IP_RANGE>
                        var_name: SERVICE_CLUSTER_IP_RANGE
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VOp1_Percent '%'>
                            arg_word: {<.> <Id.Lit_Other '*'>}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      ) <.1>
                    }
                )
              ]
              words: [
                {<openssl>}
                {<req>}
                {<-new>}
                {<-key>}
                {(DQ (${ Id.VSub_Name KUBE_KEY))}
                {<-out>}
                {(DQ (${ Id.VSub_Name API_SERVER_CERT_REQ))}
                {<-subj>}
                {(DQ <'/CN=kube-apiserver'>)}
                {<-config>}
                {<'cluster/libvirt-coreos/openssl.cnf'>}
              ]
              redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'KUBE_CERT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'KUBE_CERT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'KUBE_CERT='> name:KUBE_CERT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name KUBE_CERT>
                        var_name: KUBE_CERT
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VTest_ColonHyphen _>
                            arg_word: {(DQ ($ Id.VSub_DollarName tempdir) <'/apiserver.pem'>)}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <openssl>
              more_env: [
                (EnvPair
                  left: <Id.Lit_VarLike 'KUBERNETES_SVC='>
                  name: KUBERNETES_SVC
                  val: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name SERVICE_CLUSTER_IP_RANGE>
                        var_name: SERVICE_CLUSTER_IP_RANGE
                        suffix_op: 
                          (suffix_op.Unary
                            op: <Id.VOp1_Percent '%'>
                            arg_word: {<.> <Id.Lit_Other '*'>}
                          )
                        right: <Id.Right_DollarBrace '}'>
                      ) <.1>
                    }
                )
              ]
              words: [
                {<openssl>}
                {<x509>}
                {<-req>}
                {<-in>}
                {(DQ (${ Id.VSub_Name API_SERVER_CERT_REQ))}
                {<-CA>}
                {(DQ (${ Id.VSub_Name CA_CERT))}
                {<-CAkey>}
                {(DQ (${ Id.VSub_Name CA_KEY))}
                {<-CAcreateserial>}
                {<-out>}
                {(DQ (${ Id.VSub_Name KUBE_CERT))}
                {<-days>}
                {<365>}
                {<-extensions>}
                {<v3_req>}
                {<-extfile>}
                {<'cluster/libvirt-coreos/openssl.cnf'>}
              ]
              redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/certs'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cp>
              more_env: []
              words: [
                {<cp>}
                {(DQ (${ Id.VSub_Name KUBE_CERT))}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/certs'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cp>
              more_env: []
              words: [
                {<cp>}
                {(DQ (${ Id.VSub_Name KUBE_KEY))}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/certs'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cp>
              more_env: []
              words: [
                {<cp>}
                {(DQ (${ Id.VSub_Name CA_CERT))}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/certs'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ForExpr
              keyword: <Id.KW_For for>
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {($ Id.VSub_DollarName NUM_NODES)}
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:($ Id.Lit_ArithVarLike i))
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <openssl>
                      more_env: []
                      words: [
                        {<openssl>}
                        {<genrsa>}
                        {<-out>}
                        {($ Id.VSub_DollarName tempdir) <'/'> 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name node_names>
                            var_name: node_names
                            bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                            right: <Id.Right_DollarBrace '}'>
                          ) <-node-key.pem>
                        }
                        {<2048>}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '2>'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <cp>
                      more_env: []
                      words: [
                        {<cp>}
                        {
                          (DQ ($ Id.VSub_DollarName tempdir) <'/'> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name node_names>
                              var_name: node_names
                              bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                              right: <Id.Right_DollarBrace '}'>
                            ) <-node-key.pem>
                          )
                        }
                        {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/certs'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <openssl>
                      more_env: [
                        (EnvPair
                          left: <Id.Lit_VarLike 'WORKER_IP='>
                          name: WORKER_IP
                          val: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name NODE_IPS>
                                var_name: NODE_IPS
                                bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      words: [
                        {<openssl>}
                        {<req>}
                        {<-new>}
                        {<-key>}
                        {($ Id.VSub_DollarName tempdir) <'/'> 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name node_names>
                            var_name: node_names
                            bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                            right: <Id.Right_DollarBrace '}'>
                          ) <-node-key.pem>
                        }
                        {<-out>}
                        {($ Id.VSub_DollarName tempdir) <'/'> 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name node_names>
                            var_name: node_names
                            bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                            right: <Id.Right_DollarBrace '}'>
                          ) <-node.csr>
                        }
                        {<-subj>}
                        {
                          (DQ <'/CN='> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name node_names>
                              var_name: node_names
                              bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                              right: <Id.Right_DollarBrace '}'>
                            )
                          )
                        }
                        {<-config>}
                        {<'cluster/libvirt-coreos/node-openssl.cnf'>}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '2>'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <openssl>
                      more_env: [
                        (EnvPair
                          left: <Id.Lit_VarLike 'WORKER_IP='>
                          name: WORKER_IP
                          val: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name NODE_IPS>
                                var_name: NODE_IPS
                                bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      words: [
                        {<openssl>}
                        {<x509>}
                        {<-req>}
                        {<-in>}
                        {($ Id.VSub_DollarName tempdir) <'/'> 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name node_names>
                            var_name: node_names
                            bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                            right: <Id.Right_DollarBrace '}'>
                          ) <-node.csr>
                        }
                        {<-CA>}
                        {(DQ (${ Id.VSub_Name CA_CERT))}
                        {<-CAkey>}
                        {(DQ (${ Id.VSub_Name CA_KEY))}
                        {<-CAcreateserial>}
                        {<-out>}
                        {($ Id.VSub_DollarName tempdir) <'/'> 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name node_names>
                            var_name: node_names
                            bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                            right: <Id.Right_DollarBrace '}'>
                          ) <-node.pem>
                        }
                        {<-days>}
                        {<365>}
                        {<-extensions>}
                        {<v3_req>}
                        {<-extfile>}
                        {<'cluster/libvirt-coreos/node-openssl.cnf'>}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '2>'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <cp>
                      more_env: []
                      words: [
                        {<cp>}
                        {
                          (DQ ($ Id.VSub_DollarName tempdir) <'/'> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name node_names>
                              var_name: node_names
                              bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                              right: <Id.Right_DollarBrace '}'>
                            ) <-node.pem>
                          )
                        }
                        {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/certs'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'TLS assets generated...'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <setup_registry_proxy>
      name: setup_registry_proxy
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName ENABLE_CLUSTER_REGISTRY))}
                                  right: {(DQ <true>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <cp>
                      more_env: []
                      words: [
                        {<cp>}
                        {
                          (DQ 
                            <'./cluster/saltbase/salt/kube-registry-proxy/kube-registry-proxy.yaml'>
                          )
                        }
                        {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/manifests'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1136 1153]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <verify-prereqs>
      name: verify-prereqs
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <which>
                                  more_env: []
                                  words: [{<which>} {<virsh>}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Can\'t find virsh in PATH, please fix and retry.'>)}]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [1183 1195]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <virsh>
                                  more_env: []
                                  words: [{<virsh>} {<nodeinfo>}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})]
                  spids: [1216 1228]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_ne
                                  left: 
                                    {
                                      (DQ 
                                        (CommandSub
                                          left_token: <Id.Left_DollarParen '$('>
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Redir_Less '<'>
                                              more_env: []
                                              words: []
                                              redirects: [
                                                (Redir
                                                  op: <Id.Redir_Less '<'>
                                                  loc: (redir_loc.Fd fd:0)
                                                  arg: {<'/sys/kernel/mm/ksm/run'>}
                                                )
                                              ]
                                              do_fork: F
                                            )
                                          right: <Id.Eof_RParen _>
                                        )
                                      )
                                    }
                                  right: {(DQ <1>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'KSM is not enabled'>)}]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'Enabling it would reduce the memory footprint of large clusters'>)}
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: (bool_expr.Unary op_id:Id.BoolUnary_t child:{<0>})
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [
                                {<read>}
                                {<-t>}
                                {<5>}
                                {<-n>}
                                {<1>}
                                {<-p>}
                                {(DQ <'Do you want to enable KSM (requires root password) (y/n)? '>)}
                                {<answer>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ )}]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              left: <Id.KW_DLeftBracket '[['>
                                              expr: 
                                                (bool_expr.Binary
                                                  op_id: Id.BoolBinary_GlobDEqual
                                                  left: {(DQ ($ Id.VSub_DollarName answer))}
                                                  right: {(SQ <y>)}
                                                )
                                              right: <Id.Lit_DRightBracket ']]'>
                                              redirects: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <su>
                                      more_env: []
                                      words: [{<su>} {<-c>} {(SQ <'echo 1 > /sys/kernel/mm/ksm/run'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [1321 1338]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [1282 1293]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'You can enable it with (as root):'>)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ )}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'  echo 1 > /sys/kernel/mm/ksm/run'>)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ )}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [1239 1259]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <destroy-pool>
      name: destroy-pool
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <virsh>
                  more_env: []
                  words: [{<virsh>} {<pool-info>} {($ Id.VSub_DollarName POOL)}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [
                {<rm>}
                {<-rf>}
                {(DQ ($ Id.VSub_DollarName POOL_PATH)) <'/kubernetes/'> <Id.Lit_Star '*'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [
                {<rm>}
                {<-rf>}
                {(DQ ($ Id.VSub_DollarName POOL_PATH)) <'/kubernetes_config'> <Id.Lit_Star '*'> <'/'> 
                  <Id.Lit_Star '*'>
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<vol>}]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <virsh>
                  more_env: []
                  words: [{<virsh>} {<vol-list>} {($ Id.VSub_DollarName POOL)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <awk>
                  more_env: []
                  words: [{<awk>} {(SQ <'NR>2 && !/^$/ && $1 ~ /^kubernetes/ {print $1}'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [{<read>} {<vol>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Simple
                          blame_tok: <virsh>
                          more_env: []
                          words: [
                            {<virsh>}
                            {<vol-delete>}
                            {($ Id.VSub_DollarName vol)}
                            {<--pool>}
                            {($ Id.VSub_DollarName POOL)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              ]
              ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
            )
            (command.AndOr
              children: [
                (command.DBracket
                  left: <Id.KW_DLeftBracket '[['>
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: {(DQ ($ Id.VSub_Number 1))}
                      right: {(SQ <keep_base_image>)}
                    )
                  right: <Id.Lit_DRightBracket ']]'>
                  redirects: []
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<Id.Lit_Other '+'> <e>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [
                {<virsh>}
                {<vol-delete>}
                {<coreos_base.img>}
                {<--pool>}
                {($ Id.VSub_DollarName POOL)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [{<virsh>} {<pool-destroy>} {($ Id.VSub_DollarName POOL)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rmdir>
              more_env: []
              words: [{<rmdir>} {(DQ ($ Id.VSub_DollarName POOL_PATH))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<-e>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <initialize-pool>
      name: initialize-pool
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName POOL_PATH))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <virsh>
                                  more_env: []
                                  words: [{<virsh>} {<pool-info>} {($ Id.VSub_DollarName POOL)}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <virsh>
                      more_env: []
                      words: [
                        {<virsh>}
                        {<pool-create-as>}
                        {($ Id.VSub_DollarName POOL)}
                        {<dir>}
                        {<--target>}
                        {(DQ ($ Id.VSub_DollarName POOL_PATH))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1597 1614]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <wget>
              more_env: []
              words: [
                {<wget>}
                {<-N>}
                {<-P>}
                {(DQ ($ Id.VSub_DollarName ROOT))}
                {<https> <Id.Lit_Colon ':'> <'//'> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name COREOS_CHANNEL>
                    var_name: COREOS_CHANNEL
                    suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<alpha>})
                    right: <Id.Right_DollarBrace '}'>
                  ) <'.release.core-os.net/amd64-usr/current/coreos_production_qemu_image.img.bz2'>
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_nt
                                  left: 
                                    {
                                      (DQ ($ Id.VSub_DollarName ROOT) 
                                        <'/coreos_production_qemu_image.img.bz2'>
                                      )
                                    }
                                  right: {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/coreos_base.img'>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <bunzip2>
                      more_env: []
                      words: [
                        {<bunzip2>}
                        {<-f>}
                        {<-k>}
                        {(DQ ($ Id.VSub_DollarName ROOT) <'/coreos_production_qemu_image.img.bz2'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <virsh>
                          more_env: []
                          words: [
                            {<virsh>}
                            {<vol-delete>}
                            {<coreos_base.img>}
                            {<--pool>}
                            {($ Id.VSub_DollarName POOL)}
                          ]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <true>
                          more_env: []
                          words: [{<true>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                  ]
                  spids: [1657 1676]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <virsh>
                                  more_env: []
                                  words: [{<virsh>} {<vol-list>} {($ Id.VSub_DollarName POOL)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <grep>
                                  more_env: []
                                  words: [{<grep>} {<-q>} {<coreos_base.img>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_Pipe _>]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <virsh>
                      more_env: []
                      words: [
                        {<virsh>}
                        {<vol-create-as>}
                        {($ Id.VSub_DollarName POOL)}
                        {<coreos_base.img>}
                        {<10G>}
                        {<--format>}
                        {<qcow2>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <virsh>
                      more_env: []
                      words: [
                        {<virsh>}
                        {<vol-upload>}
                        {<coreos_base.img>}
                        {(DQ ($ Id.VSub_DollarName ROOT) <'/coreos_production_qemu_image.img'>)}
                        {<--pool>}
                        {($ Id.VSub_DollarName POOL)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1713 1732]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <kube-push-internal>
              more_env: []
              words: [{<kube-push-internal>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/manifests'>)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName ENABLE_NODE_LOGGING))}
                                  right: {(DQ <true>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName LOGGING_DESTINATION))}
                                          right: {(DQ <elasticsearch>)}
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <cp>
                              more_env: []
                              words: [
                                {<cp>}
                                {
                                  (DQ ($ Id.VSub_DollarName KUBE_ROOT) 
                                    <'/cluster/saltbase/salt/fluentd-es/fluentd-es.manifest'>
                                  )
                                }
                                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/manifests'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [1814 1831]
                        )
                        (IfArm
                          keyword: <Id.KW_Elif elif>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName LOGGING_DESTINATION))}
                                          right: {(DQ <gcp>)}
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <cp>
                              more_env: []
                              words: [
                                {<cp>}
                                {
                                  (DQ ($ Id.VSub_DollarName KUBE_ROOT) 
                                    <'/cluster/saltbase/salt/fluentd-gcp/fluentd-gcp.manifest'>
                                  )
                                }
                                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/manifests'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [1847 1864]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [1794 1811]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/addons'>)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName ENABLE_CLUSTER_DNS))}
                                  right: {(DQ <true>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <render-template>
                      more_env: []
                      words: [{<render-template>} {(DQ ($ Id.VSub_DollarName ROOT) <'/namespace.yaml'>)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: 
                            {
                              (DQ ($ Id.VSub_DollarName POOL_PATH) 
                                <'/kubernetes/addons/namespace.yaml'>
                              )
                            }
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <render-template>
                      more_env: []
                      words: [{<render-template>} {(DQ ($ Id.VSub_DollarName ROOT) <'/kube-dns.yaml'>)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: 
                            {
                              (DQ ($ Id.VSub_DollarName POOL_PATH) 
                                <'/kubernetes/addons/kube-dns.yaml'>
                              )
                            }
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [1897 1914]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [{<virsh>} {<pool-refresh>} {($ Id.VSub_DollarName POOL)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <destroy-network>
      name: destroy-network
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<Id.Lit_Other '+'> <e>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [{<virsh>} {<net-destroy>} {<kubernetes_global>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [{<virsh>} {<net-destroy>} {<kubernetes_pods>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<-e>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <initialize-network>
      name: initialize-network
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [
                {<virsh>}
                {<net-create>}
                {(DQ ($ Id.VSub_DollarName ROOT) <'/network_kubernetes_global.xml'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <virsh>
              more_env: []
              words: [
                {<virsh>}
                {<net-create>}
                {(DQ ($ Id.VSub_DollarName ROOT) <'/network_kubernetes_pods.xml'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <render-template>
      name: render-template
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <eval>
              more_env: []
              words: [
                {<eval>}
                {
                  (DQ <'echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <cat>
                          more_env: []
                          words: [{<cat>} {($ Id.VSub_Number 1)}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <wait-cluster-readiness>
      name: wait-cluster-readiness
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Wait for cluster readiness'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'timeout='> <120>}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          left: <Id.KW_DLeftBracket '[['>
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_ne
                              left: {($ Id.VSub_DollarName timeout)}
                              right: {<0>}
                            )
                          right: <Id.Lit_DRightBracket ']]'>
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'nb_ready_nodes='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'nb_ready_nodes='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'nb_ready_nodes='>
                              name: nb_ready_nodes
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.AndOr
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (command.Simple
                                            blame_tok: <kubectl>
                                            more_env: []
                                            words: [
                                              {<kubectl>}
                                              {<get>}
                                              {<nodes>}
                                              {<-o>}
                                              {<go-template> <Id.Lit_Equals '='> 
                                                (DQ 
                                                  <
'{{range.items}}{{range.status.conditions}}{{.type}}{{end}}:{{end}}'
                                                  >
                                                )
                                              }
                                            ]
                                            redirects: [
                                              (Redir
                                                op: <Id.Redir_Great '2>'>
                                                loc: (redir_loc.Fd fd:2)
                                                arg: {<'/dev/null'>}
                                              )
                                            ]
                                            do_fork: T
                                          )
                                          (command.Simple
                                            blame_tok: <tr>
                                            more_env: []
                                            words: [{<tr>} {(SQ <':'>)} {(SQ <'\\n'>)}]
                                            redirects: []
                                            do_fork: T
                                          )
                                          (command.Simple
                                            blame_tok: <grep>
                                            more_env: []
                                            words: [{<grep>} {<-c>} {<Ready>}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        ]
                                        ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
                                      )
                                      (command.Simple
                                        blame_tok: <true>
                                        more_env: []
                                        words: [{<true>}]
                                        redirects: []
                                        do_fork: T
                                      )
                                    ]
                                    ops: [<Id.Op_DPipe _>]
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'Nb ready nodes: '> ($ Id.VSub_DollarName nb_ready_nodes) <' / '> 
                            ($ Id.VSub_DollarName NUM_NODES)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {(DQ ($ Id.VSub_DollarName nb_ready_nodes))}
                                          right: {(DQ ($ Id.VSub_DollarName NUM_NODES))}
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [2138 2155]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'timeout='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'timeout='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'timeout='> name:timeout)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                left: <Id.Left_DollarDParen '$(('>
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: {($ Id.VSub_DollarName timeout)}
                                    right: {<Id.Lit_Digits 1>}
                                  )
                                right: <Id.Right_DollarDParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <sleep>
                      more_env: []
                      words: [{<sleep>} {<.5>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <kube-up>
      name: kube-up
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <detect-master>
              more_env: []
              words: [{<detect-master>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <detect-nodes>
              more_env: []
              words: [{<detect-nodes>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <initialize-pool>
              more_env: []
              words: [{<initialize-pool>} {<keep_base_image>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <generate_certs>
              more_env: []
              words: [
                {<generate_certs>}
                {
                  (DQ 
                    (BracedVarSub
                      left: <Id.Left_DollarBrace '${'>
                      token: <Id.VSub_Name NODE_NAMES>
                      var_name: NODE_NAMES
                      bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                      right: <Id.Right_DollarBrace '}'>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <setup_registry_proxy>
              more_env: []
              words: [{<setup_registry_proxy>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <initialize-network>
              more_env: []
              words: [{<initialize-network>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <readonly>
              more_env: []
              words: [
                {<readonly>}
                {<Id.Lit_VarLike 'ssh_keys='> 
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Pipeline
                          children: [
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [
                                {<cat>}
                                {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/.ssh/'> 
                                  <Id.Lit_Star '*'> <.pub>
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <sed>
                              more_env: []
                              words: [{<sed>} {(SQ <'s/^/  - /'>)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_Pipe _>]
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <readonly>
              more_env: []
              words: [
                {<readonly>}
                {<Id.Lit_VarLike 'kubernetes_dir='> 
                  (DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes'>)
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<i>}]
              redirects: []
              do_fork: T
            )
            (command.ForExpr
              keyword: <Id.KW_For for>
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_LessEqual
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {($ Id.VSub_DollarName NUM_NODES)}
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:($ Id.Lit_ArithVarLike i))
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_DollarName i)}
                                          right: {($ Id.VSub_DollarName NUM_NODES)}
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_ArrayLhsOpen 'etcd2_initial_cluster['>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_ArrayLhsOpen 'etcd2_initial_cluster['>
                                  lhs: 
                                    (sh_lhs_expr.IndexedName
                                      left: <Id.Lit_ArrayLhsOpen 'etcd2_initial_cluster['>
                                      name: etcd2_initial_cluster
                                      index: {($ Id.VSub_DollarName i)}
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ (${ Id.VSub_Name MASTER_NAME) <'=http://'> 
                                        (${ Id.VSub_Name MASTER_IP) <':2380'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [2300 2313]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ShAssignment
                          left: <Id.Lit_ArrayLhsOpen 'etcd2_initial_cluster['>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_ArrayLhsOpen 'etcd2_initial_cluster['>
                              lhs: 
                                (sh_lhs_expr.IndexedName
                                  left: <Id.Lit_ArrayLhsOpen 'etcd2_initial_cluster['>
                                  name: etcd2_initial_cluster
                                  index: {($ Id.VSub_DollarName i)}
                                )
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name NODE_NAMES>
                                      var_name: NODE_NAMES
                                      bracket_op: 
                                        (bracket_op.ArrayIndex
                                          expr: {($ Id.VSub_DollarName i)}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) <'=http://'> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name NODE_IPS>
                                      var_name: NODE_IPS
                                      bracket_op: 
                                        (bracket_op.ArrayIndex
                                          expr: {($ Id.VSub_DollarName i)}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) <':2380'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'etcd2_initial_cluster='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'etcd2_initial_cluster='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'etcd2_initial_cluster='>
                      name: etcd2_initial_cluster
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <join>
                            more_env: []
                            words: [
                              {<join>}
                              {<Id.Lit_Comma ','>}
                              {
                                (DQ 
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name etcd2_initial_cluster>
                                    var_name: etcd2_initial_cluster
                                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                )
                              }
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <readonly>
              more_env: []
              words: [
                {<readonly>}
                {<Id.Lit_VarLike 'machines='> 
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <join>
                        more_env: []
                        words: [
                          {<join>}
                          {<Id.Lit_Comma ','>}
                          {
                            (DQ 
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name KUBE_NODE_IP_ADDRESSES>
                                var_name: KUBE_NODE_IP_ADDRESSES
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                right: <Id.Right_DollarBrace '}'>
                              )
                            )
                          }
                        ]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ForExpr
              keyword: <Id.KW_For for>
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_LessEqual
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {($ Id.VSub_DollarName NUM_NODES)}
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:($ Id.Lit_ArithVarLike i))
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      left: <Id.KW_DLeftBracket '[['>
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_eq
                                          left: {($ Id.VSub_DollarName i)}
                                          right: {($ Id.VSub_DollarName NUM_NODES)}
                                        )
                                      right: <Id.Lit_DRightBracket ']]'>
                                      redirects: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'type='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'type='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'type='> name:type)
                                  op: assign_op.Equal
                                  rhs: {<master>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'name='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'name='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName MASTER_NAME)}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'public_ip='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'public_ip='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'public_ip='>
                                      name: public_ip
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName MASTER_IP)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [2432 2445]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'type='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'type='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'type='> name:type)
                              op: assign_op.Equal
                              rhs: 
                                {<node-> 
                                  (CommandSub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: 
                                      (command.Simple
                                        blame_tok: <printf>
                                        more_env: []
                                        words: [{<printf>} {(DQ <'%02d'>)} {($ Id.VSub_DollarName i)}]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Eof_RParen _>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'name='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'name='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'name='> name:name)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name NODE_NAMES>
                                    var_name: NODE_NAMES
                                    bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'public_ip='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'public_ip='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'public_ip='>
                                  name: public_ip
                                )
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name NODE_IPS>
                                    var_name: NODE_IPS
                                    bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'image='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'image='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'image='> name:image)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName name) <.img>}
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'config='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'config='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'config='> name:config)
                          op: assign_op.Equal
                          rhs: {<kubernetes_config_> ($ Id.VSub_DollarName type)}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <virsh>
                      more_env: []
                      words: [
                        {<virsh>}
                        {<vol-create-as>}
                        {($ Id.VSub_DollarName POOL)}
                        {($ Id.VSub_DollarName image)}
                        {<10G>}
                        {<--format>}
                        {<qcow2>}
                        {<--backing-vol>}
                        {<coreos_base.img>}
                        {<--backing-vol-format>}
                        {<qcow2>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <mkdir>
                      more_env: []
                      words: [
                        {<mkdir>}
                        {<-p>}
                        {
                          (DQ ($ Id.VSub_DollarName POOL_PATH) <'/'> ($ Id.VSub_DollarName config) 
                            <'/openstack/latest'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <render-template>
                      more_env: []
                      words: [{<render-template>} {(DQ ($ Id.VSub_DollarName ROOT) <'/user_data.yml'>)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: 
                            {
                              (DQ ($ Id.VSub_DollarName POOL_PATH) <'/'> ($ Id.VSub_DollarName config) 
                                <'/openstack/latest/user_data'>
                              )
                            }
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <virsh>
                      more_env: []
                      words: [{<virsh>} {<pool-refresh>} {($ Id.VSub_DollarName POOL)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'domain_xml='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'domain_xml='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'domain_xml='> name:domain_xml)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <mktemp>
                                    more_env: []
                                    words: [{<mktemp>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <render-template>
                      more_env: []
                      words: [{<render-template>} {($ Id.VSub_DollarName ROOT) <'/coreos.xml'>}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName domain_xml)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <virsh>
                      more_env: []
                      words: [{<virsh>} {<create>} {($ Id.VSub_DollarName domain_xml)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <rm>
                      more_env: []
                      words: [{<rm>} {($ Id.VSub_DollarName domain_xml)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <export>
              more_env: []
              words: [{<export>} {<Id.Lit_VarLike 'KUBE_SERVER='> (DQ <'http://192.168.10.1:8080'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <export>
              more_env: []
              words: [{<export>} {<Id.Lit_VarLike 'CONTEXT='> (DQ <libvirt-coreos>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <create-kubeconfig>
              more_env: []
              words: [{<create-kubeconfig>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <create-kubelet-kubeconfig>
              more_env: []
              words: [
                {<create-kubelet-kubeconfig>}
                {(DQ <'http://'> (${ Id.VSub_Name MASTER_IP) <':8080'>)}
                {(DQ (${ Id.VSub_Name POOL_PATH) <'/kubernetes/kubeconfig/kubelet.kubeconfig'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <wait-cluster-readiness>
              more_env: []
              words: [{<wait-cluster-readiness>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Kubernetes cluster is running. The master is running at:'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'  http://'> (${ Id.VSub_Name KUBE_MASTER_IP) <':8080'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'You can control the Kubernetes cluster with: \'kubectl\''>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {
                  (DQ <'You can connect on the master with: \'ssh core@'> 
                    (${ Id.VSub_Name KUBE_MASTER_IP) <'\''>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <wait-registry-readiness>
              more_env: []
              words: [{<wait-registry-readiness>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create_registry_rc>
      name: create_registry_rc
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <' Create registry replication controller'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <kubectl>
              more_env: []
              words: [{<kubectl>} {<create>} {<-f>} {($ Id.VSub_DollarName ROOT) <'/registry-rc.yaml'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'timeout='> <120>}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          left: <Id.KW_DLeftBracket '[['>
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_ne
                              left: {($ Id.VSub_DollarName timeout)}
                              right: {<0>}
                            )
                          right: <Id.Lit_DRightBracket ']]'>
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'phase='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'phase='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'phase='> name:phase)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <kubectl>
                                    more_env: []
                                    words: [
                                      {<kubectl>}
                                      {<get>}
                                      {<pods>}
                                      {<-n>}
                                      {<kube-system>}
                                      {<-lk8s-app> <Id.Lit_Equals '='> <kube-registry>}
                                      {<--output> <Id.Lit_Equals '='> 
                                        (SQ <'jsonpath={.items..status.phase}'>)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(DQ ($ Id.VSub_DollarName phase))}
                                        {<Id.Lit_Equals '='>}
                                        {(DQ <Running>)}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [2764 2781]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'timeout='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'timeout='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'timeout='> name:timeout)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                left: <Id.Left_DollarDParen '$(('>
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: {($ Id.VSub_DollarName timeout)}
                                    right: {<Id.Lit_Digits 1>}
                                  )
                                right: <Id.Right_DollarDParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <sleep>
                      more_env: []
                      words: [{<sleep>} {<.5>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create_registry_svc>
      name: create_registry_svc
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <' Create registry service'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <kubectl>
              more_env: []
              words: [
                {<kubectl>}
                {<create>}
                {<-f>}
                {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/addons/registry/registry-svc.yaml'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <wait-registry-readiness>
      name: wait-registry-readiness
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobNEqual
                                  left: {(DQ ($ Id.VSub_DollarName ENABLE_CLUSTER_REGISTRY))}
                                  right: {(DQ <true>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [2853 2870]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Wait for registry readiness...'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'timeout='> <120>}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          left: <Id.KW_DLeftBracket '[['>
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_ne
                              left: {($ Id.VSub_DollarName timeout)}
                              right: {<0>}
                            )
                          right: <Id.Lit_DRightBracket ']]'>
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'phase='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'phase='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'phase='> name:phase)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <kubectl>
                                    more_env: []
                                    words: [
                                      {<kubectl>}
                                      {<get>}
                                      {<namespaces>}
                                      {<--output> <Id.Lit_Equals '='> <Id.Lit_VarLike 'jsonpath='> 
                                        (SQ 
                                          <
'{.items[?(@.metadata.name=="kube-system")].status.phase}'
                                          >
                                        )
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(DQ ($ Id.VSub_DollarName phase))}
                                        {<Id.Lit_Equals '='>}
                                        {(DQ <Active>)}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <create_registry_rc>
                              more_env: []
                              words: [{<create_registry_rc>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <create_registry_svc>
                              more_env: []
                              words: [{<create_registry_svc>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [2927 2944]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'waiting for namespace kube-system'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'timeout='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'timeout='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'timeout='> name:timeout)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                left: <Id.Left_DollarDParen '$(('>
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: {($ Id.VSub_DollarName timeout)}
                                    right: {<Id.Lit_Digits 1>}
                                  )
                                right: <Id.Right_DollarDParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <sleep>
                      more_env: []
                      words: [{<sleep>} {<.5>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <kube-down>
      name: kube-down
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <virsh>
                  more_env: []
                  words: [{<virsh>} {<list>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <awk>
                  more_env: []
                  words: [{<awk>} {(SQ <'NR>2 && !/^$/ && $2 ~ /^kubernetes/ {print $2}'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [{<read>} {<dom>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Simple
                          blame_tok: <virsh>
                          more_env: []
                          words: [{<virsh>} {<destroy>} {($ Id.VSub_DollarName dom)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              ]
              ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
            )
            (command.Simple
              blame_tok: <destroy-pool>
              more_env: []
              words: [{<destroy-pool>} {<keep_base_image>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <destroy-network>
              more_env: []
              words: [{<destroy-network>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <upload-server-tars>
      name: upload-server-tars
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <tar>
              more_env: []
              words: [
                {<tar>}
                {<-x>}
                {<-C>}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes'>)}
                {<-f>}
                {(DQ ($ Id.VSub_DollarName SERVER_BINARY_TAR))}
                {<kubernetes>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-rf>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/bin'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mv>
              more_env: []
              words: [
                {<mv>}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/kubernetes/server/bin'>)}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/bin'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <chmod>
              more_env: []
              words: [{<chmod>} {<-R>} {<755>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/bin'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-fr>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/kubernetes'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <kube-push>
      name: kube-push
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <kube-push-internal>
              more_env: []
              words: [{<kube-push-internal>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <ssh-to-node>
              more_env: []
              words: [
                {<ssh-to-node>}
                {(DQ ($ Id.VSub_DollarName MASTER_NAME))}
                {
                  (DQ 
                    <'sudo systemctl restart kube-apiserver kube-controller-manager kube-scheduler'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ForExpr
              keyword: <Id.KW_For for>
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: ($ Id.Lit_ArithVarLike i)
                  right: ($ Id.Lit_ArithVarLike NUM_NODES)
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:($ Id.Lit_ArithVarLike i))
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <ssh-to-node>
                      more_env: []
                      words: [
                        {<ssh-to-node>}
                        {
                          (DQ 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name NODE_NAMES>
                              var_name: NODE_NAMES
                              bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                              right: <Id.Right_DollarBrace '}'>
                            )
                          )
                        }
                        {(DQ <'sudo systemctl restart kubelet kube-proxy'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <wait-cluster-readiness>
              more_env: []
              words: [{<wait-cluster-readiness>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <kube-push-internal>
      name: kube-push-internal
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: 
                (case_arg.Word
                  w: 
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name KUBE_PUSH>
                          var_name: KUBE_PUSH
                          suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<release>})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                )
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <release>
                  pattern: (pat.Words words:[{<release>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <kube-push-release>
                      more_env: []
                      words: [{<kube-push-release>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <local>
                  pattern: (pat.Words words:[{<local>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <kube-push-local>
                      more_env: []
                      words: [{<kube-push-local>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'The only known push methods are '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) <release> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                            <' to use the release tarball or '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <local> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) <' to use the binaries built by make. KUBE_PUSH is set '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) ($ Id.VSub_DollarName KUBE_PUSH) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                          )
                        }
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <kube-push-release>
      name: kube-push-release
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <find-release-tars>
              more_env: []
              words: [{<find-release-tars>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <upload-server-tars>
              more_env: []
              words: [{<upload-server-tars>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <kube-push-local>
      name: kube-push-local
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-rf>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/bin/*'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/bin'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cp>
              more_env: []
              words: [
                {<cp>}
                {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/_output/local/go/bin'>) <'/'> <Id.Lit_Star '*'>}
                {(DQ ($ Id.VSub_DollarName POOL_PATH) <'/kubernetes/bin'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <test-build-release>
      name: test-build-release
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <TODO>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <test-setup>
      name: test-setup
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <Id.Left_DoubleQuote '"'>
              more_env: []
              words: [{(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/kube-up.sh'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <test-teardown>
      name: test-teardown
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <kube-down>
              more_env: []
              words: [{<kube-down>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <ssh-to-node>
      name: ssh-to-node
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'node='> (DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'cmd='> (DQ ($ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<machine>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.AndOr
                              children: [
                                (command.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ ($ Id.VSub_DollarName node))}
                                      right: {(DQ ($ Id.VSub_DollarName MASTER_IP))}
                                    )
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                                (command.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {(DQ ($ Id.VSub_DollarName node))}
                                      right: 
                                        {<Id.Lit_Other '^'> (DQ ($ Id.VSub_DollarName NODE_IP_BASE))}
                                    )
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'machine='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'machine='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'machine='> name:machine)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName node))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [3411 3445]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName node))}
                                  right: {(DQ ($ Id.VSub_DollarName MASTER_NAME))}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'machine='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'machine='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'machine='> name:machine)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName MASTER_IP))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [3454 3471]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ForExpr
                  keyword: <Id.KW_For for>
                  init: 
                    (arith_expr.BinaryAssign
                      op_id: Id.Arith_Equal
                      left: ($ Id.Lit_ArithVarLike i)
                      right: {<Id.Lit_Digits 0>}
                    )
                  cond: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Less
                      left: ($ Id.Lit_ArithVarLike i)
                      right: ($ Id.Lit_ArithVarLike NUM_NODES)
                    )
                  update: 
                    (arith_expr.UnaryAssign
                      op_id: Id.Node_PostDPlus
                      child: ($ Id.Lit_ArithVarLike i)
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.If
                          if_kw: <Id.KW_If if>
                          arms: [
                            (IfArm
                              keyword: <Id.KW_If if>
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          left: <Id.KW_DLeftBracket '[['>
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobDEqual
                                              left: {(DQ ($ Id.VSub_DollarName node))}
                                              right: 
                                                {
                                                  (DQ 
                                                    (BracedVarSub
                                                      left: <Id.Left_DollarBrace '${'>
                                                      token: <Id.VSub_Name NODE_NAMES>
                                                      var_name: NODE_NAMES
                                                      bracket_op: 
                                                        (bracket_op.ArrayIndex
                                                          expr: {($ Id.VSub_DollarName i)}
                                                        )
                                                      right: <Id.Right_DollarBrace '}'>
                                                    )
                                                  )
                                                }
                                            )
                                          right: <Id.Lit_DRightBracket ']]'>
                                          redirects: []
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              then_kw: <Id.KW_Then then>
                              action: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'machine='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'machine='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'machine='>
                                          name: machine
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name NODE_IPS>
                                              var_name: NODE_IPS
                                              bracket_op: 
                                                (bracket_op.ArrayIndex
                                                  expr: {($ Id.VSub_DollarName i)}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Break break>
                                )
                              ]
                              spids: [3507 3529]
                            )
                          ]
                          else_action: []
                          fi_kw: <Id.KW_Fi fi>
                          redirects: []
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: {(DQ ($ Id.VSub_DollarName machine))}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ ($ Id.VSub_DollarName node) <' is an unknown machine to ssh to'>)}
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                  ]
                  spids: [3555 3568]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <ssh>
              more_env: []
              words: [
                {<ssh>}
                {<-o>}
                {<Id.Lit_VarLike 'ConnectTimeout='> <30>}
                {<-o>}
                {<Id.Lit_VarLike 'StrictHostKeyChecking='> <no>}
                {<-o>}
                {<Id.Lit_VarLike 'UserKnownHostsFile='> <'/dev/null'>}
                {<-o>}
                {<Id.Lit_VarLike 'ControlMaster='> <no>}
                {(DQ <'core@'> ($ Id.VSub_DollarName machine))}
                {(DQ ($ Id.VSub_DollarName cmd))}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <prepare-e2e>
      name: prepare-e2e
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {(DQ <'libvirt-coreos doesn\'t need special preparations for e2e tests'>)}
              ]
              redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
  ]
)