(CommandList
  children: [
    (C {(cube_echo)} {(DQ ('Hello World'))})
    (C {(cube_package)} {(install)} {(atop)})
    (C {(cube_service)} {(enable)} {(atop)})
    (C {(cube_service)} {(start)} {(atop)})
    (If
      arms: [
        (if_arm
          cond: [(Sentence child:(C {(cube_command_exists)} {(dnf)}) terminator:<Op_Semi ';'>)]
          action: [
            (AndOr
              ops: [Op_DPipe]
              children: [(C {(dnf)} {(check-update)}) (C {(cube_check_return)})]
            )
          ]
          spids: [16777215 41]
        )
      ]
      spids: [16777215 52]
    )
    (C {(cube_ensure_directory)} {(TildeSubPart token:<Lit_TildeLike '~'>) (/test/)})
    (CommandList
      children: [
        (Sentence
          child: 
            (SimpleCommand
              words: [{(cube_read_heredoc)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(SQ <HEREDOC>)}
                  here_end_span_id: 79
                  stdin_parts: [
                    ('[app]\n')
                    ('name=${cubevar_app_name}\n')
                    ('test=${cubevar_app_test}\n')
                  ]
                )
              ]
            )
          terminator: <Op_Semi ';'>
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:cubevar_app_myconfig)
              op: Equal
              rhs: {(DQ (${ VSub_Name cube_read_heredoc_result))}
              spids: [69]
            )
          ]
          spids: [69]
        )
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:cubevar_app_name)
          op: Equal
          rhs: {(DQ ('Hello World'))}
          spids: [81]
        )
      ]
      spids: [81]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:cubevar_app_test)
          op: Equal
          rhs: 
            {
              (DQ ('{ host: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(cube_hostname)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [89 91]
                ) (', random: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(cube_random_number)} {(10)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [93 97]
                ) (', memory: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(cube_total_memory)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [99 101]
                ) (', ip: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(cube_interface_ipv4_address)} {(eth0)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [103 107]
                ) (' }')
              )
            }
          spids: [86]
        )
      ]
      spids: [86]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(cube_set_file_contents_string)} 
                  {(TildeSubPart token:<Lit_TildeLike '~'>) (/test/test.cfg)} {(DQ (${ VSub_Name cubevar_app_myconfig))}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(chmod)} {(600)} {(TildeSubPart token:<Lit_TildeLike '~'>) (/test/test.cfg)})
                (C {(cube_check_return)})
              ]
            )
          ]
          spids: [16777215 127]
        )
      ]
      spids: [16777215 141]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(cube_has_role)} {(DQ (production))})
                    (C {(cube_file_contains)} 
                      {(TildeSubPart token:<Lit_TildeLike '~'>) (/test/test.cfg)} {(DQ ('ip: 10'))}
                    )
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(cube_throw)} {(DQ ('Production role on test box'))})]
          spids: [16777215 169]
        )
      ]
      spids: [16777215 178]
    )
  ]
)