您可以做的一件事是在调用角色时覆盖该变量。你可以在你的剧本中这样做:
---
- hosts: localhost
roles:
- {role: "myRole", sysproperties.java_iccprofile_path.value: "somwhere/else"}
...
希望这会有所帮助。
更新
唔。有趣的。这是我的测试设置:
myRole
+ tasks
| + main.yml
+ vars
| + main.yml
+ testrole.yml
这里是myRole/tasks/main.yml的内容
---
- name: Debugging
debug: var=foo
...
这里是myRole/vars/main.yml的内容
---
foo: "blah"
...
这里是testrole.yml的内容
---
- hosts: localhost
roles:
- myRole
...
如果我跑步
ansible-playbook ./testrole.yml
我明白了
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [defaults : Debugging] ****************************************************
ok: [localhost] => {
"foo": "blah"
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
如果我将 testrole.yml 更新为以下内容:
---
- hosts: localhost
roles:
- {role: "myRole", foo: "yuck"}
...
我明白了
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [defaults : Debugging] ****************************************************
ok: [localhost] => {
"foo": "yuck"
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
所以,我尝试使用字典。
myRole/vars/main.yml:
---
sysproperties:
java_something_else:
key: "path"
java_iccprofile_path:
value: "i/am/here"
...
如果我将 sysproperties.java_iccprofile_path.value: "some/where/else" 放入 testrole.yml,它会失败。如果我在 testrole.yml 中有以下内容,它会起作用:
---
- hosts: localhost
roles:
- {role: "myRole", sysproperties: {java_iccprofile_path: {value: "yuck"}}}
...
上面的输出是
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [defaults : Debugging] ****************************************************
ok: [localhost] => {
"sysproperties": {
"java_iccprofile_path": {
"value": "yuck"
}
}
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
如您所见,它替换了值,但也删除了其他值。
我发现here,将 hash_behavior 的值更改为在 ansible.cfg 文件中合并将保留旧内容,并且只会覆盖您告诉它要覆盖的内容。
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [defaults : Debugging] ****************************************************
ok: [localhost] => {
"sysproperties": {
"java_iccprofile_path": {
"value": "yuck"
},
"java_something_else": {
"key": "path"
}
}
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0