2016-01-30 11 views
30

Rolümün içinde users linux yaratmayı özelleştiriyorum. Rolümün kullanıcılarının home_directory, group_name, name, password'u özelleştirmelerine izin vermeliyim.Ansible - Bir değişken tanımlanmamışsa varsayılanı kullan

Varsayılan değerlerle başa çıkmanın daha esnek bir yolu olup olmadığını merak ediyordum.

- name: Create default 
    user: 
    name: "default_name" 
    when: my_variable is not defined 

- name: Create custom 
    user: 
    name: "{{my_variable}}" 
    when: my_variable is defined 

Ama belirtildiği gibi, orada isteğe bağlı değişkenlerin bir sürü ve bu bir çok olasılık yaratır:

ben Yukarıdaki kod mümkün olduğunu biliyoruz.

Yukarıdaki kod gibi bir şey var mı? my_variable tanımlanmamıştır zaman

user: 
    name: "default_name", "{{my_variable}}" 

kod name="default_name" belirlemelidir.

Ben defaults/main.yml tüm değişkenleri ayarlamak ve bunun gibi kullanıcı oluşturmak olabilir:

- name: Create user 
    user: 
    name: "{{my_variable}}" 

Ama bu değişkenlerin gerçekten büyük karma içindeyken ve varsayılan olamayacağı karma içindeki bazı karmaları vardır.

+0

: https://stackoverflow.com/questions/19614027/jinja2-template-variable-if-none-object-set-a -default-value/19616065 –

cevap

58

kullanabilirsiniz Jinja en default: Eğer öğeleri üzerinde döngü istediğiniz tek bir oyun varsa, group_vars/hepsi bu liste tanımlamak veya başka bir yerde o mantıklıdır

- name: Create user 
    user: 
    name: "{{ my_variable | default('default_value') }}" 
+0

Harika, çok teşekkürler! –

+3

Varsayılan değişken başka bir değişkene bağlıysa. Örneğin, varsayılan ('/ home /' {{anothervar}}) ', bu değerleri birleştirmenin bir yolu var mı? –

+2

Sadece 'default_value' çevresini kaldırın ve default_value adlı bir değişken kullanır – dagonza

1

:

all_items: 
    - first 
    - second 
    - third 
    - fourth 

Sonra senin görevin şöyle olabilir: varlist içinde

- name: List items or default list 
    debug: 
     var: item 
    with_items: "{{ varlist | default(all_items) }}" 

Geçiş JSON dizi olarak:

ansible-playbook <playbook_name> --extra-vars='{"varlist": [first,third]}' 

Bunun öncesinde, ayrıca varlist her öğe ALL_ITEMS de olduğunu kontrol eden bir görevi isteyebilirsiniz: Değil

- name: Ensure passed variables are in all_items 
    fail: 
     msg: "{{ item }} not in all_items list" 
    when: item not in all_items 
    with_items: "{{ varlist | default(all_items) }}" 
2

tamamen ilgili ama Ayrıca undefined AND empty (örneğin, my_variable:) değişkenini de kontrol edebilirsiniz. (NOT: Sadece yanıtlayıcı 'sürümü> 1.9 ile çalışır, bkz: link) ilgili

- name: Create user 
    user: 
    name: "{{ ((my_variable == None) | ternary('default_value', my_variable)) \ 
    if my_variable is defined else 'default_value' }}"