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 80EC972491 for ; Tue, 15 Jun 2021 16:09:11 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 681152F2D7 for ; Tue, 15 Jun 2021 16:09:11 +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 4FC552F2A5 for ; Tue, 15 Jun 2021 16:09:09 +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 2396644049 for ; Tue, 15 Jun 2021 16:09:09 +0200 (CEST) From: Lorenz Stechauner To: pve-devel@lists.proxmox.com Date: Tue, 15 Jun 2021 16:08:38 +0200 Message-Id: <20210615140841.117933-6-l.stechauner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210615140841.117933-1-l.stechauner@proxmox.com> References: <20210615140841.117933-1-l.stechauner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.937 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [nodes.pm] Subject: [pve-devel] [PATCH v8 manager 2/5] 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: Tue, 15 Jun 2021 14:09:11 -0000 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 --- PVE/API2/Nodes.pm | 93 +++++++++-------------------------------------- 1 file changed, 17 insertions(+), 76 deletions(-) diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm index 77fa710a..740547e7 100644 --- a/PVE/API2/Nodes.pm +++ b/PVE/API2/Nodes.pm @@ -1513,88 +1513,29 @@ __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"; - } + my $opts = { + hash_required => 1, + sha512sum => $pd->{sha512sum}, + md5sum => $pd->{md5sum}, + }; - if (!rename($tmpdest, $dest)) { - die "unable to save file - $!\n"; - } - }; - my $err = $@; + my $dccfg = PVE::Cluster::cfs_read_file('datacenter.cfg'); + if ($dccfg->{http_proxy}) { + $opts->{http_proxy} = $dccfg->{http_proxy}; + } - unlink $tmpdest; + my $worker = sub { + my $upid = shift; + PVE::Tools::download_file_from_url($dest, $src, $opts); + }; - if ($err) { - print "\n"; - die $err if $err; - } + my $rpcenv = PVE::RPCEnvironment::get(); + my $user = $rpcenv->get_user(); - print "download finished\n"; - }; + my $upid = $rpcenv->fork_worker('download', $template, $user, $worker); - return $rpcenv->fork_worker('download', undef, $user, $worker); + return $upid; }}); __PACKAGE__->register_method({ -- 2.20.1