In this demo, the vars are processed exactly same way like a internal caller func invoke a callee task
So, at the entry point of the call func, it has assembled a list of execution vars. When these vars passed to callee func, these vars will firstly override callee’s globle runtime vars, then override callee’s local vars
The magic here is that the caller func carries external vars to influence callee’s behavior, while callee still derives all necessary settings from its global runtime vars(inclding group scope vars)
version: 1.0.0
Verbose: v
MaxCallLayers: 8
RefDir: .
TaskFile: up.yml
ConfigDir: .
ConfigFile: upconfig.yml
Modules:
#if there is no repo, then it will use the dir as module and incorporate as module
- dir: hello-module/
alias: hello-module
notes:
- see if callers vars could be passed to module's func
vars:
a: caller-global-aaa
b: caller-global-bbb
e: caller-global-eee
tasks:
-
name: Main
desc: main entry
task:
-
func: cmd
do:
-
name: inspect
desc: the vars in caller before invoking module task
cmd:
- exec_vars
- exec_base_vars
-
func: call
do: hello-module.Say_world
-
func: cmd
do:
-
name: inspect
desc: the vars in caller after invoking module task
cmd:
- exec_vars
- exec_base_vars
-
name: assert
cmd:
- '{{eq .a "caller-global-aaa"}}'
- '{{eq .b "caller-global-bbb"}}'
- '{{eq .c "module-global-ccc"}}'
- '{{eq .e "caller-global-eee"}}'
vars:
a: module-global-aaa
c: module-global-ccc
tasks:
-
name: Main
desc: main entry
task:
-
func: shell
desc: main job
do:
- echo "hello "
-
func: call
do: Say_world
-
name: Say_world
task:
-
func: cmd
vars:
a: module-local-aaa
b: module-local-bbb
d: module-local-ddd
do:
-
name: inspect
desc: |
the result would be:
a: caller-global-aaa
b: caller-global-bbb
c: module-global-ccc
d: module-local-ddd
e: caller-global-eee
cmd:
- exec_vars
- exec_base_vars
-
name: assert
cmd:
- '{{eq .a "caller-global-aaa"}}'
- '{{eq .b "caller-global-bbb"}}'
- '{{eq .c "module-global-ccc"}}'
- '{{eq .d "module-local-ddd"}}'
- '{{eq .e "caller-global-eee"}}'
- name: return
cmd:
- c
loading [Config]: ./tests/modtests/0005/upconfig.yml
Main config:
Version -> 1.0.0
RefDir -> ./tests/modtests/0005
WorkDir -> refdir
AbsWorkDir -> /up_project/up/tests/modtests/0005
TaskFile -> up.yml
Verbose -> v
ModuleName -> self
ShellType -> /bin/sh
MaxCallLayers -> 8
Timeout -> 3600000
MaxModuelCallLayers -> 256
EntryTask -> Main
ModRepoUsernameRef ->
ModRepoPasswordRef ->
work dir: /up_project/up/tests/modtests/0005
-exec task: Main
loading [Task]: ./up.yml
module: [self], instance id: [dev], exec profile: []
Task1: [Main ==> Main: main entry ]
-Step1:
~SubStep1: [inspect: the vars in caller before invoking module task ]
1: inspect[exec_vars]
(*core.Cache)({
"b": "caller-global-bbb",
"e": "caller-global-eee",
"up_runtime_task_layer_number": 0,
"a": "caller-global-aaa"
})
2: inspect[exec_base_vars]
{
"a": "caller-global-aaa",
"b": "caller-global-bbb",
"e": "caller-global-eee"
}
-Step2:
WARN: [config file does not exist] - [use builtin defaults]
loading [Task]: ./up.yml
module: [hello-module], instance id: [nonamed], exec profile: []
WARN: [*be aware*] - [both instance id and exec profile are not set]
=>call module: [hello-module] task: [Say_world]
Task2: [TODO: Main Caller Taskname ==> Say_world: ]
-Step1:
~SubStep1: [inspect: the result would be:
a: caller-global-aaa
b: caller-global-bbb
c: module-global-ccc
d: module-local-ddd
e: caller-global-eee
]
1: inspect[exec_vars]
(*core.Cache)({
"d": "module-local-ddd",
"c": "module-global-ccc",
"e": "caller-global-eee",
"up_runtime_task_layer_number": 0,
"up_runtime_tasker_layer_number": 2,
"a": "caller-global-aaa",
"b": "caller-global-bbb"
})
2: inspect[exec_base_vars]
{
"a": "caller-global-aaa",
"c": "module-global-ccc",
"e": "caller-global-eee",
"up_runtime_task_layer_number": 0,
"b": "caller-global-bbb"
}
~SubStep2: [assert: ]
1 ASSERT OK: [{{eq .a "caller-global-aaa"}}]
2 ASSERT OK: [{{eq .b "caller-global-bbb"}}]
3 ASSERT OK: [{{eq .c "module-global-ccc"}}]
4 ASSERT OK: [{{eq .d "module-local-ddd"}}]
5 ASSERT OK: [{{eq .e "caller-global-eee"}}]
~SubStep3: [return: ]
-Step3:
~SubStep1: [inspect: the vars in caller after invoking module task ]
1: inspect[exec_vars]
(*core.Cache)({
"up_runtime_task_layer_number": 0,
"up_runtime_tasker_layer_number": 2,
"a": "caller-global-aaa",
"b": "caller-global-bbb",
"e": "caller-global-eee",
"c": "module-global-ccc"
})
2: inspect[exec_base_vars]
{
"b": "caller-global-bbb",
"e": "caller-global-eee",
"c": "module-global-ccc",
"a": "caller-global-aaa"
}
~SubStep2: [assert: ]
1 ASSERT OK: [{{eq .a "caller-global-aaa"}}]
2 ASSERT OK: [{{eq .b "caller-global-bbb"}}]
3 ASSERT OK: [{{eq .c "module-global-ccc"}}]
4 ASSERT OK: [{{eq .e "caller-global-eee"}}]