(command.CommandList
  children: [
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<errexit>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<nounset>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<pipefail>}]
      redirects: []
      do_fork: T
    )
    (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 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name BASH_SOURCE>
                            var_name: BASH_SOURCE
                            bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                            right: <Id.Right_DollarBrace '}'>
                          )
                        )
                      }
                    ]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Eof_RParen _>
              ) <'/../..'>
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [{<source>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/cluster/photon-controller/util.sh'>)}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <main>
      name: main
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <verify-cmd-in-path>
              more_env: []
              words: [{<verify-cmd-in-path>} {<photon>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <set-target>
              more_env: []
              words: [{<set-target>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <create-tenant>
              more_env: []
              words: [{<create-tenant>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <create-project>
              more_env: []
              words: [{<create-project>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <create-vm-flavor>
              more_env: []
              words: [
                {<create-vm-flavor>}
                {(DQ (${ Id.VSub_Name PHOTON_MASTER_FLAVOR))}
                {(DQ (${ Id.VSub_Name SETUP_MASTER_FLAVOR_SPEC))}
              ]
              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.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ (${ Id.VSub_Name PHOTON_MASTER_FLAVOR))}
                                {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                {(DQ (${ Id.VSub_Name PHOTON_NODE_FLAVOR))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <create-vm-flavor>
                      more_env: []
                      words: [
                        {<create-vm-flavor>}
                        {(DQ (${ Id.VSub_Name PHOTON_NODE_FLAVOR))}
                        {(DQ (${ Id.VSub_Name SETUP_NODE_FLAVOR_SPEC))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [206 228]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <create-disk-flavor>
              more_env: []
              words: [{<create-disk-flavor>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <create-image>
              more_env: []
              words: [{<create-image>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <parse-cmd-line>
      name: parse-cmd-line
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'PHOTON_TARGET='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'PHOTON_TARGET='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PHOTON_TARGET='> name:PHOTON_TARGET)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Number 1>
                        var_name: 1
                        suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{(DQ )})
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'PHOTON_VMDK='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'PHOTON_VMDK='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PHOTON_VMDK='> name:PHOTON_VMDK)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Number 2>
                        var_name: 2
                        suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{(DQ )})
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              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.LogicalOr
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: {(DQ (${ Id.VSub_Name PHOTON_TARGET))}
                                      right: {(DQ )}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: {(DQ (${ Id.VSub_Name PHOTON_VMDK))}
                                      right: {(DQ )}
                                    )
                                )
                              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 <'Usage: setup-prereq <photon target> <path-to-kube-vmdk>'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Target should be a URL like https://192.0.2.1'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ )}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ 
                            <
'This will create the following, based on the configuration in config-common.sh'
                            >
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'    * A tenant named '> (${ Id.VSub_Name PHOTON_TENANT))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'    * A project named '> (${ Id.VSub_Name PHOTON_PROJECT))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'    * A VM flavor named '> (${ Id.VSub_Name PHOTON_MASTER_FLAVOR))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'    * A disk flavor named '> (${ Id.VSub_Name PHOTON_DISK_FLAVOR))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'It will also upload the Kube VMDK'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ )}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'It creates the tenant with a resource ticket (quota) that may'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'be inappropriate for your environment. For a production'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'environment, you should configure these to match your'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <environment.>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [283 314]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Photon Target: '> (${ Id.VSub_Name PHOTON_TARGET))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Photon VMDK: '> (${ Id.VSub_Name PHOTON_VMDK))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <set-target>
      name: set-target
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <Id.Left_DollarBrace '${'>
              more_env: []
              words: [{(${ Id.VSub_Name PHOTON)} {<target>} {<set>} {(DQ (${ Id.VSub_Name PHOTON_TARGET))}]
              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
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create-tenant>
      name: create-tenant
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'rc='> <0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<output>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [{(${ Id.VSub_Name PHOTON)} {<tenant>} {<list>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {<-q>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name PHOTON_TENANT) 
                            <Id.Lit_Dollar '$'>
                          )
                        }
                      ]
                      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: [<Id.Op_Pipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '?')}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (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_Name rc)}
                                  right: {<0>}
                                )
                              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 <'Tenant '> (${ Id.VSub_Name PHOTON_TENANT) <' already made, skipping'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [542 557]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'Making tenant '> (${ Id.VSub_Name PHOTON_TENANT))}]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {<0>}
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'output='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'output='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [
                                      {(${ Id.VSub_Name PHOTON)}
                                      {<tenant>}
                                      {<create>}
                                      {(DQ (${ Id.VSub_Name PHOTON_TENANT))}
                                    ]
                                    redirects: [
                                      (Redir
                                        op: <Id.Redir_GreatAnd '2>&'>
                                        loc: (redir_loc.Fd fd:2)
                                        arg: {<1>}
                                      )
                                    ]
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [
                            {<echo>}
                            {
                              (DQ <'ERROR: Could not create tenant '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) (${ Id.VSub_Name PHOTON_TENANT) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                                <', exiting'>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Output from tenant creation:'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ (${ Id.VSub_Name output))}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      redirects: []
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <Id.Left_DollarBrace '${'>
              more_env: []
              words: [{(${ Id.VSub_Name PHOTON)} {<tenant>} {<set>} {(DQ (${ Id.VSub_Name PHOTON_TENANT))}]
              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
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create-project>
      name: create-project
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'rc='> <0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<output>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [{(${ Id.VSub_Name PHOTON)} {<project>} {<list>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {<-q>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name PHOTON_PROJECT) 
                            <Id.Lit_BadBackslash '\\'> <t>
                          )
                        }
                      ]
                      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: [<Id.Op_Pipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '?')}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (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_Name rc)}
                                  right: {<0>}
                                )
                              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 <'Project '> (${ Id.VSub_Name PHOTON_PROJECT) <' already made, skipping'>)
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [733 748]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'Making project '> (${ Id.VSub_Name PHOTON_PROJECT))}]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {<0>}
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'output='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'output='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [
                                      {(${ Id.VSub_Name PHOTON)}
                                      {<resource-ticket>}
                                      {<create>}
                                      {<--tenant>}
                                      {(DQ (${ Id.VSub_Name PHOTON_TENANT))}
                                      {<--name>}
                                      {(DQ (${ Id.VSub_Name PHOTON_TENANT) <-resources>)}
                                      {<--limits>}
                                      {(DQ (${ Id.VSub_Name SETUP_TICKET_SPEC))}
                                    ]
                                    redirects: [
                                      (Redir
                                        op: <Id.Redir_GreatAnd '2>&'>
                                        loc: (redir_loc.Fd fd:2)
                                        arg: {<1>}
                                      )
                                    ]
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'ERROR: Could not create resource ticket, exiting'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Output from resource ticket creation:'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ (${ Id.VSub_Name output))}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      redirects: []
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {<0>}
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'output='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'output='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [
                                      {(${ Id.VSub_Name PHOTON)}
                                      {<project>}
                                      {<create>}
                                      {<--tenant>}
                                      {(DQ (${ Id.VSub_Name PHOTON_TENANT))}
                                      {<--resource-ticket>}
                                      {(DQ (${ Id.VSub_Name PHOTON_TENANT) <-resources>)}
                                      {<--name>}
                                      {(DQ (${ Id.VSub_Name PHOTON_PROJECT))}
                                      {<--limits>}
                                      {(DQ (${ Id.VSub_Name SETUP_PROJECT_SPEC))}
                                    ]
                                    redirects: [
                                      (Redir
                                        op: <Id.Redir_GreatAnd '2>&'>
                                        loc: (redir_loc.Fd fd:2)
                                        arg: {<1>}
                                      )
                                    ]
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [
                            {<echo>}
                            {
                              (DQ <'ERROR: Could not create project '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) (${ Id.VSub_Name PHOTON_PROJECT) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                                <', exiting'>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Output from project creation:'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ (${ Id.VSub_Name output))}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      redirects: []
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <Id.Left_DollarBrace '${'>
              more_env: []
              words: [
                {(${ Id.VSub_Name PHOTON)}
                {<project>}
                {<set>}
                {(DQ (${ Id.VSub_Name PHOTON_PROJECT))}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create-vm-flavor>
      name: create-vm-flavor
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'flavor_name='> (${ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'flavor_spec='> (${ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'rc='> <0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<output>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [{(${ Id.VSub_Name PHOTON)} {<flavor>} {<list>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {<-q>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name flavor_name) 
                            <Id.Lit_BadBackslash '\\'> <t>
                          )
                        }
                      ]
                      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: [<Id.Op_Pipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '?')}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (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_Name rc)}
                                  right: {<0>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <check-flavor-ready>
                      more_env: []
                      words: [{<check-flavor-ready>} {(DQ (${ Id.VSub_Name flavor_name))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'Flavor '> (${ Id.VSub_Name flavor_name) <' already made, skipping'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1040 1055]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'Making VM flavor '> (${ Id.VSub_Name flavor_name))}]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {<0>}
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'output='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'output='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [
                                      {(${ Id.VSub_Name PHOTON)}
                                      {<-n>}
                                      {<flavor>}
                                      {<create>}
                                      {<--name>}
                                      {(DQ (${ Id.VSub_Name flavor_name))}
                                      {<--kind>}
                                      {(DQ <vm>)}
                                      {<--cost>}
                                      {(DQ (${ Id.VSub_Name flavor_spec))}
                                    ]
                                    redirects: [
                                      (Redir
                                        op: <Id.Redir_GreatAnd '2>&'>
                                        loc: (redir_loc.Fd fd:2)
                                        arg: {<1>}
                                      )
                                    ]
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [
                            {<echo>}
                            {
                              (DQ <'ERROR: Could not create vm flavor '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) (${ Id.VSub_Name flavor_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                                <', exiting'>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Output from flavor creation:'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ (${ Id.VSub_Name output))}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      redirects: []
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create-disk-flavor>
      name: create-disk-flavor
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'rc='> <0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<output>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [{(${ Id.VSub_Name PHOTON)} {<flavor>} {<list>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {<-q>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name PHOTON_DISK_FLAVOR) 
                            <Id.Lit_BadBackslash '\\'> <t>
                          )
                        }
                      ]
                      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: [<Id.Op_Pipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '?')}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (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_Name rc)}
                                  right: {<0>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <check-flavor-ready>
                      more_env: []
                      words: [{<check-flavor-ready>} {(DQ (${ Id.VSub_Name PHOTON_DISK_FLAVOR))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'Flavor '> (${ Id.VSub_Name PHOTON_DISK_FLAVOR) 
                            <' already made, skipping'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1236 1251]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'Making disk flavor '> (${ Id.VSub_Name PHOTON_DISK_FLAVOR))}]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {<0>}
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'output='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'output='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [
                                      {(${ Id.VSub_Name PHOTON)}
                                      {<-n>}
                                      {<flavor>}
                                      {<create>}
                                      {<--name>}
                                      {(DQ (${ Id.VSub_Name PHOTON_DISK_FLAVOR))}
                                      {<--kind>}
                                      {(DQ <ephemeral-disk>)}
                                      {<--cost>}
                                      {(DQ (${ Id.VSub_Name SETUP_DISK_FLAVOR_SPEC))}
                                    ]
                                    redirects: [
                                      (Redir
                                        op: <Id.Redir_GreatAnd '2>&'>
                                        loc: (redir_loc.Fd fd:2)
                                        arg: {<1>}
                                      )
                                    ]
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [
                            {<echo>}
                            {
                              (DQ <'ERROR: Could not create disk flavor '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) (${ Id.VSub_Name PHOTON_DISK_FLAVOR) 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) <', exiting'>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Output from flavor creation:'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ (${ Id.VSub_Name output))}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      redirects: []
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <check-flavor-ready>
      name: check-flavor-ready
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'flavor_name='> (${ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'rc='> <0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<flavor_id>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'flavor_id='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'flavor_id='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'flavor_id='> name:flavor_id)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (CommandSub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (command.Pipeline
                                children: [
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [{(${ Id.VSub_Name PHOTON)} {<flavor>} {<list>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                  (command.Simple
                                    blame_tok: <grep>
                                    more_env: []
                                    words: [
                                      {<grep>}
                                      {
                                        (DQ <Id.Lit_BadBackslash '\\'> <t> 
                                          (${ Id.VSub_Name flavor_name) <Id.Lit_BadBackslash '\\'> <t>
                                        )
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                  (command.Simple
                                    blame_tok: <awk>
                                    more_env: []
                                    words: [{<awk>} {(SQ <'{print $1}'>)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                ]
                                ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'ERROR: Found '> (${ Id.VSub_Name flavor_name) 
                            <' but cannot find it\'s id'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [
                        {(${ Id.VSub_Name PHOTON)}
                        {<flavor>}
                        {<show>}
                        {(DQ (${ Id.VSub_Name flavor_id))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <tREADY> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\$'>
                              ch: '$'
                            )
                          )
                        }
                      ]
                      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: [<Id.Op_Pipe _>]
                )
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'ERROR: Flavor '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) (${ Id.VSub_Name flavor_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                            <' already exists but is not READY. Please delete or fix it.'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <create-image>
      name: create-image
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'rc='> <0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<num_images>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<output>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [{(${ Id.VSub_Name PHOTON)} {<image>} {<list>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name PHOTON_IMAGE) 
                            <Id.Lit_BadBackslash '\\'> <t>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [{<grep>} {<-q>} {<ERROR>}]
                      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: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '?')}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (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_Name rc)}
                                  right: {<0>}
                                )
                              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 <'Warning: You have at least one '> (${ Id.VSub_Name PHOTON_IMAGE) 
                            <' image in the ERROR state. You may want to investigate.'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Images in the ERROR state will be ignored.'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1587 1602]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'rc='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'rc='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'num_images='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'num_images='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'num_images='> name:num_images)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <Id.Left_DollarBrace '${'>
                                more_env: []
                                words: [{(${ Id.VSub_Name PHOTON)} {<image>} {<list>}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <grep>
                                more_env: []
                                words: [
                                  {<grep>}
                                  {
                                    (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name PHOTON_IMAGE) 
                                      <Id.Lit_BadBackslash '\\'> <t>
                                    )
                                  }
                                ]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <grep>
                                more_env: []
                                words: [{<grep>} {<READY>}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <wc>
                                more_env: []
                                words: [{<wc>} {<-l>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>]
                          )
                        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.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_gt
                                  left: {(DQ (${ Id.VSub_Name num_images))}
                                  right: {<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 <'Warning: You have more than one good '> (${ Id.VSub_Name PHOTON_IMAGE) 
                            <' image. You may want to remove duplicates.'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1677 1694]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <Id.Left_DollarBrace '${'>
                      more_env: []
                      words: [{(${ Id.VSub_Name PHOTON)} {<image>} {<list>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [
                        {<grep>}
                        {
                          (DQ <Id.Lit_BadBackslash '\\'> <t> (${ Id.VSub_Name PHOTON_IMAGE) 
                            <Id.Lit_BadBackslash '\\'> <t>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <grep>
                      more_env: []
                      words: [{<grep>} {<-q>} {<READY>}]
                      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: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '?')}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (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_Name rc)}
                                  right: {<0>}
                                )
                              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 <'Image '> (${ Id.VSub_Name PHOTON_VMDK) <' already uploaded, skipping'>)
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1755 1770]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'Uploading image '> (${ Id.VSub_Name PHOTON_VMDK))}]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'rc='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'rc='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rc='> name:rc)
                      op: assign_op.Equal
                      rhs: {<0>}
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'output='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'output='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'output='> name:output)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <Id.Left_DollarBrace '${'>
                                    more_env: []
                                    words: [
                                      {(${ Id.VSub_Name PHOTON)}
                                      {<image>}
                                      {<create>}
                                      {(DQ (${ Id.VSub_Name PHOTON_VMDK))}
                                      {<-n>}
                                      {(DQ (${ Id.VSub_Name PHOTON_IMAGE))}
                                      {<-i>}
                                      {<EAGER>}
                                    ]
                                    redirects: [
                                      (Redir
                                        op: <Id.Redir_GreatAnd '2>&'>
                                        loc: (redir_loc.Fd fd:2)
                                        arg: {<1>}
                                      )
                                    ]
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'ERROR: Could not upload image, exiting'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Output from image create:'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ (${ Id.VSub_Name output))}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      redirects: []
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<Id.Lit_Other '+'> <o>} {<pipefail>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <parse-cmd-line>
      more_env: []
      words: [{<parse-cmd-line>} {(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
    (command.Simple blame_tok:<main> more_env:[] words:[{<main>}] redirects:[] do_fork:T)
  ]
)