writes.values : double rendu Handlebars (vynil + kuberest) — les expressions avec ${...} ou backticks échouent au parsing du second pass
#2
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
En utilisant kuberest dans une box vynil, le champ
writes[].valuespasse par deux rendus Handlebars distincts :.hbs→ stocke le résultat dans le spec du RestEndPoint dans Kubernetesvaluesavec son propre moteur Handlebars, permettant d'y utiliser des expressions comme{{ base64_decode input.xxx }}Ce comportement est documenté implicitement par l'usage de
{{{{raw}}}}...{{{{/raw}}}}dans vynil pour passer des expressions Handlebars au second pass.Problème
Lors du second pass (kuberest), le parser Handlebars tente de parser tout le contenu du bloc
{{raw}}...{{/raw}}, y compris le contenu à l'intérieur. Pour HashiCorp Vault, les policies utilisent des templates vault qui contiennent des expressions avec${}et des backticks :Même protégée par
{{{{raw}}}}...{{{{/raw}}}}dans le template vynil, cette expression produit après le premier pass :Ce contenu (dans un bloc
{{raw}}...{{/raw}}) est alors soumis au parser Handlebars de kuberest qui échoue avec :Le parser Handlebars essaie d'interpréter
${ accessor \kubernetes/` }comme de la syntaxe Handlebars et échoue, même à l'intérieur d'un bloc{{raw}}`.Comportement observé
Après premier pass (vynil) → stocké dans le RestEndPoint :
Au second pass (kuberest) →
TemplateFailedavecInvalidSyntax.Contournement actuel
Utiliser le script
post(Rhai) qui n'est rendu que par vynil (pas de second pass kuberest) :Ici
{{ identity... }}est du texte Rhai littéral (pas traité par Handlebars) → vault reçoit la policy avec le template correct.Questions / demandes
writes.valuespasse par deux rendus Handlebars ?{{raw}}de kuberest devrait-il vraiment parser son contenu (causant l'erreur) ou le passer entièrement en raw ?valuesqui ne passe pas par le second rendu Handlebars (raw pur), pour les cas où le contenu doit être transmis verbatim à l'API cible ?Versions testées :
{{ identity.entity... }}sont la syntaxe native de Vault pour les policies HCL)