请看下面我的剧本。我在 1 个剧本中调用了不同主机上的 2 次执行。
第一次执行更改了 vars 文件中的一些变量,这些变量将在下次执行时使用(创建新的备份文件夹并将其名称更新为另一个 vars 文件)
第二次执行尝试使用2个vars文件做备份任务(使用角色)。我在这里遇到的问题是 vars 文件值加载的是旧值而不是更新后的值。似乎所有定义的 vars 文件都是在所有主机上执行任务之前加载的,并且在运行任务期间更新不起作用。
我可以将这个剧本分成 2 个剧本,并且都按预期运行良好,但我正在尝试合并 1 个剧本。谁能告诉我如何在正确执行任务/角色时重新加载 vars 文件?我确实希望第二次执行在运行角色之前加载更新的 vars 文件。
## 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
预期:在主机 terminal02 上运行任务时使用更新的 global_vars.yml
实际结果:terminal02 上的所有任务都使用旧值而不是 global_vars.yml vars_files 的更新值
在第二局使用include_vars和include_role
- hosts: terminal02
become: yes
become_method: su
gather_facts: no
ignore_errors: yes
tasks:
- include_vars: vars_files/lab1.yml
- include_vars: vars_files/global_vars.yml
- include_role:
name: backup_feature01
- include_role:
name: backup_feature02