我有一个通用的webserver
角色正在使用另一个nginx
角色来生成新的vserver。
webserver/meta/main.yml
看起来像:
allow_duplicates: yes dependencies: - role: nginx name: api vserver frontend_port: "{{ frontend_port }}" domain: "{{ api_domain }}" backend_host: 127.0.0.1 - role: nginx name: portal vserver domain: "{{ portal_domain }}" backend_host: 127.0.0.1
问题是这些变量应该在webserver-role/vars/(test|staging).yml
似乎Ansible将在加载变量之前尝试加载依赖项。
我该如何解决这个问题?我不想将任何配置细节放在低级角色中。
另外,我不想将配置放在剧本本身,因为这些配置是在多个剧本之间共享的。
答案 0 :(得分:7)
此方案适用于Ansible 2.2 依赖角色的变量在主角色的变量文件中指定:
./角色/基于role1 /任务/ main.yml:
- debug: msg="{{ role_param }}"
./角色/基于role2 /间/ main.yml:
allow_duplicates: yes
dependencies:
- role: role1
role_param: "{{ param1 }}"
- role: role1
role_param: "{{ param2 }}"
./角色/基于role2 /任务/ main.yml:
- debug: msg=role2
./角色/基于role2 /瓦尔/ main.yml:
param1: hello1
param2: hello2
结果:
PLAY [localhost] ***************************************************************
TASK [role1 : debug] ***********************************************************
ok: [localhost] => {
"msg": "hello1"
}
TASK [role1 : debug] ***********************************************************
ok: [localhost] => {
"msg": "hello2"
}
TASK [role2 : debug] ***********************************************************
ok: [localhost] => {
"msg": "role2"
}
答案 1 :(得分:0)
可以提供“变量”:
# roles/myapp/meta/main.yml
---
dependencies:
- role: common
vars:
some_parameter: 3
- role: apache
vars:
apache_port: 80
- role: postgres
vars:
dbname: blarg
other_parameter: 12