(command.CommandList
  children: [
    (C {(cube_echo)} {(DQ ('Hello World'))})
    (C {(cube_package)} {(install)} {(atop)})
    (C {(cube_service)} {(enable)} {(atop)})
    (C {(cube_service)} {(start)} {(atop)})
    (command.If
      arms: [
        (if_arm
          cond: [(command.Sentence child:(C {(cube_command_exists)} {(dnf)}) terminator:<Op_Semi ';'>)]
          action: [
            (command.AndOr
              ops: [Op_DPipe]
              children: [(C {(dnf)} {(check-update)}) (C {(cube_check_return)})]
            )
          ]
        )
      ]
    )
    (C {(cube_ensure_directory)} {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/test/)})
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.SimpleCommand
              words: [{(cube_read_heredoc)}]
              redirects: [
                (redir.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 ';'>
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:cubevar_app_myconfig)
              op: Equal
              rhs: {(DQ (${ VSub_Name cube_read_heredoc_result))}
            )
          ]
        )
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:cubevar_app_name)
          op: Equal
          rhs: {(DQ ('Hello World'))}
        )
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:cubevar_app_test)
          op: Equal
          rhs: 
            {
              (DQ ('{ host: ') 
                (word_part.CommandSubPart
                  command_list: (command.CommandList children:[(C {(cube_hostname)})])
                  left_token: <Left_CommandSub '$('>
                ) (', random: ') 
                (word_part.CommandSubPart
                  command_list: (command.CommandList children:[(C {(cube_random_number)} {(10)})])
                  left_token: <Left_CommandSub '$('>
                ) (', memory: ') 
                (word_part.CommandSubPart
                  command_list: (command.CommandList children:[(C {(cube_total_memory)})])
                  left_token: <Left_CommandSub '$('>
                ) (', ip: ') 
                (word_part.CommandSubPart
                  command_list: 
                    (command.CommandList
                      children: [(C {(cube_interface_ipv4_address)} {(eth0)})]
                    )
                  left_token: <Left_CommandSub '$('>
                ) (' }')
              )
            }
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(cube_set_file_contents_string)} 
                  {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/test/test.cfg)} {(DQ (${ VSub_Name cubevar_app_myconfig))}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (command.AndOr
              ops: [Op_DPipe]
              children: [
                (C {(chmod)} {(600)} 
                  {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/test/test.cfg)}
                )
                (C {(cube_check_return)})
              ]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(cube_has_role)} {(DQ (production))})
                    (C {(cube_file_contains)} 
                      {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/test/test.cfg)} {(DQ ('ip: 10'))}
                    )
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(cube_throw)} {(DQ ('Production role on test box'))})]
        )
      ]
    )
  ]
)