1
votes

Please see my playbook below. I call 2 executions on different hosts in 1 playbook.

The first execution changes some variables in a vars file which would be used in next execution (create new backup folder and update its name to another vars file)

The second execution try to use 2 vars file to do backup tasks (using roles). The issue I met here is the vars file value were loaded with old value not the updated. Seem all defined vars files were loaded before tasks executed on all hosts, and update during running task doesn't effect.

I can separate this playbook into 2 playbooks and all work well as expected but I'm trying to combine 1 playbook. Do anyone can show me how to reload vars file in correctly executing tasks/roles ? I exactly want the second execution load the updated vars file before running roles.

## backup playbook
---
- hosts: ftpserver01
  gather_facts: no
  ignore_errors: yes
  vars_files:
    - ./vars_files/lab1.yml
    - ./vars_files/global_vars.yml
  roles:
    - create_define_backup_folder  
# this role will create new backup folder and update its name in ./vars_files/global_vars.yml
- hosts: terminal02
  become: yes
  become_method: su
  gather_facts: no
  ignore_errors: yes
  vars_files:
    - ./vars_files/lab1.yml
    - ./vars_files/global_vars.yml
  roles:
    - backup_feature01
    - backup_feature02

Expect: using updated global_vars.yml while running tasks on hosts terminal02

Actual result: all tasks on terminal02 using old value not the updated value of global_vars.yml vars_files

1

1 Answers

1
votes

Use include_vars and include_role in the 2nd play

- hosts: terminal02
  become: yes
  become_method: su
  gather_facts: no
  ignore_errors: yes
  tasks:
    - include_vars:
        file: ./vars_files/lab1.yml
    - include_vars:
        file: ./vars_files/global_vars.yml
    - include_role:
        name: backup_feature01
    - include_role:
        name: backup_feature02