github.com/upcmd/up@v0.8.1-0.20230108151705-ad8b797bf04f/tests/functests/c0033.yml (about)

     1  doc_meta: |
     2    folder: dvars
     3    title: local scope merge
     4    head: |
     5      Demo dvars merge in local scope in execution time
     6  
     7    sections:
     8      - title: Merging sequence
     9        content: |
    10  
    11          The merging rule follows the same chain from top down in sequence of:
    12  
    13            0. exec profile: env vars setup
    14            1. global group vars
    15            2. global group dvars
    16            3. group vars
    17            4. group dvars
    18            5. instance vars
    19            6. instance dvars
    20            7. runtime global vard
    21            8. runtime global dvard
    22            9. func local vars
    23            10. func local dvars
    24            11. callee func local vars ... | module stack (1 - 12)
    25            12. callee func local dvars ...| module stack (1 - 12)
    26  
    27      - title: Demo
    28        log: yes
    29  
    30  notes:
    31    goal:
    32      - dvars expand in instance level
    33      - dvars object can merge in leaf level
    34      - dvar in dev will override same name dvar in nonprod level
    35  
    36    expected:
    37      - school object in nonprod could append new element and
    38      - also override same name element
    39  
    40    result_log: |
    41        executing shell commands
    42        cmd( 1):
    43          echo """1.school -> {{.school}}"""
    44        1.school -> address:
    45          state: NSW
    46          city: sydney
    47          suburb:
    48            name: sydney
    49            postcode: 2000
    50            CBD: LOCAL
    51          school: Sydney Grammar
    52        principal: Mr Right
    53        cmd( 2):
    54          echo """2.school object CBD -> {{.school_object.address.suburb.CBD}}"""
    55          2.school object CBD -> LOCAL
    56        cmd( 3):
    57          echo """3.school object-> {{.school_object.address.school}}"""
    58          3.school object-> Sydney Grammar
    59        cmd( 4):
    60          echo """4.school object-> {{.school_object.principal}}"""
    61          4.school object-> Mr Right
    62  
    63  scopes:
    64    -
    65      name: global
    66      vars:
    67        student:
    68          name: Tom
    69          gender: Male
    70          address:
    71            suburb:
    72              name: sydney
    73              postcode: 2000
    74              CBD: yes
    75            school: Sydney Grammar
    76  
    77    -
    78      name: nonprod
    79      members:
    80        - dev
    81        - staging
    82      vars:
    83        a: non-prod-a
    84        b: non-prod-b
    85        c: non-prod-c
    86        d: non-prod-d
    87      dvars:
    88        - name: school
    89          value: |
    90            address:
    91              suburb:
    92                name: {{.student.address.suburb.name}}
    93                postcode: 2000
    94                CBD: yes
    95              school: {{.student.address.school}}
    96          flags: [toObj]
    97  
    98    -
    99      name: dev
   100      vars:
   101        a: dev-a
   102        b: dev-b
   103      dvars:
   104        - name: school
   105          value: |
   106            address:
   107              suburb:
   108                name: {{.student.address.suburb.name}}
   109                postcode: 2000
   110                CBD: no
   111              school: {{.student.address.school}}
   112            principal: Mr Peter
   113          flags: [toObj]
   114  
   115  
   116  tasks:
   117  
   118    -
   119      name: task
   120      task:
   121        -
   122          func: shell
   123          vars:
   124            a: local-a
   125            b: local-b
   126          dvars:
   127            - name: school
   128              value: |
   129                address:
   130                  state: NSW
   131                  city: sydney
   132                  suburb:
   133                    name: {{.student.address.suburb.name}}
   134                    postcode: 2000
   135                    CBD: LOCAL
   136                  school: {{.student.address.school}}
   137                principal: Mr Right
   138              flags: [toObj]
   139  
   140          do:
   141            - echo """1.school -> {{.school}}"""
   142            - echo """2.school object CBD -> {{.school_object.address.suburb.CBD}}"""
   143            - echo """3.school object-> {{.school_object.address.school}}"""
   144            - echo """4.school object-> {{.school_object.principal}}"""