[Salt-fr] modification automatique de valeur

Georges Racinet gracinet at anybox.fr
Lun 30 Oct 19:42:18 CET 2017


Bonjour,

On 10/30/2017 03:41 PM, MEYGRET Eric wrote:
>
>  Je gère mon dns via la formule bind(
> https://github.com/saltstack-formulas/bind-formula ), je cherche un
> moyen d’automatiser la mise à jour de la valeur « serial » de la zone,
> pour éviter les oublies..
>
>  
>
> J’ai modifié le fichier zone.jinja pour calculer la valeur au lieu de
> la prendre dans les pillars :
>
> {%- set zone_serial = soa['serial'] %}
>
> /{% set serial = salt['cmd.run']('date +%Y%m%d%H%M%S') %}/
>
>  
>
> Ça marche bien mais la valeur est mise à jour à chaque exécution de
> l’état et ce n’est pas vraiment l’effet voulu 😊
>
Je m'étais dit la même chose récemment mais pour un besoin tellement
simple et si peu critique que j'ai fini par utiliser plutôt unbound en
laissant le Serial constant…
>
> Est-ce que quelqu’un aurait une idée pour ne déclencher cette maj
> uniquement si une valeur de la zone a été modifiée(donc une valeur des
> pillars) ?
>
Je ne vois pas grand chose de très direct, les diffs se font plutôt sur
le résultat, et non sur le pillar en entrée, ou alors j'ai raté quelque
chose de vraiment intérressant ! Voici quelques idées quand même

1) blockreplace + cmd.wait

Je me disais qu'on pourrait sans doute segmenter le fichier en deux et
traiter le problème avec deux file.blockreplace et une directive watch,
mais ni file.blockreplace ni file.managed n'implémentent watch, donc on
ne peut le faire qu'en se rabattant sur cmd.wait ou module.wait.

Pour essayer d'être plus clair :

- encadrer toutes les données sauf le Serial avec des marqueurs qui
seront des commentaires du point de vue de bind et les gérer avec
file.blockreplace.
- pour mettre à jour Serial, utiliser
    + soit un cmd.wait qui lance un sed ou assimilé pour changer juste
le serial
    + soit module.wait (lançant file.replace par exemple),
  dans les deux cas avec un watch sur le blockreplace pour faire que ça
ne s'exécute que si le corps des données a changé

2) un renderer python pour utiliser dans file.managed

Il relirait tout le fichier avant de potentiellement le changer (il
faudrait alors lui donner le chemin) et implémenterait sa propre logique
de diff pour decider de changer ou non le Serial. Variante : travailler
sur un fichier auxiliaire caché qui contiendrait un rendu brut du bout
de pillar concerné (ordonné pour éviter les faux positifs) et s'en
servir pour contrôler a priori.

Je n'aime pas trop, j'aurais envie de dire « autant écrire carrément un
state dédié »

3) … non plus d'idées

Note: il existe un salt.states.zone, mais ça n'a pas de rapport.

En espérant que ça aide,

-- 
Georges Racinet
Anybox SAS, http://anybox.fr
Téléphone: +33 6 51 32 07 27
GPG: B59E 22AB B842 CAED 77F7 7A7F C34F A519 33AB 0A35, sur serveurs publics

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.afpy.org/pipermail/salt-fr/attachments/20171030/d0fbab41/attachment.html>


Plus d'informations sur la liste de diffusion Salt-fr