Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2298 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Template de fichier de conf

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Template de fichier de conf

n°1953900
milootoolo​o
Posté le 30-12-2009 à 11:22:51  profilanswer
 

Bonjour,
 
Je cherche un moyen de créer des templates pour mes fichiers de conf que je dois déployer sur plusieurs machines.
Un exemple sera plus parlant:
 
j'ai des variables (dans un script bash):
 
ip_toto=172.89.45.32
ip_titi=172.34.23.45
 
J'ai un fichier de conf template:
 
IP=<ip_toto>
IP2=<ip_titi>
 
Je voudrais obtenir le fichier de conf valorisé:
 
 
IP=172.89.45.32
IP2=172.34.23.45
 
 
Ya t'il un moyen simple qui n'a pas besoin de lister toutes les variables qu'on veut remplacer?
Merci de votre aide
 

mood
Publicité
Posté le 30-12-2009 à 11:22:51  profilanswer
 

n°1953905
pataluc
Posté le 30-12-2009 à 11:47:55  profilanswer
 

je suis pas sûr d'avoir compris ta dernière phrase...  
 
pour valoriser un template, tu peux passer par sed par exemple, assez facilement

Code :
  1. sed "s/<ip_toto>/172.89.45.32/" fichier.template > fichier.conf

n°1953911
milootoolo​o
Posté le 30-12-2009 à 12:00:50  profilanswer
 

Oui j'ai pensé a ca et c'est sans doute ce que je vais faire.
Le seul truc c'est que je dois écrire un sed pour chaque variable différente:
 
sed "s/<ip_toto>/${ip_toto}/" fichier.template > fichier.conf
sed "s/<ip_titi>/${ip_titi}/" fichier.conf > fichier.conf
...
 
J'aurais aimé trouver une facon de faire ca plus élégante.

n°1953933
pataluc
Posté le 30-12-2009 à 12:26:48  profilanswer
 

ah ok je crois que je viens de comprendre. il faut parser le script bash qui contient les variables pour remplir un template?
 
si c'est ca ca doit se faire, avec un sed un poil plus chiadé et une chtite boucle.
 
tu peux mettre du contenu un peu plus précis? genre le script bash et le template en entier? (ou du moins des extraits plus conséquents?)

n°1953935
milootoolo​o
Posté le 30-12-2009 à 12:30:53  profilanswer
 

Pas de problème:
 
Un template:


DEVICE=bond0
BOOTPROTO=dhcp
ONBOOT=yes
NETWORK=<ip_network1>
GATEWAY=<ip_gateway1>
BROADCAST=<ip_broadcast1>
NETMASK=<ip_netmask1>
IPADDR=<master_ip_bond0>
USERCTL=no
BONDING_OPTS="mode=0 miimon=100"


 
 
Mon fichier de variables:


ip_network1 = '10.156.224.0'
ip_gateway1 = '10.156.227.254'
ip_vip1 =''
ip_broadcast1 = '10.156.227.255'
ip_netmask1 = '255.255.252.0'
 
ip_network2 = ''
ip_gateway2 = ''
ip_vip2 = ''
ip_broadcast2 = ''
ip_netmask2 = ''
 
master_hostname = ''
master_ip_bond0 = '10.156.224.220'
master_ip_bond1 = ''
master_ip_admin = ''
master_eth_bond0 = ''
master_eth_bond1 =  ''
master_eth_admin = ''
 
slave_hostname = ''
slave_ip_bond0 = ''
slave_ip_bond1 = ''
slave_ip_admin = ''
slave_eth_bond0 = ''
slave_eth_bond1 = ''
slave_eth_admin = ''
 
email_admin = ''
smtp_server = ''


 
 
Si je veux ecrire un truc avec la solution que tu propose, ca ferais un truc du genre:
 

