From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 5A4751FF0AF for ; Fri, 06 Nov 2026 01:57:20 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id AA15321CFF; Fri, 06 Nov 2026 01:51:17 +0100 (CET) From: Thomas Lamprecht To: pve-devel@lists.proxmox.com Subject: [PATCH v3 manager 60/76] pvenode: add iscsi commands Date: Fri, 6 Nov 2026 00:31:35 +0100 Message-ID: <20261105233336.2178064-61-t.lamprecht@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20261105233336.2178064-1-t.lamprecht@proxmox.com> References: <20261105233336.2178064-1-t.lamprecht@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1793926181640 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.306 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: 653CNU7JOWTYGLEIMIXGQY5LW2ICH3ND X-Message-ID-Hash: 653CNU7JOWTYGLEIMIXGQY5LW2ICH3ND X-MailFrom: t.lamprecht@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Dietmar Maurer Expose the iSCSI initiator API on the command line, so target and session state, negotiated parameters, rescan, logout and node record removal are reachable without the web interface or raw pvesh calls. Signed-off-by: Dietmar Maurer [TL: group the commands by object: 'pvenode iscsi target list|remove' and 'pvenode iscsi session params|logout|rescan'; show the target first in the target list] Signed-off-by: Thomas Lamprecht --- PVE/CLI/pvenode.pm | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/PVE/CLI/pvenode.pm b/PVE/CLI/pvenode.pm index 7f7176422..0f382e1f5 100644 --- a/PVE/CLI/pvenode.pm +++ b/PVE/CLI/pvenode.pm @@ -7,6 +7,7 @@ use PVE::API2::ACME; use PVE::API2::ACMEAccount; use PVE::API2::ACMEPlugin; use PVE::API2::Certificates; +use PVE::API2::ISCSI; use PVE::API2::NodeConfig; use PVE::API2::Nodes; use PVE::API2::Tasks; @@ -370,6 +371,53 @@ our $cmddef = { }, ], + iscsi => { + status => [ + 'PVE::API2::ISCSI', + 'status', + [], + { node => $nodename }, + sub { + my ($data, $schema, $options) = @_; + PVE::CLIFormatter::print_api_result($data, $schema, undef, $options); + }, + $PVE::RESTHandler::standard_output_options, + ], + target => { + list => [ + 'PVE::API2::ISCSI', + 'targets', + [], + { node => $nodename }, + sub { + my ($data, $schema, $options) = @_; + my $columns = [qw( + target portal session-id transport health kernel-state used-by-storage + )]; + PVE::CLIFormatter::print_api_result($data, $schema, $columns, $options); + }, + $PVE::RESTHandler::standard_output_options, + ], + remove => ['PVE::API2::ISCSI', 'target_delete', ['target'], { node => $nodename }], + }, + session => { + params => [ + 'PVE::API2::ISCSI', + 'session_params', + ['session-id'], + { node => $nodename }, + sub { + my ($data, $schema, $options) = @_; + PVE::CLIFormatter::print_api_result($data, $schema, undef, $options); + }, + $PVE::RESTHandler::standard_output_options, + ], + logout => + ['PVE::API2::ISCSI', 'session_logout', ['session-id'], { node => $nodename }], + rescan => ['PVE::API2::ISCSI', 'rescan', ['session-id'], { node => $nodename }], + }, + }, + }; 1; -- 2.47.3