2016-01-29 16 views
12

Tôi muốn đặt biến ansible thành một số giá trị mặc định nhưng chỉ khi biến không được xác định. Nếu không, tôi muốn giữ nó không thay đổi.Ansible: Đặt biến chỉ khi undefined

tôi đã cố gắng hai cách tiếp cận này và cả trong số họ tạo ra vòng lặp đệ quy:

namespace: "{{namespace|default(default_namespace)}}" 
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}" 

Trả lời

18

Có vẻ như bạn đang dùng một cách tiếp cận sai.

Hãy xem tài liệu Ansible liên quan đến variable precedence. Nó là một tính năng tích hợp của Ansible để sử dụng biến mặc định nếu biến không được xác định.

Trong Ansible 2.x các ưu tiên biến bắt đầu như thế này:

vai trò mặc định

hàng tồn kho vars

Vì vậy, nếu bạn muốn xác định một giá trị mặc định cho một biến, bạn nên đặt nó trong role/defaults/main.yml. Ansible sẽ chỉ sử dụng giá trị đó nếu biến không được định nghĩa ở một nơi khác.

Tùy chọn khác là sử dụng Jinja2 filter. Với một bộ lọc Jinja bạn có thể đặt một giá trị mặc định cho một biến như thế này:

{{ some_variable | default(5) }} 
+1

Sử dụng các bộ lọc Jina2 là nó có thể làm điều gì đó như '{{biến | mặc định (other_variable)}} '? – johnsona

+1

Điều đó sẽ hoạt động. Bạn đã thử chưa? Nó có hoạt động không? –

+2

Có, tôi cho rằng tôi sẽ phải lồng các nẹp xoăn không hoạt động. – johnsona

10
- set_fact: namespace="default_namespace" 
    when: namespace is undefined 
Các vấn đề liên quan