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")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")