Одна из вещей, которую вы можете сделать, это переопределить переменную при вызове роли.Вы можете сделать это в своей игровой книге:
---
- 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
Как видите, он заменил значение, ноон также удалил другие значения.
Я обнаружил здесь , что изменение значения 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