如何覆盖Ansible中的嵌套默认值
我在my/defaults/main.yml中有一些嵌套的默认变量:如何覆盖Ansible中的嵌套默认值,ansible,Ansible,我在my/defaults/main.yml中有一些嵌套的默认变量: php_fpm_pools: - name: www user: php-fpm 在playbook中,我想覆盖用户默认值,我尝试了以下选项,但没有成功: roles: - { name: php-fpm, php_fpm_pools.[www].user: vagrant php_fpm_pools.www.user: vagrant php_fpm_pools.['www
php_fpm_pools:
- name: www
user: php-fpm
在playbook中,我想覆盖用户默认值,我尝试了以下选项,但没有成功:
roles:
- {
name: php-fpm,
php_fpm_pools.[www].user: vagrant
php_fpm_pools.www.user: vagrant
php_fpm_pools.['www'].user: vagrant
}
为了覆盖默认值,我必须使用什么样的正确语法?覆盖默认dict/list的一部分并不容易
您可以覆盖完整变量,如:
roles:
- role: php-fpm
php_fpm_pools:
- name: www
user: vagrant
或者在角色开头编写自定义逻辑,以将参数与默认变量合并
有时有一种简单的解决方法,如:
def_pool_user: php-fpm
php_fpm_pools:
- name: www
user: "{{ def_pool_user }}"
这样您可以只覆盖def\u pool\u user
您尝试过吗
谢谢你的回答。Ansible在这里让我大吃一惊,因为这超出了拥有默认值的目的——如果我必须从playbook中重新发送全部50个值的话。在您的第二个建议中,def_pool_用户必须是def_pool_www_用户,我将在默认文件中复制该工作。默认变量在Ansible中完全可以使用。你只需要重新组织一下。
roles:
- name: php-fpm
php_fpm_pools: '{{ php_fpm_pools |combine({'user':'vagrant'}) }}'