2015-03-10 22 views
6

Kasadan bir ana bilgisayarımdaki bir yaml dosyasına almak istediğim özel bir değişken yapıya sahibim. içerik neredeyse tamamen içinde bulundukları ortama göre değişir çünküYAML dosyasına Ansible yazma değişkenleri

secrets: 
    psp1: 
    username: this 
    password: that 
    secret_key: 123 
    ... 

Ben, "sırlar" Şu anda içeren her türlü çıkışa bir "genel" bir şablon gibi bir şey gerekiyor:

Böyle bir yapıyı varsayalım.

aklıma gelen en kolay çözüm çıkışına böyle bir şablonda bütün yapıdır:

# config/secrets.yml 
{{ secrets | to_yaml }} 

Ama jinja2 to_yaml filtresi sadece ilk düzeyi "yamlify" yok, derin yerleştirmelerin json çıkarıldığını .

Bu soruna bir şekilde çalışabilir miyim? İstediğimi elde etmenin daha kolay bir yolu var mı?

Yardımlarınız için teşekkürler!

+0

geçersiz kılamaz olduğunu. – jwodder

+0

@jwodder Arg! Tabi ki haklısın. Neden bu gerçeği göremediğimi bilmiyorum. Teşekkür ederim. –

cevap

12
  1. jwodder'ın dediği gibi, geçerli.
  2. to_yaml (to_nice_yaml yerine) kullanıyorsanız, oldukça eski bir yükleme kabiliyetine sahipseniz, yükseltme zamanı.
  3. Kullanım to_nice_yaml
  4. Genellikle altta yatan piton modülü çağrısına onları geçmek fonksiyonları filtrelemek için kendi kwargs geçmek mümkündür. Davanız için this one gibi. Yani böyle bir şey:

    {{ secrets | to_nice_yaml(width=50, explicit_start=True, explicit_end=True) }} 
    

    sadece catch hala YAML alıyoruz böylece JSON YAML geçerli bir alt kümesidir indent=4, allow_unicode=True, default_flow_style=False

+0

bu elasticsearch için benim oyun kitabı için harika çalıştı, bir dizi –

+1

tüm yapılandırma dökümü Bu bir biçimlendirme hata değil, bu bir biçimlendirme özelliği. Liste öğesinin içindeki kodun çift girintili olması gerekir. –

+0

“Girintinin” artık en azından Ansible 2.2.0'dan itibaren geçersiz kılınabileceğini unutmayın (bir proje için kodlama standartlarını takip etmek için 2 boşluk girintisini kullanıyorum). Bakınız: https://github.com/ansible/ansible/pull/17085 – geerlingguy