2015-07-02 14 views
19

Tôi cần phải tạo biến mới từ nội dung của các biến khác. Hiện nay tôi đang sử dụng một cái gì đó như thế này:Cách thích hợp để nối các chuỗi biến

- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}" 
    register: newvar 

Vấn đề là:

  • Sử dụng {{ var1 }}...{{ varN }} mang chuỗi quá dài và mã rất xấu xí.
  • Cách sử dụng {{ newvar.stdout }} tốt hơn một chút nhưng khó hiểu.
  • Cách sử dụng set_fact bộ nhớ cache mô-đun thực tế giữa các lần chạy. Nó không thích hợp với tôi.

Có giải pháp nào khác không?

Trả lời

19

Câu hỏi hay. Nhưng tôi nghĩ không có câu trả lời phù hợp với tiêu chí của bạn. Điều tốt nhất tôi có thể nghĩ là sử dụng một tệp vars bổ sung.

Một nhiệm vụ như thế này:

- include_vars: concat.yml 

Và trong concat.yml bạn có định nghĩa của bạn:

newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}" 
6

Kể từ dây là danh sách các nhân vật trong Python, chúng ta có thể nối dây theo cùng một cách chúng ta nối danh sách (có dấu +):

{{ var1 + '-' + var2 + '-' + var3 }} 

Nếu bạn muốn tạo chuỗi kết quả với một số bộ lọc, hãy đảm bảo bạn đính kèm các bit trong dấu ngoặc đơn:

ví dụ: Để nối 3 vars của chúng tôi, và có được một băm SHA512:

{{ (var1 + var2 + var3) | hash('sha512') }} 

Lưu ý: đây hoạt động trên Ansible 2.3. Tôi đã không thử nghiệm nó trên các phiên bản trước đó.

Các vấn đề liên quan