Template de fichier de conf

Template de fichier de conf - Shell/Batch - Programmation

Marsh Posté le 30-12-2009 à 11:22:51    

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
 

Reply

Marsh Posté le 30-12-2009 à 11:22:51   

Reply

Marsh Posté le 30-12-2009 à 11:47:55    

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

Reply

Marsh Posté le 30-12-2009 à 12:00:50    

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.

Reply

Marsh Posté le 30-12-2009 à 12:26:48    

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

Reply

Marsh Posté le 30-12-2009 à 12:30:53    

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
Reply

Marsh Posté le 30-12-2009 à 13:32:56    

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
Reply

Marsh Posté le 30-12-2009 à 14:06:11    

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
Reply

Marsh Posté le 30-12-2009 à 14:56:15    

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

Reply

Marsh Posté le 30-12-2009 à 15:10:47    

use python :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 30-12-2009 à 16:21:00    

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
Reply

Marsh Posté le 30-12-2009 à 16:21:00   

Reply

Marsh Posté le 30-12-2009 à 16:25:02    

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...
Reply

Marsh Posté le 30-12-2009 à 19:24:35    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed