Follow

Alalalala, ces fichier de conf où il faut définir les options dans le bon ordre… Genre Knot.
Je me dis chouette, c'est du "presque-yaml" j'ai juste à définir mes dictionnaires dans Ansible, puis {{ templates | to_nice_yaml }} et tout va bien !

Et bien non.

Genre :

template:
- id: default
file: %s.zone
storage: /var/lib/knot

==> Le serveur arrive à démarrer.

Contrairement à :

template:
- file: %s.zone
id: default
storage: /var/lib/knot

==> Critical: failed to load configuration file [...] (missing identifier)

Et les dictionnaires python n'étant pas ordonnés, to_nice_yaml fait un output avec les clefs par ordre alphabétique pour garantir une certaine idempotence.

Cette fois ce n'est pas le code d'Ansible mais celui de PyYAML qu'il fallait aller lire.

J'ai pas trouvé l'info dans pyyaml.org/wiki/PyYAMLDocument mais par contre dans github.com/yaml/pyyaml/blob/ee y'a un `sort_keys=True` dont on peut changer la valeur.

Et effectivement dans Ansible / Jinja2 on peut faire `| to_nice_yaml(indent=2, sort_keys=False)` et ça essaie de préserver le même ordre. J'ai crus comprendre que depuis python 3.6 les dictionnaires sont plus ou moins tout le temps ordonné et donc y'a pas trop de risque coté idempotence.

Sign in to participate in the conversation
Mastodon Opportun.e

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!