Comment puis-je créer une URL à partir du contenu d'un fichier sur Puppet ?
Question
J'ai un script de sauvegarde qui stocke le dernier horodatage de sauvegarde dans une URL comme celle-ci http://myaws.com/LATEST, le fichier contient uniquement une chaîne représentant l'horodatage, par exemple "201402230400".Le même script stocke les vraies sauvegardes dans http://myaws.com/201402230400/mycompany-dump-201402230400.gz et http://myaws.com/201402230400/mycompany-data-201402230400.tgz.
Le fait est que je crée une classe de marionnettes qui lira ces URL et restaurera les fichiers dans ma nouvelle VM en fonction de la DERNIÈRE valeur d'horodatage.Ce qui me manque, c'est comment puis-je créer une URL à partir d'un magasin de contenu dans un fichier ?
define download ($uri, $timeout = 300) {
exec {
"download $uri":
path => '/usr/bin',
command => "wget --timestamping -q '$uri' -O $name",
creates => $name,
timeout => $timeout
}
}
download {
"$latest_file":
uri => "http://myaws.com/LATEST",
timeout => 900;
}
download {
"$data_file":
uri => "http://myaws.com/file($latest_file)/mycompany-data-file($latest_file).tgz",
timeout => 900;
}
L'appel fichier ($ dernier_fichier) ne fonctionne pas comme prévu.Qu'est-ce que je fais de mal ?
La solution
Je pense que tu voudras utiliser generate
pour obtenir le DERNIER horodatage plutôt que exec
à l'intérieur d'un type personnalisé.Quelque chose comme ça peut-être (notez que vous devez changer le format du uri
pour le téléchargement également) :
$latest_file = generate(
'/usr/bin/curl',
'-s',
'http://myaws.com/LATEST'
)
define download ($uri, $timeout = 300) {
exec {
"download $uri":
path => '/usr/bin',
command => "wget --timestamping -q '$uri' -O $name",
creates => $name,
timeout => $timeout
}
}
download {
"$data_file":
uri => "http://myaws.com/${latest_file}/mycompany-data-${latest_file}.tgz",
timeout => 900;
}