[pve-devel] [PATCH pve-manager v2 3/4] network-interface-pinning: add target-name parameter
Stefan Hanreich
s.hanreich at proxmox.com
Thu Jul 24 11:34:58 CEST 2025
If a specific interface is specified via the interface parameter,
users can now additionally specify a target-name. This makes it easier
for users to assign specific names to specific interfaces, according
to their preferences.
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
PVE/CLI/proxmox_network_interface_pinning.pm | 38 ++++++++++++++++----
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/PVE/CLI/proxmox_network_interface_pinning.pm b/PVE/CLI/proxmox_network_interface_pinning.pm
index 9025cd835..357a78544 100644
--- a/PVE/CLI/proxmox_network_interface_pinning.pm
+++ b/PVE/CLI/proxmox_network_interface_pinning.pm
@@ -249,6 +249,11 @@ package PVE::CLI::proxmox_network_interface_pinning::InterfaceMapping {
use PVE::CLI::proxmox_network_interface_pinning;
use PVE::Tools;
+ sub new {
+ my ($class, $mapping) = @_;
+ bless $mapping, $class;
+ }
+
sub generate {
my ($class, $ip_links, $pinned, $prefix) = @_;
@@ -362,6 +367,12 @@ __PACKAGE__->register_method({
default => '<all>', # just for the docs.
optional => 1,
},
+ 'target-name' => {
+ description => 'Pin the interface to a specific name',
+ type => 'string',
+ pattern => 'nic\d+',
+ optional => 1,
+ },
},
},
returns => {
@@ -371,6 +382,10 @@ __PACKAGE__->register_method({
my ($params) = @_;
my $iface = $params->{interface}; # undef means all.
+ my $target_name = $params->{'target-name'};
+
+ die "target-name can only be set, if interface is set as well!\n"
+ if $params->{'target-name'} && !$params->{interface};
if (-t STDOUT) {
my $target = defined($iface) ? "the interface '$iface'" : 'all interfaces';
@@ -402,12 +417,23 @@ __PACKAGE__->register_method({
}
}
- my $mapping =
- PVE::CLI::proxmox_network_interface_pinning::InterfaceMapping->generate(
- $ip_links,
- $pinned,
- $prefix,
- );
+ my $mapping;
+
+ if ($target_name) {
+ die "target-name already exists as link or pin!\n"
+ if $ip_links->{$target_name} || grep { $target_name eq $_ } values $pinned->%*;
+
+ $mapping = PVE::CLI::proxmox_network_interface_pinning::InterfaceMapping->new({
+ $iface => $target_name,
+ });
+ } else {
+ $mapping =
+ PVE::CLI::proxmox_network_interface_pinning::InterfaceMapping->generate(
+ $ip_links,
+ $pinned,
+ $prefix,
+ );
+ }
if (!$mapping->%*) {
print "Nothing to do, aborting.\n";
--
2.39.5
More information about the pve-devel
mailing list