2017-02-21 19 views
0
覆蓋嵌套的默認值

我在/defaults/main.yml一些嵌套的默認變量:如何Ansible

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

沒有很容易覆蓋部分默認字典/列表的方法。

你是覆蓋全變種,如:

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覆蓋。

+0

感謝您的回答。 Ansible在這裏給我帶來了負面的影響,因爲這會違背默認值的目的 - 如果我不得不從劇本中重新發送整套50個值。在你的第二個建議中,def_pool_user必須是def_pool_www_user,我將在默認文件中複製工作。 –

+0

Ansible中的默認變量是完全正確的。你只需要重新組織它們。 –