From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id 881771FF15E
	for <inbox@lore.proxmox.com>; Tue, 25 Feb 2025 13:16:39 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 9F9171BF5F;
	Tue, 25 Feb 2025 13:16:32 +0100 (CET)
To: pve-devel@lists.proxmox.com
Date: Mon, 24 Feb 2025 17:58:25 +0100
In-Reply-To: <20250224165825.82940-1-jonah.zuercher@adfinis.com>
References: <20250224165825.82940-1-jonah.zuercher@adfinis.com>
X-Mailman-Approved-At: Tue, 25 Feb 2025 13:16:30 +0100
MIME-Version: 1.0
Message-ID: <mailman.525.1740485791.293.pve-devel@lists.proxmox.com>
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Post: <mailto:pve-devel@lists.proxmox.com>
From: jonahz via pve-devel <pve-devel@lists.proxmox.com>
Precedence: list
Cc: jonahz <jonah.zuercher@adfinis.com>
X-Mailman-Version: 2.1.29
X-BeenThere: pve-devel@lists.proxmox.com
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
Subject: [pve-devel] [PATCH container 1/1] fix #5496: sdn: fix netbox
 integration
Content-Type: multipart/mixed; boundary="===============5913751118052367451=="
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

--===============5913751118052367451==
Content-Type: message/rfc822
Content-Disposition: inline