return sed "s/\$ip_network1/$ip_network1/" $1 | \
 sed "s/<ip_gateway1>/$ip_gateway1/" | \
 sed "s/<ip_vip1>/$ip_vip1/" | \
 sed "s/<ip_broadcast1>/$ip_broadcast1/" | \
 sed "s/<ip_netmask1>/$ip_netmask1/" | \
 sed "s/<ip_network2>/$ip_network2/" | \
 sed "s/<ip_gateway2>/$ip_gateway2/" | \
 sed "s/<ip_vip2>/$ip_vip2/" | \
 sed "s/<ip_broadcast2>/$ip_broadcast2/" | \
 sed "s/<ip_netmask2>/$ip_netmask2/" | \
 sed "s/<master_hostname>/$master_hostname/" | \
 sed "s/<master_ip_bond0>/$master_ip_bond0/" | \
 sed "s/<master_ip_admin>/$master_ip_admin/" | \
 sed "s/<slave_hostname>/$slave_hostname/" | \
 sed "s/<slave_ip_bond0>/$slave_ip_bond0/" | \
 sed "s/<slave_ip_bond1>/$slave_ip_bond1/" | \
 sed "s/<slave_ip_admin>/$slave_ip_admin/" | \
 sed "s/<email_admin>/$email_admin/" | \
 sed "s/<smtp_server>/$smtp_server/"


 
Je trouve ca bof..


Message édité par milootooloo le 30-12-2009 à 12:35:56
n°1953954
pataluc
Posté le 30-12-2009 à 13:32:56  profilanswer
 

nan c clair on peut faire mieux. déja tu pourrais éventuellement faire un fichier truc.sed contenant

Code :
  1. s/<ip_network1>/$ip_network1/
  2. s/<ip_gateway1>/$ip_gateway1/
  3. s/<ip_vip1>/$ip_vip1/
  4. s/<ip_broadcast1>/$ip_broadcast1/
  5. s/<ip_netmask1>/$ip_netmask1/
  6. s/<ip_network2>/$ip_network2/
  7. s/<ip_gateway2>/$ip_gateway2/
  8. s/<ip_vip2>/$ip_vip2/
  9. s/<ip_broadcast2>/$ip_broadcast2/
  10. s/<ip_netmask2>/$ip_netmask2/
  11. s/<master_hostname>/$master_hostname/
  12. s/<master_ip_bond0>/$master_ip_bond0/
  13. s/<master_ip_admin>/$master_ip_admin/
  14. s/<slave_hostname>/$slave_hostname/
  15. s/<slave_ip_bond0>/$slave_ip_bond0/
  16. s/<slave_ip_bond1>/$slave_ip_bond1/
  17. s/<slave_ip_admin>/$slave_ip_admin/
  18. s/<email_admin>/$email_admin/
  19. s/<smtp_server>/$smtp_server/


et l'appeler avec

Code :
  1. sed -f truc.sed template

mais on doit pouvoir faire encore plus général... je regarde si j'arrive à trouver un truc sympa.


Message édité par pataluc le 30-12-2009 à 13:33:37
n°1953966
pataluc
Posté le 30-12-2009 à 14:06:11  profilanswer
 

sinon tu peux faire ca:

 

tu enlève les espaces autour des "=" dans ton fichiers de variables:

Code :
  1. ip_network1='10.156.224.0'
  2. ip_gateway1='10.156.227.254'
  3. ip_vip1=''
  4. ip_broadcast1='10.156.227.255'
  5. ip_netmask1='255.255.252.0'
  6. ip_network2=''
  7. ip_gateway2=''
  8. ip_vip2=''
  9. ip_broadcast2=''
  10. ip_netmask2=''
  11. master_hostname=''
  12. master_ip_bond0='10.156.224.220'
  13. master_ip_bond1=''
  14. master_ip_admin=''
  15. master_eth_bond0=''
  16. master_eth_bond1= ''
  17. master_eth_admin=''
  18. slave_hostname=''
  19. slave_ip_bond0=''
  20. slave_ip_bond1=''
  21. slave_ip_admin=''
  22. slave_eth_bond0=''
  23. slave_eth_bond1=''
  24. slave_eth_admin=''
  25. email_admin=''
  26. smtp_server=''


