Mastodon

Blog de Alkahan

utiliser un template dans un module pyinfra

  29/10/2026 [python pyinfra template jinja2] - 200 mots


Lorsque l'on développe une librairie Pyinfra on peut avoir besoin de déployer un template qui est livré avec. Le problème est que si on utilise la méthode classique :

  from pyinfra.operations import files

  files.template(src="templates/mytemplate.j2", dest="/etc/myconfig")
utilisation habituel d'un template

Dans ce cas pyinfra ira chercher le template dans à partir de la racine du projet qui utilise la librairie mais pas celui livré avec la librairie.

On a besoin de construire le chemin complet du template et on le fait avec importlib :

  from importlib import resources
  from importlib.resources.abc import Traversable
  from typing import Final
  from pyinfra.operations import files

  _TEMPLATE: Final[Traversable] = resources.files(
    "ascalium_pyinfra_icinga2" / "templates" / "hosts.conf.j2"
  )
  
  files.template(src=_TEMPLATE, dest="/etc/myconfig")
construire le chemin du template dans la librairie

Référence: pyinfra-node-exporter/src/pyinfra_node_exporter/tasks.py at main · techcode-io/pyinfra-node-exporter · GitHub