(command.CommandList
  children: [
    (command.Simple
      blame_tok: <cube_echo>
      more_env: []
      words: [{<cube_echo>} {(DQ <'Hello World'>)}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <cube_package>
      more_env: []
      words: [{<cube_package>} {<install>} {<atop>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <cube_service>
      more_env: []
      words: [{<cube_service>} {<enable>} {<atop>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <cube_service>
      more_env: []
      words: [{<cube_service>} {<start>} {<atop>}]
      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: <cube_command_exists>
                      more_env: []
                      words: [{<cube_command_exists>} {<dnf>}]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <dnf>
                  more_env: []
                  words: [{<dnf>} {<check-update>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <cube_check_return>
                  more_env: []
                  words: [{<cube_check_return>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          spids: [33 41]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Simple
      blame_tok: <cube_ensure_directory>
      more_env: []
      words: [{<cube_ensure_directory>} {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/test/'>}]
      redirects: []
      do_fork: T
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <cube_read_heredoc>
              more_env: []
              words: [{<cube_read_heredoc>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <HEREDOC>)}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'[app]\n'>
                        <'name=${cubevar_app_name}\n'>
                        <'test=${cubevar_app_test}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'cubevar_app_myconfig='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'cubevar_app_myconfig='>
              lhs: 
                (sh_lhs_expr.Name
                  left: <Id.Lit_VarLike 'cubevar_app_myconfig='>
                  name: cubevar_app_myconfig
                )
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name cube_read_heredoc_result))}
            )
          ]
          redirects: []
        )
      ]
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'cubevar_app_name='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'cubevar_app_name='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cubevar_app_name='> name:cubevar_app_name)
          op: assign_op.Equal
          rhs: {(DQ <'Hello World'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'cubevar_app_test='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'cubevar_app_test='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cubevar_app_test='> name:cubevar_app_test)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'{ host: '> 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <cube_hostname>
                      more_env: []
                      words: [{<cube_hostname>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                ) <', random: '> 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <cube_random_number>
                      more_env: []
                      words: [{<cube_random_number>} {<10>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                ) <', memory: '> 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <cube_total_memory>
                      more_env: []
                      words: [{<cube_total_memory>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                ) <', ip: '> 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <cube_interface_ipv4_address>
                      more_env: []
                      words: [{<cube_interface_ipv4_address>} {<eth0>}]
                      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: <cube_set_file_contents_string>
                      more_env: []
                      words: [
                        {<cube_set_file_contents_string>}
                        {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/test/test.cfg'>}
                        {(DQ (${ Id.VSub_Name cubevar_app_myconfig))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <chmod>
                  more_env: []
                  words: [
                    {<chmod>}
                    {<600>}
                    {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/test/test.cfg'>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <cube_check_return>
                  more_env: []
                  words: [{<cube_check_return>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          spids: [112 127]
        )
      ]
      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.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <cube_has_role>
                          more_env: []
                          words: [{<cube_has_role>} {(DQ <production>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <cube_file_contains>
                          more_env: []
                          words: [
                            {<cube_file_contains>}
                            {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/test/test.cfg'>}
                            {(DQ <'ip: 10'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.Simple
              blame_tok: <cube_throw>
              more_env: []
              words: [{<cube_throw>} {(DQ <'Production role on test box'>)}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [148 169]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
  ]
)