mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-29 15:33:21 +00:00
api: nodes: refactor aplinfo to use common download function
a common function to download arbitrary files from urls has been defined as PVE::Tools::download_file_from_url and is now used. Signed-off-by: Lorenz Stechauner <l.stechauner@proxmox.com>
This commit is contained in:
parent
337f7f9eeb
commit
fac5d57e5b
@ -1481,88 +1481,29 @@ __PACKAGE__->register_method({
|
|||||||
my $src = $pd->{location};
|
my $src = $pd->{location};
|
||||||
my $tmpldir = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage});
|
my $tmpldir = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage});
|
||||||
my $dest = "$tmpldir/$template";
|
my $dest = "$tmpldir/$template";
|
||||||
my $tmpdest = "$tmpldir/${template}.tmp.$$";
|
|
||||||
|
|
||||||
my $worker = sub {
|
my $opts = {
|
||||||
my $upid = shift;
|
hash_required => 1,
|
||||||
|
sha512sum => $pd->{sha512sum},
|
||||||
print "starting template download from: $src\n";
|
md5sum => $pd->{md5sum},
|
||||||
print "target file: $dest\n";
|
|
||||||
|
|
||||||
my $check_hash = sub {
|
|
||||||
my ($template_info, $filename, $noerr) = @_;
|
|
||||||
|
|
||||||
my $digest;
|
|
||||||
my $expected;
|
|
||||||
|
|
||||||
eval {
|
|
||||||
open(my $fh, '<', $filename) or die "Can't open '$filename': $!";
|
|
||||||
binmode($fh);
|
|
||||||
if (defined($template_info->{sha512sum})) {
|
|
||||||
$expected = $template_info->{sha512sum};
|
|
||||||
$digest = Digest::SHA->new(512)->addfile($fh)->hexdigest;
|
|
||||||
} elsif (defined($template_info->{md5sum})) {
|
|
||||||
#fallback to MD5
|
|
||||||
$expected = $template_info->{md5sum};
|
|
||||||
$digest = Digest::MD5->new->addfile($fh)->hexdigest;
|
|
||||||
} else {
|
|
||||||
die "no expected checksum defined";
|
|
||||||
}
|
|
||||||
close($fh);
|
|
||||||
};
|
|
||||||
|
|
||||||
die "checking hash failed - $@\n" if $@ && !$noerr;
|
|
||||||
|
|
||||||
return ($digest, $digest ? lc($digest) eq lc($expected) : 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
eval {
|
|
||||||
if (-f $dest) {
|
|
||||||
my ($hash, $correct) = &$check_hash($pd, $dest, 1);
|
|
||||||
|
|
||||||
if ($hash && $correct) {
|
|
||||||
print "file already exists $hash - no need to download\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
local %ENV;
|
|
||||||
my $dccfg = PVE::Cluster::cfs_read_file('datacenter.cfg');
|
|
||||||
if ($dccfg->{http_proxy}) {
|
|
||||||
$ENV{http_proxy} = $dccfg->{http_proxy};
|
|
||||||
}
|
|
||||||
|
|
||||||
my @cmd = ('/usr/bin/wget', '--progress=dot:mega', '-O', $tmpdest, $src);
|
|
||||||
if (system (@cmd) != 0) {
|
|
||||||
die "download failed - $!\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my ($hash, $correct) = &$check_hash($pd, $tmpdest);
|
|
||||||
|
|
||||||
die "could not calculate checksum\n" if !$hash;
|
|
||||||
|
|
||||||
if (!$correct) {
|
|
||||||
my $expected = $pd->{sha512sum} // $pd->{md5sum};
|
|
||||||
die "wrong checksum: $hash != $expected\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rename($tmpdest, $dest)) {
|
|
||||||
die "unable to save file - $!\n";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
my $err = $@;
|
|
||||||
|
|
||||||
unlink $tmpdest;
|
|
||||||
|
|
||||||
if ($err) {
|
|
||||||
print "\n";
|
|
||||||
die $err if $err;
|
|
||||||
}
|
|
||||||
|
|
||||||
print "download finished\n";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return $rpcenv->fork_worker('download', undef, $user, $worker);
|
my $dccfg = PVE::Cluster::cfs_read_file('datacenter.cfg');
|
||||||
|
if ($dccfg->{http_proxy}) {
|
||||||
|
$opts->{http_proxy} = $dccfg->{http_proxy};
|
||||||
|
}
|
||||||
|
|
||||||
|
my $worker = sub {
|
||||||
|
my $upid = shift;
|
||||||
|
PVE::Tools::download_file_from_url($dest, $src, $opts);
|
||||||
|
};
|
||||||
|
|
||||||
|
my $rpcenv = PVE::RPCEnvironment::get();
|
||||||
|
my $user = $rpcenv->get_user();
|
||||||
|
|
||||||
|
my $upid = $rpcenv->fork_worker('download', $template, $user, $worker);
|
||||||
|
|
||||||
|
return $upid;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
__PACKAGE__->register_method({
|
__PACKAGE__->register_method({
|
||||||
|
Loading…
Reference in New Issue
Block a user