J'essaie de modéliser ma configuration Apache httpd pour le déploiement dans différents environnements et je voudrais utiliser l'application Cheetah en langage Python pour le faire. Cependant, j'ai de la difficulté avec le programme de ligne de commande cheetah
et je crois que c'est une combinaison de mon malentendu Cheetah avec un manque de documentation.Python Cheetah - Spécifier les paires nom/valeur pour les modèles
Mon objectif est d'avoir un seul fichier modèle httpd.conf et de substituer des variables d'un fichier de définition spécifique à l'environnement.
httpd.tmpl:
Listen $HTTP_PORT
...
#if $ENABLE_HTTPS == true
<Virtual Host *:$HTTPS_PORT>
...
</VirtualHost>
#end if
production.env:
HTTP_PORT=34120
HTTPS_PORT=34121
ENABLE_HTTPS=true
Quelle est la ligne de commande nécessaire pour remplir ce modèle Cheetah? Je l'ai utilisé:
cheetah f --oext conf --debug httpd
Mais évidemment prod.env
n'est pas lu comme un fichier d'entrée. Ajout d'un #include
au sommet de mon fichier modèle:
#include "prod.env"
Et aucun de mes noms se trouvent:
Cheetah.NameMapper.NotFound: cannot find 'APACHE_PORT'
Ce n'est pas la situation idéale de toute façon, parce que je veux la possibilité de spécifier le nom/Mappage de valeurs sur la ligne de commande pour chaque invocation de guépard.
Merci! Je suis conscient que je peux écrire un script python pour effectuer la lecture du fichier, puis le remplacer en utilisant l'API Cheetah. Cependant, je cherche un moyen d'utiliser la ligne de commande pour remplir mon modèle.
SOLVED
Merci au lien de la documentation fournie par @pyfunc Je comprends maintenant comment accomplir cela. Le problème principal est de fournir --env
sur la ligne de commande guépard qui transmet les variables d'environnement actuelles au guépard. Ces variables d'environnement doivent être exportées en premier.
Merci pour l'affichage. Comment aborderiez-vous la substitution du nom de fichier d'environnement ("prod.env") pour différents environnements? Je veux éviter les valeurs de codage en dur dans les modèles. – purecharger
J'ai modifié ma réponse. Le lien ci-dessus démontre et peut vous aider à le faire. – pyfunc
Merci pour le pointeur! Ainsi, le produit suivant la sortie prévue: 'APACHE_PORT = 10240 ENABLE_HTTPS = true guépard f --env --oext httpd' conf Cependant, la définition de ces variables d'environnement dans une étape séparée ne produit pas la sortie désirée: $ source prod.env $ définir | egrep "(APACHE | HTTPS)" APACHE_PORT = 10800 ENABLE_HTTPS = true guépard $ f --env --oext ... httpd conf Cheetah.NameMapper.NotFound: ne peut pas trouver 'APACHE_PORT' Toutes les idées? EDIT: arrg! les commentaires ne permettent pas le formatage complet, désolé! – purecharger