2015-11-03 12 views
23

Host için bir sistem gerçeği, bir değişken için bir baz olarak bir sayı/yüzde değeri kullanmak istiyorum. Özel olarak yapmaya çalıştığım şey ansible_memtotal_mb değerini kullanmak ve bir Couchbase değerini ayarlamak için bir ramsize almak için .80 ile çarpmaktır. Aşağıdaki satırın farklı varyasyonlarını deniyorum. Bunun mümkün olduğundan emin değilim, ama herhangi bir yardım takdir edilecektir.Ansible - Değişken değeri ayarlarken aritmetik kullanabilir miyim?

vars: 
    ramsize: '"{{ ansible_memtotal_mb }}" * .80' 
+1

Bunu nereden kullanmaya çalışıyorsunuz? Eğer bir şablonun içinde ise o zaman bunu yapmak için Jinja filtrelemeyi doğrudan kullanabilirsiniz. Ne yazık ki şablonların dışında Ansible sadece Jinja filtrelerinin soyulmuş listesini destekliyor ve çarpmanın bunun içinde olduğunu düşünmüyorum. – ydaetskcoR

+0

Oyun kitabında doğru. Ayrı bir şablonda değil. – AValenti

+0

Evet, ama değişkeni nasıl kullanmayı düşünüyorsunuz? – ydaetskcoR

cevap

38

Gerçekten yakınsınız! Yaptığınız işe benzer bazı varsayılan java bellek boyutlarını ayarlamak için hesaplamalar kullanıyorum.

, bu jinja math kullanıyor şeyler- ilk birkaç gösterir
{{ (ansible_memtotal_mb*0.8-700)|int|abs }} 

yüzden {{ jinja }} içindeki hesaplamalar yapın: İşte bir örnek. İkinci olarak, int ve abs, beklediğinizi yaparsınız - sonuç, işaretsiz bir tamsayıdır. Senin durumunda

, doğru kod olacaktır:

vars: 
    ramsize: "{{ ansible_memtotal_mb * 0.8 }}" 
+2

Yardımın için teşekkürler. Son çözümüm, örneğiniz gibi son buldu. Ondalıktan önce 0 eklemeliydim, aksi halde şikayet etti. Ayrıca, değişken tanımının çift tırnak içine alınması gerekiyordu. Tamsayı bir değer istedim ve mutlak bir değer olduğundan emin olmak için zarar vermez. ramsize: "{{(ansible_memtotal_mb * 0.8) | int | abs}}" – AValenti