2016-04-29 42 views
5

YAML formatına sahip bir configuration file şablonunu ayarlamalıyım. Bunu yapmak için iyi bir uygulama nedir?YALL ile ısınabilir YAML

Final dosya şuna benzer: Bu değişkenlerin çoğu

development: 
    adapter: mysql2 
    database: tracks 
    # set this if you are storing utf8 in your mysql database to handle strings 
    # like "Réné". Not needed for sqlite. For PostgreSQL use encoding: unicode 
    # encoding: utf8 
    host: localhost 
    username: root 
    password: qwerty 

tanımlanması gerektiğini ve bazı varsayılan olmayan değerler gerekir. Ve hem vars hem de şablonda YAML. Bu yüzden neredeyse aynı yapıyı en az iki kere tekrarlamalıyım: şablonda ve vars dosyasında.

Gerçek bir sorun, isteğe bağlı parametrelerdir.

# tasks/configure.yml 
- include: {tracks_database}.yml 

# variables/mysql2.yml 
tracks_database_encoding: utf8 

# templates/site.yml 
development: 
    database: "{{ tracks_database }}" 
    {% if tracks_database_use_utf8 %} 
    encoding: "{{ tracks_database_encoding }}" 
    {% endif %} 
  • Bu oldukça çirkin görünüyor ve YAML biçimlendirme kırar: Ben böyle bir şey yazmak zorunda doğru kodlamayı (ya da hiç) ayarlamak için. Bir değişkende olduğu gibi yapılandırmayı depolamak ve sadece yapılandırma through a jijna filter bunu yazmak için: tekrarlanan kod

ait

  • sürü yüzden başka bir yol olarak kabul ettik.

    # group_vars/tracks.yml 
    tracks_database_settings: 
        development: 
        name: tracks 
        adapter: mysql2 
        host: localhost 
        encoding: utf8 
        username: root 
        password: qwerty 
    
    # templates/site.yml 
    {{ tracks_database_settings | to_nice_yaml }} 
    

    Ama orada olumsuz etkiler: Sadece birkaç değişkenleri geçersiz kılmak için gerekiyorsa

    • Yorumlar
    • kaybolur, ben tüm yapıyı kopyalamak gerekiyor. (hash_behaviour=merge bir seçenek değildir).
    • Farklı db türleri için değişkenler ve include bunları önceden ayarlayamıyorum.
    • Sözlükdeki öğeler yeniden düzenlenir (sıralanır).

    YAML dosyalarını biçimlendirmenin daha iyi bir yolu var mı? Şu anda combining hashes/dictionaries bakıyorum

    {{ tracks_database_default_settings_with_comments | 
        with overriden values from group_vars/host_vars/whatever | 
        with preset values from db-specific file | 
        to_nice_yaml_with_comments }} 
    

    , ama yine de kombine sözlükleri nasıl tanımlanacağı/fikrim yok: mükemmel bir çözüm gibi bir şey olurdu.


    UPD: şimdi bunu başardı tarafından:

    {{ tracks_database_defaults | combine(tracks_database_override, recursive=True) | to_nice_yaml }} 
    

    Ama yanıtlayıcı 'için gerçekten sıradışı görünüyor. Ve hala rahatsız edici.

    • hash_behaviour = birleştirme Sen en aldı bir seçenek
    • var ve şablon dosyaları içinde kendini tekrar etmez

    değildir: Mevcut değişken yönetim davranış ve ihtiyaçlarına göre

  • cevap