Complex vars

Showcase how vars are passed into module task func and value returns to caller

source

How does it work?

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)

config file - upconfig.yml

    
    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
    

up task - up.yml

    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"}}'
    

up module task - up.yml

    
    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
    
Main log file
    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"}}]
    
Logs with different verbose level
Raw logs with different verbose level