如何在同一主机上两次执行Ansible角色并指定不同变量文件?
Ansible重复执行角色并指定不同变量文件的实现方法
当然可以实现,但你给出的示例写法有问题——var_file不是Ansible角色的内置参数,得用以下几种正确方式来实现需求:
方法一:用include_role搭配vars_files加载变量
这种方式直接在任务层面为每次角色执行绑定对应的变量文件,逻辑清晰:
- name: install-vmtest hosts: test_nodes tasks: - name: 执行test角色,加载variables1.yml变量 include_role: name: test vars_files: - variables1.yml - name: 执行test角色,加载variables2.yml变量 include_role: name: test vars_files: - variables2.yml
方法二:在角色内部通过传参加载指定变量文件
如果你想保留类似示例的传参形式,可以修改角色本身,让它支持接收变量文件路径参数:
- 编辑
roles/test/tasks/main.yml,在开头添加加载变量的任务:
- name: 加载指定的变量文件 include_vars: "{{ var_file }}"
- 然后就可以像你最初写的那样调用角色了:
- name: install-vmtest hosts: test_nodes roles: - { role: test, var_file: variables1.yml } - { role: test, var_file: variables2.yml }
注意:要保证var_file对应的文件路径正确,可使用相对路径(相对于playbook所在目录)或绝对路径。
方法三:直接通过vars传递变量(适合变量少的场景)
如果变量数量不多,没必要单独写变量文件,直接在调用角色时传入变量即可:
- name: install-vmtest hosts: test_nodes roles: - role: test vars: var1: value1 var2: value2 - role: test vars: var1: value3 var2: value4
注意事项
- 变量文件路径要准确,Ansible会优先查找playbook所在目录,也可以指定角色目录下的路径(比如
roles/test/vars/variables1.yml)。 - 两次执行角色的变量上下文是独立的,后一次的变量不会被前一次影响,无需担心变量冲突问题。
内容的提问来源于stack exchange,提问作者Магомед Якубов
相关产品推荐
相关产品推荐

