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
# 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