(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'))})] ) ] ) ] )