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

时间:2017-02-21 09:02:37

标签: ansible

我的/defaults/main.yml中有一些嵌套的默认变量:

php_fpm_pools:
  - name: www
    user: php-fpm

在剧本中,我想覆盖用户默认值,我尝试了以下选项,但无济于事:

roles:
  - {
    name: php-fpm,

    php_fpm_pools.[www].user: vagrant
    php_fpm_pools.www.user: vagrant
    php_fpm_pools.['www'].user: vagrant
  }

为了覆盖该默认值,我必须使用哪种正确的语法?

2 个答案:

答案 0 :(得分:2)

没有 easy 方式来覆盖部分默认字典/列表。

你要么覆盖完整的var,比如:

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_pool_user

答案 1 :(得分:0)

您是否尝试过Filters | Combining hashes/dictionaries

roles:
  - name: php-fpm
    php_fpm_pools: '{{ php_fpm_pools |combine({'user':'vagrant'}) }}'