au-to-ma-gic

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.