From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 99AF81FF164 for ; Fri, 28 Feb 2025 15:01:52 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CC6C2F375; Fri, 28 Feb 2025 15:01:40 +0100 (CET) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Date: Fri, 28 Feb 2025 15:01:35 +0100 Message-Id: <20250228140136.124286-5-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250228140136.124286-1-s.hanreich@proxmox.com> References: <20250228140136.124286-1-s.hanreich@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.238 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pve-devel] [PATCH pve-network 4/5] api: vnets: update schema of endpoints 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: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" The possible properties returned by the vnet endpoints were only partly documented. Add all missing properties and improve descriptions for existing properties. Extract all duplicate properties into a separate variable, so we don't have to rewrite the whole API definition for every endpoint. Signed-off-by: Stefan Hanreich --- src/PVE/API2/Network/SDN/Vnets.pm | 88 ++++++++++++++++++++++++++++++- src/PVE/Network/SDN/VnetPlugin.pm | 37 +++++++------ 2 files changed, 108 insertions(+), 17 deletions(-) diff --git a/src/PVE/API2/Network/SDN/Vnets.pm b/src/PVE/API2/Network/SDN/Vnets.pm index bd37dd3..a579c36 100644 --- a/src/PVE/API2/Network/SDN/Vnets.pm +++ b/src/PVE/API2/Network/SDN/Vnets.pm @@ -73,6 +73,38 @@ my $check_vnet_access = sub { $rpcenv->check_any($authuser, "/sdn/zones/$zoneid/$vnet", $privs); }; +my $VNET_PROPERTIES = { + alias => { + type => 'string', + description => "Alias name of the VNet.", + pattern => qr/[\(\)-_.\w\d\s]{0,256}/i, + maxLength => 256, + optional => 1, + }, + 'isolate-ports' => { + type => 'boolean', + description => "If true, sets the isolated property for all interfaces on the bridge of this VNet.", + optional => 1, + }, + tag => { + type => 'integer', + description => 'VLAN Tag (for VLAN or QinQ zones) or VXLAN VNI (for VXLAN or EVPN zones).', + optional => 1, + minimum => 1, + maximum => 16777215, + }, + vlanaware => { + type => 'boolean', + description => 'Allow VLANs to pass through this VNet.', + optional => 1, + }, + zone => { + type => 'string', + description => 'Name of the zone this VNet belongs to.', + optional => 1, + }, +}; + __PACKAGE__->register_method ({ name => 'index', path => '', @@ -102,7 +134,32 @@ __PACKAGE__->register_method ({ type => 'array', items => { type => "object", - properties => {}, + properties => { + digest => { + type => 'string', + optional => 1, + description => 'Digest of the VNet section.', + }, + state => get_standard_option('pve-sdn-config-state'), + type => { + type => 'string', + enum => ['vnet'], + optional => 0, + description => 'Type of the VNet.', + }, + vnet => { + type => 'string', + optional => 0, + description => 'Name of the VNet.', + }, + pending => { + type => 'object', + description => 'Changes that have not yet been applied to the running configuration.', + optional => 1, + properties => $VNET_PROPERTIES + }, + %$VNET_PROPERTIES, + }, }, links => [ { rel => 'child', href => "{vnet}" } ], }, @@ -165,7 +222,34 @@ __PACKAGE__->register_method ({ }, }, }, - returns => { type => 'object' }, + returns => { + properties => { + digest => { + type => 'string', + optional => 1, + description => 'Digest of the VNet section.', + }, + state => get_standard_option('pve-sdn-config-state'), + type => { + type => 'string', + enum => ['vnet'], + optional => 0, + description => 'Type of the VNet.', + }, + vnet => { + type => 'string', + optional => 0, + description => 'Name of the VNet.', + }, + pending => { + type => 'object', + description => 'Changes that have not yet been applied to the running configuration.', + optional => 1, + properties => $VNET_PROPERTIES, + }, + %$VNET_PROPERTIES, + }, + }, code => sub { my ($param) = @_; diff --git a/src/PVE/Network/SDN/VnetPlugin.pm b/src/PVE/Network/SDN/VnetPlugin.pm index f44380a..1fca9c1 100644 --- a/src/PVE/Network/SDN/VnetPlugin.pm +++ b/src/PVE/Network/SDN/VnetPlugin.pm @@ -50,31 +50,38 @@ sub private { sub properties { return { zone => { - type => 'string', - description => "zone id", + type => 'string', + description => 'Name of the zone this VNet belongs to.', }, type => { - description => "Type", - optional => 1, - }, + type => 'string', + enum => ['vnet'], + description => 'Type of the VNet.', + optional => 1, + }, tag => { - type => 'integer', - description => "vlan or vxlan id", + type => 'integer', + description => 'VLAN Tag (for VLAN or QinQ zones) or VXLAN VNI (for VXLAN or EVPN zones).', + optional => 1, + minimum => 1, + maximum => 16777215, }, vlanaware => { type => 'boolean', - description => 'Allow vm VLANs to pass through this vnet.', + description => 'Allow VLANs to pass through this vnet.', + optional => 1, }, - alias => { - type => 'string', - description => "alias name of the vnet", - pattern => qr/[\(\)-_.\w\d\s]{0,256}/i, - maxLength => 256, + alias => { + type => 'string', + description => "Alias name of the VNet.", + pattern => qr/[\(\)-_.\w\d\s]{0,256}/i, + maxLength => 256, optional => 1, - }, + }, 'isolate-ports' => { type => 'boolean', - description => "If true, sets the isolated property for all members of this VNet", + description => "If true, sets the isolated property for all interfaces on the bridge of this VNet.", + optional => 1, } }; } -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel