From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 0362B70EEA for ; Mon, 17 May 2021 10:04:12 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E9A1B28ABB for ; Mon, 17 May 2021 10:03:41 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id EDC6628A36 for ; Mon, 17 May 2021 10:03:36 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id BB04E4628F for ; Mon, 17 May 2021 10:03:36 +0200 (CEST) From: Lorenz Stechauner To: pve-devel@lists.proxmox.com Date: Mon, 17 May 2021 10:03:14 +0200 Message-Id: <20210517080318.51405-4-l.stechauner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210517080318.51405-1-l.stechauner@proxmox.com> References: <20210517080318.51405-1-l.stechauner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.446 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH v6 manager 3/7] api: nodes: refactor aplinfo to use common download function X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 May 2021 08:04:12 -0000 Signed-off-by: Lorenz Stechauner --- PVE/API2/Nodes.pm | 89 ++++++----------------------------------------- 1 file changed, 10 insertions(+), 79 deletions(-) diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm index a289ef8b..16b10925 100644 --- a/PVE/API2/Nodes.pm +++ b/PVE/API2/Nodes.pm @@ -1513,88 +1513,19 @@ __PACKAGE__->register_method({ my $src = $pd->{location}; my $tmpldir = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage}); my $dest = "$tmpldir/$template"; - my $tmpdest = "$tmpldir/${template}.tmp.$$"; - my $worker = sub { - my $upid = shift; - - print "starting template download from: $src\n"; - 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"; + my $opts = { + hash_required => 1, + sha512sum => $pd->{sha512sum}, + md5sum => $pd->{md5sum}, }; - 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}; + } + + return PVE::Tools::download_file_from_url($dest, $src, $opts); }}); __PACKAGE__->register_method({ -- 2.20.1