Return-Path: <jonah.zuercher@adfinis.com>
X-Original-To: pve-devel@lists.proxmox.com
Delivered-To: pve-devel@lists.proxmox.com
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) server-digest SHA256)
	(No client certificate requested)
	by lists.proxmox.com (Postfix) with ESMTPS id AFE33D0596
	for <pve-devel@lists.proxmox.com>; Mon, 24 Feb 2025 17:59:23 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 9B0C8CC3C
	for <pve-devel@lists.proxmox.com>; Mon, 24 Feb 2025 17:58:53 +0100 (CET)
Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b])
	(using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
	(No client certificate requested)
	by firstgate.proxmox.com (Proxmox) with ESMTPS
	for <pve-devel@lists.proxmox.com>; Mon, 24 Feb 2025 17:58:53 +0100 (CET)
Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-5e0b70fb1daso5641045a12.1
        for <pve-devel@lists.proxmox.com>; Mon, 24 Feb 2025 08:58:53 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=adfinis.com; s=google; t=1740416326; x=1741021126; darn=lists.proxmox.com;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to;
        bh=wPJCK1udtG4sHNItKdra/qO+Utvo7sfeCWITnzfE+sU=;
        b=XCxwqoM8G6mliKY1jO1pR/fDqCra0PJVjEOlgpmDvL00ut9ZP/3CPAiKD69hhbMndH
         7mia1JMzYrz8PsLgxRoxKwQ0/UFTCjDRiFSm0E+QZSbxnVZqF9ledcP+tk3Z5r4WWQ+B
         KT0dunZShnlZruxpngcRufmPn/ueuy/rL2MBNNedDJSM4wP27MODuWmXlz76PjgG3Mnr
         CLL7X9c4vzQ0n2arY2ctlUPgxZEVwdV/CZtVNBDxa1W/cGguq0jmC9xbBZKsjePnS0Hj
         jLKQ8gCsoRPZv28y8iKKT829na2qUnsJkgrTXc9LWz9/tvFI/LFOi9qHvs5l2Z+P1yuF
         37Kg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1740416326; x=1741021126;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
         :subject:date:message-id:reply-to;
        bh=wPJCK1udtG4sHNItKdra/qO+Utvo7sfeCWITnzfE+sU=;
        b=BU/V7nRlhD01npYc4bR9xyhB3UWBVcKiKJpevpAkk6Bl71N3abWd/DRXFcHb36tjWZ
         zWxfq6iEYygzB8uIm7jMET399JiIJou2MJe+Z0hp4i3Nkcm1FlKDj/QjhAz3FOqu6Zp0
         w5OcK028CPPYgrYCg33g/AUuwkMWg9UZwrA7kYWTLuzhAUCXguC+njv9YI0a2xDoQGIW
         xHXabgOQYj2ZWrumpIFdV9LOcBwmISXOkqB403BWw57xnd4BtvT/pmVeOiLpkXsupAYX
         OftgrcP6Mw6REd8vg8IwQOFyYypNEfNQXzql4Xpd1vHZkcbyQuY1K1PRlKPafjQWNxeU
         s+6Q==
X-Gm-Message-State: AOJu0Yyz1I4JC1EPt79qd+iVu9B1xJtQci+SNmnMKPLF8MVeNznrzEAE
	h7RMomNYLS4/Vvexuq5VqX/39mrj4isEaT1XNJ0hOI9uO3mFgZpxhA1KfLJDNANhtPIn3yJG5Yf
	f
X-Gm-Gg: ASbGncse7PBX1YhEyK5XHYXAeSHE0MuA9cRn+LwrSC7n6IAg4f4JNs3NXumA4i9I41U
	whFgrKkMPQsopgyVUYp+Ky9RawbgtaXfmWX99kX9UjErZqv9B/RBoBCeO7BAV8HAd9oHeL2IhwK
	TDT/jFjucXIUlUGWE5XRokDxUD2s24OPXsOzPf2o9eiIb/S30BoLjw/4qOmQEqnmwD6CCZVO79k
	nkf3fYTthX+aVPm47hXv8vfiXsntBpYLiQ29m9ylg+fxMPOvOwHnEJoUkoTlPlb0bl6CollNu3L
	I8o6p/NfHMofakl8yvIwKzMNQk3ls0kC
X-Google-Smtp-Source: AGHT+IGt4QThPiIzTY8w+2wmLHVaUAhrdaSG/B9leY63iv33WsLWZMOZ1ufFAgolw6Re0kdw1aMa5w==
X-Received: by 2002:a05:6402:2750:b0:5e0:9269:f54e with SMTP id 4fb4d7f45d1cf-5e0b70d7026mr13240118a12.14.1740416326129;
        Mon, 24 Feb 2025 08:58:46 -0800 (PST)
Received: from localhost ([178.197.194.59])
        by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-5dece1b4e8dsm18539532a12.14.2025.02.24.08.58.45
        (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
        Mon, 24 Feb 2025 08:58:45 -0800 (PST)
From: jonahz <jonah.zuercher@adfinis.com>
To: pve-devel@lists.proxmox.com
Cc: jonahz <jonah.zuercher@adfinis.com>
Subject: [PATCH container 1/1] fix #5496: sdn: fix netbox integration
Date: Mon, 24 Feb 2025 17:58:25 +0100
Message-ID: <20250224165825.82940-2-jonah.zuercher@adfinis.com>
X-Mailer: git-send-email 2.48.1
In-Reply-To: <20250224165825.82940-1-jonah.zuercher@adfinis.com>
References: <20250224165825.82940-1-jonah.zuercher@adfinis.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SPAM-LEVEL: Spam detection results:  0
	BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
	DKIM_SIGNED               0.1 Message has a DKIM or DK signature, not necessarily valid
	DKIM_VALID               -0.1 Message has at least one valid DKIM or DK signature
	DKIM_VALID_AU            -0.1 Message has a valid DKIM or DK signature from author's domain
	DKIM_VALID_EF            -0.1 Message has a valid DKIM or DK signature from envelope-from domain
	DMARC_PASS               -0.1 DMARC pass policy
	RCVD_IN_DNSWL_NONE     -0.0001 Sender listed at https://www.dnswl.org/, no trust
	SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
	SPF_PASS               -0.001 SPF: sender matches SPF record
X-Mailman-Approved-At: Tue, 25 Feb 2025 13:16:30 +0100

This fixes a bug which currently prevents the netbox
plugin from assigning an IP correctly.

It also makes sure to create an IP range, if none exists
for the configured DHCP range.

Signed-off-by: jonahz <jonah.zuercher@adfinis.com>
---
 src/PVE/Network/SDN/Ipams/NetboxPlugin.pm | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/PVE/Network/SDN/Ipams/NetboxPlugin.pm b/src/PVE/Network/SDN/Ipams/NetboxPlugin.pm
index d923269..c391068 100644
--- a/src/PVE/Network/SDN/Ipams/NetboxPlugin.pm
+++ b/src/PVE/Network/SDN/Ipams/NetboxPlugin.pm
@@ -151,7 +151,7 @@ sub add_next_freeip {
 
     my $params = { dns_name => $hostname, description => $description };
 
-    eval {
+    my $ip = eval {
 	my $result = PVE::Network::SDN::api_request("POST", "$url/ipam/prefixes/$internalid/available-ips/", $headers, $params);
 	my ($ip, undef) = split(/\//, $result->{address});
 	return $ip;
@@ -160,6 +160,8 @@ sub add_next_freeip {
     if ($@) {
 	die "can't find free ip in subnet $cidr: $@" if !$noerr;
     }
+
+    return $ip;
 }
 
 sub add_range_next_freeip {
@@ -170,11 +172,24 @@ sub add_range_next_freeip {
     my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Authorization' => "token $token"];
 
     my $internalid = get_iprange_id($url, $range, $headers);
+    # create range if it doesn't exist
+    if (!$internalid) {
+        my $cidr = (split(/\//, $subnet->{cidr}))[1];
+        my $params = { start_address => "$range->{'start-address'}/$cidr", end_address => "$range->{'end-address'}/$cidr" };
+        eval {
+            my $result = PVE::Network::SDN::api_request("POST", "$url/ipam/ip-ranges/", $headers, $params);
+            $internalid = $result->{id};
+        };
+        if ($@) {
+        die "error add range to ipam: $@" if !$noerr;
+        }
+    }
+
     my $description = "mac:$data->{mac}" if $data->{mac};
 
     my $params = { dns_name => $data->{hostname}, description => $description };
 
-    eval {
+    my $ip = eval {
 	my $result = PVE::Network::SDN::api_request("POST", "$url/ipam/ip-ranges/$internalid/available-ips/", $headers, $params);
 	my ($ip, undef) = split(/\//, $result->{address});
 	print "found ip free $ip in range $range->{'start-address'}-$range->{'end-address'}\n" if $ip;
@@ -184,6 +199,8 @@ sub add_range_next_freeip {
     if ($@) {
 	die "can't find free ip in range $range->{'start-address'}-$range->{'end-address'}: $@" if !$noerr;
     }
+
+    return $ip;
 }
 
 sub del_ip {
-- 
2.48.1



--===============5913751118052367451==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

--===============5913751118052367451==--