github.com/upcmd/up@v0.8.1-0.20230108151705-ad8b797bf04f/tests/functests/c0080.yml (about) 1 doc_meta: | 2 folder: design-patterns 3 title: modular tasks 4 head: | 5 To extend from previous example to show that you can use call func to chain through your tasks so it is more modular and clear 6 7 sections: 8 - title: Demo 9 log: yes 10 11 notes: 12 goal: | 13 extend c0079 to use composible call to make tasks configuration modular 14 15 vars: 16 complex_data_structure_template: | 17 school: 18 name: '{{.school_name}}' 19 address: '{{.school_address}}' 20 principals: 21 {{- range $_, $p :=.schoo_principals }} 22 - {{$p}} 23 {{- end}} 24 ranking: '{{.schoo_ranking}}' 25 26 dvars: 27 - name: intest 28 value: '{{ env "GOTEST" |default "false" }}' 29 30 tasks: 31 - 32 name: task 33 task: 34 - 35 func: call 36 do: 37 - compose_required_object 38 - render 39 40 - 41 name: compose_required_object 42 desc: prepare the data object for rendering 43 task: 44 - 45 func: cmd 46 vars: 47 school_name: sydney grammar 48 school_address: 1 fox road, sydney, nsw 2000 49 schoo_principals: 50 - peter 51 - tom 52 - jane 53 schoo_ranking: No 5 54 dvars: 55 - name: school_string 56 desc: use default expand == 1 57 value: '{{.complex_data_structure_template}}' 58 do: 59 - name: print 60 cmd: '{{.school_string}}' 61 62 - 63 func: cmd 64 vars: 65 school_name: sydney grammar 66 school_address: 1 fox road, sydney, nsw 2000 67 schoo_principals: 68 - peter 69 - tom 70 - jane 71 schoo_ranking: No 5 72 dvars: 73 - name: school_yml 74 desc: use dynamic expand == 2, so that the template will be rendered 75 value: '{{.complex_data_structure_template}}' 76 expand: 2 77 flags: [reg] 78 do: 79 - name: print 80 cmd: '{{.school_yml}}' 81 82 - 83 func: cmd 84 desc: | 85 show global school_yml var 86 convert the yml to object so that it could be used in template later 87 dvars: 88 - name: school_details 89 desc: use dynamic expand == 2, so that the template will be rendered 90 value: '{{.school_yml}}' 91 flags: [vvv, toObj, reg] 92 do: 93 - name: print 94 cmd: '{{.school_yml}}' 95 - name: printObj 96 cmd: 'school_details' 97 - name: print 98 cmd: '{{.school_details}}' 99 - name: printObj 100 cmd: 'school_details_object' 101 102 103 - 104 name: render 105 task: 106 107 - func: shell 108 do: 109 - echo "?intest -> {{.intest}}" 110 - pwd 111 reg: register_render_root 112 113 - func: cmd 114 do: 115 - name: print 116 cmd: 'intest is: [{{.intest}}]' 117 118 - name: reg 119 cmd: 120 name: correct_working_dir 121 desc: the value of .intest is string but not bool so you can not simple use if .intest for condition 122 value: >- 123 {{if eq .intest "true" }}{{.register_render_root.Output}}{{else}}{{.register_render_root.Output}}{{end}} 124 125 - func: cmd 126 do: 127 - name: print 128 cmd: 'root dir is: [{{.register_render_root.Output}}]' 129 130 - name: print 131 cmd: 'correct working dir is: [{{.correct_working_dir}}]' 132 133 - 134 func: cmd 135 desc: render final result using template 136 do: 137 - name: template 138 desc: render the template file using above dynamic variable from defined var 139 cmd: 140 src: '{{.correct_working_dir}}/tests/functests/d0079.template' 141 dest: /tmp/myschool.txt 142 datakey: "school_details_object" 143 144 - func: cmd 145 do: 146 - name: readFile 147 desc: read content of a file and register it to a var 148 cmd: 149 filename: myschool.txt 150 dir: /tmp 151 reg: my_school 152 153 - 154 name: print 155 cmd: "{{.my_school}}"