如何覆盖Ansible中的嵌套默认值

如何覆盖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

我在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'].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'}) }}'