Au boulot, j’ai élu une solution de déploiement à haute teneur en convivialité qui m’a été suggérée par nico, j’ai nommé fabric.
Ce soft à l’utilisation simplissime permet en un tournemain de réaliser des opérations complexes en masse sur une architecture distante en utilisant le protocole SSH.
Si la documentation de la plupart des fonctions est clarissime, l’une d’entre elles, qui pourtant me semblait avoir un fort potentiel loutresque, n’était pas très clairement exposée: upload_template.
Cette fonction, comme son nom semble l’indiquer, permet d’envoyer sur un serveur distant un fichier “template” en ayant préalablement remplacé des variables par le contenu souhaité. Après un peu de lecture du code source de fabric, la subtilité de son utilisation m’est apparue.
Voici à quoi doit ressembler un fichier template, j’utilise ici l’exemple classique d’un /etc/network/interfaces à remplir avec les valeurs adéquates :
auto lo iface lo inet loopback auto %(iface)s iface %(iface)s inet static address %(ipaddress)s netmask %(netmask)s gateway %(gateway)s
Ces variables utilisent les string interpolation formatting de python, que l’on renseigne à l’aide d’un dict de cette façon :
netinfo = {
'iface': 'eth0',
'ipaddress': '10.20.30.40',
'netmask': '255.255.255.0',
'gateway': '10.20.30.254'
}
Et que l’on inclut finalement dans la fameuse fonction upload_template de cette façon :
upload_template('etc/network/interfaces', '/etc/network/interfaces', context=netinfo, use_sudo=True)
Moyennant quoi, fabric enverra le fichier template sur sa destination puis remplacera les variables par leur valeurs définies dans le dict passé en paramètre.
Sysop, ne révèle pas à tes employeurs que tu construis aujourd’hui ta glande de demain.
February 13th, 2010 at 9:51 am
Salut !
Pas mal ton truc. Ca ressemble fortement à Puppet dans l’idée. Un petit avis par rapport à celui ci ?
Merci
February 13th, 2010 at 11:53 am
Effectivement, il y a un goût de puppet dans l’idée, mais en réalité les deux outils sont relativement differents.
J’ai également évalué puppet dans ce contexte, mais il ne s’appliquait pas exactement à mon environnement. En effet, j’ai besoin de _déployer_ des architectures qui, si elles sont à première vue similaires, varient dans le nombre de serveurs, leur rôles, leur filesystem, et surtout les besoins des clients hébergés. Ainsi, avec puppet, j’aurais eu autant de templates que de clients.
J’insiste sur le fait qu’il s’agit d’un environnement d’_hébergement_, ce ne sont pas des machines forcemment similaires, et chacune est soumise à des opérations très particulières.
February 14th, 2010 at 3:30 pm
Dans l’idée je le rajouterai bien dans fabulator !
February 16th, 2010 at 12:45 am
Petite correction :
Sysop, ne révèle pas à tes employeurs que tu construis^Wfabric aujourd’hui ta glande de demain.