comme ca tu peux le lancer pour créer tes variables d'environnement avec

Code :
  1. . ./vars

et ensuite tu crée un tpl.sh qui contient

Code :
  1. echo "DEVICE=bond0
  2. BOOTPROTO=dhcp
  3. ONBOOT=yes
  4. NETWORK=$ip_network1
  5. GATEWAY=$ip_gateway1
  6. BROADCAST=$ip_broadcast1
  7. NETMASK=$ip_netmask1
  8. IPADDR=$master_ip_bond0
  9. USERCTL=no
  10. BONDING_OPTS=\"mode=0 miimon=100\""

et tu le joue avec

Code :
  1. . ./tpl.sh > fichier.conf

ca me parait pas encore ultime mais c'est mieux que rien.


Message édité par pataluc le 30-12-2009 à 14:09:23
n°1953992
pataluc
Posté le 30-12-2009 à 14:56:15  profilanswer
 

sinon ya les système de templates tout fais, genre ca: http://template-toolkit.org/ ca a l'air plutôt sympa.

n°1953998
KangOl
Profil : pointeur
Posté le 30-12-2009 à 15:10:47  profilanswer
 

use python :o


---------------
Nos estans firs di nosse pitite patreye...
n°1954019
milootoolo​o
Posté le 30-12-2009 à 16:21:00  profilanswer
 

Haha merci de ton aide pataluc c'est très sympa de voir comme les gens sont patients et se prennent la tête.

 

Je crois que je vais rester à la première idée que j'ai déja réalisée.

 

Sinon j'avais bien pensé à ca pour mes templates (les mettre dans des echo) mais certains fichiers ont des syntaxes étranges et je veux pas les echapper, yen a beaucoup et c'est pas beau :p.

 

Ensuite je peux rien installer sur les machines (C'est pour du déploiement sur une version propre de redhat, donc pas de paquets en plus simplement pour déployer) donc c'est mort pour template toolkit ..

 

Mais merci de ton aide, je me suis au moins appercu que c'était pas si facile :p

 

Sinon python oui, il est dispo sur les machines mais en fait non, je vais me faire engueuler (Allez savoir pourquoi), en php c'est fastoche alors en python...

 

Donc.. toujours ouvert, mais ya plus d'urgence ^^

 

Encore merci

Message cité 1 fois
Message édité par milootooloo le 30-12-2009 à 16:25:16
mood
Publicité
Posté le 30-12-2009 à 16:21:00  profilanswer
 

n°1954020
KangOl
Profil : pointeur
Posté le 30-12-2009 à 16:25:02  profilanswer
 

milootooloo a écrit :


Sinon python oui, il est dispo sur les machines mais en fait non, je vais me faire engueuler (Allez savoir pourquoi).
 


 [:corten]  
 
change de boulot :o


---------------
Nos estans firs di nosse pitite patreye...
n°1954066
milootoolo​o
Posté le 30-12-2009 à 19:24:35  profilanswer
 

Tss tss, jpeux en faire à la maison .. :p


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Template de fichier de conf

 

Sujets relatifs
Insertion/Extraction de données formatées d'un fichier texteProbleme de recuperation dans un fichier texte
fichier .BATAccès lecture fichier depuis webservice ASP.NET
PB ajout espaces fichier csvComment modifier la langue d'un site flash grace à un fichier xml ?
[PHP] Creer un fichier avec un encodage Windows [Résolu]Lire un fichier xml .. encore un..
Probleme(s) sur les TemplateProblème de génération de fichier excel sous easyPHP 1.8
Plus de sujets relatifs à : Template de fichier de conf


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR