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 [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id E5E2B1FF16B for <inbox@lore.proxmox.com>; Thu, 6 Mar 2025 12:44:06 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C96054420; Thu, 6 Mar 2025 12:43:45 +0100 (CET) To: pve-devel@lists.proxmox.com Date: Thu, 6 Mar 2025 12:08:30 +0100 In-Reply-To: <20250306110831.6426-1-lou.lecrivain@orange.fr> References: <20250306110831.6426-1-lou.lecrivain@orange.fr> X-Mailman-Approved-At: Thu, 06 Mar 2025 12:43:42 +0100 MIME-Version: 1.0 Message-ID: <mailman.835.1741261422.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: "lou.lecrivain--- via pve-devel" <pve-devel@lists.proxmox.com> Precedence: list Cc: lou.lecrivain@orange.fr, jonatan.crystall@gwdg.de 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 pve-network v3 2/3] ipam: nautobot: add testing for nautobot plugin Content-Type: multipart/mixed; boundary="===============3541084033844734174==" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> --===============3541084033844734174== Content-Type: message/rfc822 Content-Disposition: inline Return-Path: <lou.lecrivain@orange.fr> 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)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id E8FD9D3F53 for <pve-devel@lists.proxmox.com>; Thu, 6 Mar 2025 12:09:42 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CB87D3558 for <pve-devel@lists.proxmox.com>; Thu, 6 Mar 2025 12:09:12 +0100 (CET) Received: from smtp.smtpout.orange.fr (smtp-22.smtpout.orange.fr [80.12.242.22]) (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 firstgate.proxmox.com (Proxmox) with ESMTPS for <pve-devel@lists.proxmox.com>; Thu, 6 Mar 2025 12:09:11 +0100 (CET) Received: from localhost ([176.139.8.107]) by smtp.orange.fr with ESMTPA id q965tunbOUndUq968tRaOx; Thu, 06 Mar 2025 12:09:05 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1741259345; bh=8dAjiDE4Qg/uJMbA26dHyBLZLsbuwixgSOuECVbQUXs=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=LiLbh/J6I+K2qjLQ0Cqlp+eE+k6OD7YMXYuiQvwSfp3qNgXY/eaRiRR2vMQUypwlx YkJDi8pDALYYxFUHBn3Rll++CP8QauMP58c/NOVne5kZadmJHf9HaiecNbOgr+Y64r 1FhCPUZhOAAznDxoWWGyUofbuS+HHwxjBLKjYSEXep2xs5s2V7YGsawhvHO7PqMXGW 52rVzb8povMtB1Omu2MdrzQtMvrZskwA0QlRBvTMVbqLlX4UH0K5e7jVBW9efXt+RD wCVgQsviKCx2fPvo79WhjUjlAs9p0xj9xUrPmFSZ7kGOL/P1I4N/VGHwZez8CZ2x5T RHJ79SDF3D8xw== X-ME-Helo: localhost X-ME-Auth: bG91LmxlY3JpdmFpbkBvcmFuZ2UuZnI= X-ME-Date: Thu, 06 Mar 2025 12:09:05 +0100 X-ME-IP: 176.139.8.107 From: lou.lecrivain@orange.fr To: pve-devel@lists.proxmox.com Cc: h.duerr@proxmox.com, jonatan.crystall@gwdg.de, Lou Lecrivain <lou.lecrivain@wdz.de> Subject: [PATCH pve-network v3 2/3] ipam: nautobot: add testing for nautobot plugin Date: Thu, 6 Mar 2025 12:08:30 +0100 Message-Id: <20250306110831.6426-3-lou.lecrivain@orange.fr> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250306110831.6426-1-lou.lecrivain@orange.fr> References: <20250306110831.6426-1-lou.lecrivain@orange.fr> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.500 Adjusted score from AWL reputation of From: address 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 FREEMAIL_FROM 0.001 Sender email is commonly abused enduser mail provider RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust RCVD_IN_MSPIKE_H3 0.001 Good reputation (+3) RCVD_IN_MSPIKE_WL 0.001 Mailspike good senders SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record X-Mailman-Approved-At: Thu, 06 Mar 2025 12:43:42 +0100 From: Lou Lecrivain <lou.lecrivain@wdz.de> Signed-off-by: lou lecrivain <lou.lecrivain@wdz.de> --- src/PVE/Network/SDN/Ipams/NautobotPlugin.pm | 29 +++++++++++++------ src/test/ipams/nautobot/expected.add_ip | 11 +++++++ .../ipams/nautobot/expected.add_ip_notgateway | 11 +++++++ .../ipams/nautobot/expected.add_next_freeip | 11 +++++++ src/test/ipams/nautobot/expected.add_subnet | 11 +++++++ src/test/ipams/nautobot/expected.del_ip | 11 +++++++ src/test/ipams/nautobot/expected.update_ip | 11 +++++++ src/test/ipams/nautobot/ipam_config | 24 +++++++++++++++ src/test/ipams/nautobot/sdn_config | 20 +++++++++++++ src/test/ipams/netbox/ipam_config | 8 ++++- src/test/ipams/phpipam/ipam_config | 8 ++++- 11 files changed, 144 insertions(+), 11 deletions(-) create mode 100644 src/test/ipams/nautobot/expected.add_ip create mode 100644 src/test/ipams/nautobot/expected.add_ip_notgateway create mode 100644 src/test/ipams/nautobot/expected.add_next_freeip create mode 100644 src/test/ipams/nautobot/expected.add_subnet create mode 100644 src/test/ipams/nautobot/expected.del_ip create mode 100644 src/test/ipams/nautobot/expected.update_ip create mode 100644 src/test/ipams/nautobot/ipam_config create mode 100644 src/test/ipams/nautobot/sdn_config diff --git a/src/PVE/Network/SDN/Ipams/NautobotPlugin.pm b/src/PVE/Network/SDN/Ipams/NautobotPlugin.pm index 58f7c68..6f2a380 100644 --- a/src/PVE/Network/SDN/Ipams/NautobotPlugin.pm +++ b/src/PVE/Network/SDN/Ipams/NautobotPlugin.pm @@ -54,7 +54,7 @@ sub add_subnet { my $namespace = $plugin_config->{namespace}; my $headers = default_headers($plugin_config); - my $internalid = get_prefix_id($url, $cidr, $headers, $noerr); + my $internalid = get_prefix_id($plugin_config, $cidr, $noerr); #create subnet if (!$internalid) { @@ -80,7 +80,7 @@ sub del_subnet { my $url = $plugin_config->{url}; my $headers = default_headers($plugin_config); - my $internalid = get_prefix_id($url, $cidr, $headers, $noerr); + my $internalid = get_prefix_id($plugin_config, $cidr, $noerr); return if !$internalid; # TODO check that prefix is empty before deletion @@ -142,7 +142,7 @@ sub add_next_freeip { my $namespace = $plugin_config->{namespace}; my $headers = default_headers($plugin_config); - my $internalid = get_prefix_id($url, $cidr, $headers, $noerr); + my $internalid = get_prefix_id($plugin_config, $cidr, $noerr); die "cannot find prefix $cidr in Nautobot" if !$internalid; my $description = undef; @@ -235,7 +235,7 @@ sub update_ip { status => default_ip_status() }; - my $ip_id = get_ip_id($url, $ip, $headers, $noerr); + my $ip_id = get_ip_id($plugin_config, $ip, $noerr); die "can't find ip $ip in ipam" if !$noerr && !$ip_id; eval { @@ -256,7 +256,7 @@ sub del_ip { my $url = $plugin_config->{url}; my $headers = default_headers($plugin_config); - my $ip_id = get_ip_id($url, $ip, $headers, $noerr); + my $ip_id = get_ip_id($plugin_config, $ip, $noerr); die "can't find ip $ip in ipam" if !$ip_id && !$noerr; eval { @@ -268,7 +268,6 @@ sub del_ip { } } - sub verify_api { my ($class, $plugin_config) = @_; @@ -330,7 +329,11 @@ sub get_ips_within_range { } sub get_ip_id { - my ($url, $ip, $headers, $noerr) = @_; + my ($plugin_config, $ip, $noerr) = @_; + + my $url = $plugin_config->{url}; + my $namespace = $plugin_config->{namespace}; + my $headers = default_headers($plugin_config); my $result = eval { return PVE::Network::SDN::api_request( @@ -346,7 +349,11 @@ sub get_ip_id { } sub get_prefix_id { - my ($url, $cidr, $headers, $noerr) = @_; + my ($plugin_config, $cidr, $noerr) = @_; + + my $url = $plugin_config->{url}; + my $namespace = $plugin_config->{namespace}; + my $headers = default_headers($plugin_config); my $result = eval { return PVE::Network::SDN::api_request( @@ -394,7 +401,11 @@ sub get_status_id { } sub is_ip_gateway { - my ($url, $ip, $headers, $noerr) = @_; + my ($plugin_config, $ip, $noerr) = @_; + + my $url = $plugin_config->{url}; + my $namespace = $plugin_config->{namespace}; + my $headers = default_headers($plugin_config); my $result = eval { return PVE::Network::SDN::api_request( diff --git a/src/test/ipams/nautobot/expected.add_ip b/src/test/ipams/nautobot/expected.add_ip new file mode 100644 index 0000000..60c62d4 --- /dev/null +++ b/src/test/ipams/nautobot/expected.add_ip @@ -0,0 +1,11 @@ +bless( { + '_content' => '{"address":"10.0.0.1/24","description":"gateway","dns_name":"myhostname","namespace":"TestNamespace","status":"Active","type":"dhcp"}', + '_headers' => bless( { + 'authorization' => 'token FAKETESTTOKEN', + 'content-type' => 'application/json', + 'accept' => 'application/json' + }, 'HTTP::Headers' ), + '_max_body_size' => undef, + '_method' => 'POST', + '_uri' => bless( do{\(my $o = 'http://localhost:8080/api/ipam/ip-addresses/')}, 'URI::http' ) + }, 'HTTP::Request' ); diff --git a/src/test/ipams/nautobot/expected.add_ip_notgateway b/src/test/ipams/nautobot/expected.add_ip_notgateway new file mode 100644 index 0000000..355ccde --- /dev/null +++ b/src/test/ipams/nautobot/expected.add_ip_notgateway @@ -0,0 +1,11 @@ +bless( { + '_content' => '{"address":"10.0.0.1/24","description":"mac:da:65:8f:18:9b:6f","dns_name":"myhostname","namespace":"TestNamespace","status":"Active","type":"dhcp"}', + '_headers' => bless( { + 'authorization' => 'token FAKETESTTOKEN', + 'content-type' => 'application/json', + 'accept' => 'application/json' + }, 'HTTP::Headers' ), + '_max_body_size' => undef, + '_method' => 'POST', + '_uri' => bless( do{\(my $o = 'http://localhost:8080/api/ipam/ip-addresses/')}, 'URI::http' ) + }, 'HTTP::Request' ); diff --git a/src/test/ipams/nautobot/expected.add_next_freeip b/src/test/ipams/nautobot/expected.add_next_freeip new file mode 100644 index 0000000..da79a27 --- /dev/null +++ b/src/test/ipams/nautobot/expected.add_next_freeip @@ -0,0 +1,11 @@ +bless( { + '_content' => '{"description":"mac:da:65:8f:18:9b:6f","dns_name":"myhostname","namespace":"TestNamespace","status":"Active","type":"dhcp"}', + '_headers' => bless( { + 'authorization' => 'token FAKETESTTOKEN', + 'content-type' => 'application/json', + 'accept' => 'application/json' + }, 'HTTP::Headers' ), + '_max_body_size' => undef, + '_method' => 'POST', + '_uri' => bless( do{\(my $o = 'http://localhost:8080/api/ipam/prefixes/1/available-ips/')}, 'URI::http' ) + }, 'HTTP::Request' ); diff --git a/src/test/ipams/nautobot/expected.add_subnet b/src/test/ipams/nautobot/expected.add_subnet new file mode 100644 index 0000000..af4bc8e --- /dev/null +++ b/src/test/ipams/nautobot/expected.add_subnet @@ -0,0 +1,11 @@ +bless({ + '_content' => '{"namespace":"TestNamespace","prefix":"10.0.0.0/24","status":"Active"}', + '_headers' => bless({ + 'authorization' => 'token FAKETESTTOKEN', + 'content-type' => 'application/json', + 'accept' => 'application/json', + }, 'HTTP::Headers'), + '_max_body_size' => undef, + '_method' => 'POST', + '_uri' => bless(do{\(my $o = 'http://localhost:8080/api/ipam/prefixes/')}, 'URI::http'), +}, 'HTTP::Request'); diff --git a/src/test/ipams/nautobot/expected.del_ip b/src/test/ipams/nautobot/expected.del_ip new file mode 100644 index 0000000..f4bc182 --- /dev/null +++ b/src/test/ipams/nautobot/expected.del_ip @@ -0,0 +1,11 @@ +bless( { + '_content' => '', + '_headers' => bless( { + 'authorization' => 'token FAKETESTTOKEN', + 'content-type' => 'application/json', + 'accept' => 'application/json' + }, 'HTTP::Headers' ), + '_max_body_size' => undef, + '_method' => 'DELETE', + '_uri' => bless( do{\(my $o = 'http://localhost:8080/api/ipam/ip-addresses/1/')}, 'URI::http' ) + }, 'HTTP::Request' ); diff --git a/src/test/ipams/nautobot/expected.update_ip b/src/test/ipams/nautobot/expected.update_ip new file mode 100644 index 0000000..58e0ac6 --- /dev/null +++ b/src/test/ipams/nautobot/expected.update_ip @@ -0,0 +1,11 @@ +bless( { + '_content' => '{"address":"10.0.0.1/24","description":"gateway","dns_name":"myhostname","namespace":"TestNamespace","status":"Active","type":"dhcp"}', + '_headers' => bless( { + 'authorization' => 'token FAKETESTTOKEN', + 'content-type' => 'application/json', + 'accept' => 'application/json' + }, 'HTTP::Headers' ), + '_max_body_size' => undef, + '_method' => 'PATCH', + '_uri' => bless( do{\(my $o = 'http://localhost:8080/api/ipam/ip-addresses/1/')}, 'URI::http' ) + }, 'HTTP::Request' ); diff --git a/src/test/ipams/nautobot/ipam_config b/src/test/ipams/nautobot/ipam_config new file mode 100644 index 0000000..014d6b1 --- /dev/null +++ b/src/test/ipams/nautobot/ipam_config @@ -0,0 +1,24 @@ +{ + 'ids' => { + 'phpipam' => { + 'url' => 'https://localhost/api/apiadmin', + 'type' => 'phpipam', + 'section' => 1, + 'token' => 'JPHkPSLB4O_XL-GQz4qtEFmNpx-99Htw' + }, + 'pve' => { + 'type' => 'pve' + }, + 'netbox' => { + 'token' => '0123456789abcdef0123456789abcdef01234567', + 'type' => 'netbox', + 'url' => 'http://localhost:8000/api' + }, + 'nautobot' => { + 'url' => 'http://localhost:8080/api', + 'type' => 'nautobot', + 'token' => 'FAKETESTTOKEN', + 'namespace' => 'TestNamespace' + } + }, +} diff --git a/src/test/ipams/nautobot/sdn_config b/src/test/ipams/nautobot/sdn_config new file mode 100644 index 0000000..784cd95 --- /dev/null +++ b/src/test/ipams/nautobot/sdn_config @@ -0,0 +1,20 @@ +{ + version => 1, + vnets => { + ids => { + myvnet => { type => "vnet", zone => "myzone" }, + }, + }, + + zones => { + ids => { myzone => { ipam => "nautobot" } }, + }, + + subnets => { + ids => { 'myzone-10.0.0.0-24' => { + 'type' => 'subnet', + 'vnet' => 'myvnet', + } + } + } +} diff --git a/src/test/ipams/netbox/ipam_config b/src/test/ipams/netbox/ipam_config index a33be30..014d6b1 100644 --- a/src/test/ipams/netbox/ipam_config +++ b/src/test/ipams/netbox/ipam_config @@ -13,6 +13,12 @@ 'token' => '0123456789abcdef0123456789abcdef01234567', 'type' => 'netbox', 'url' => 'http://localhost:8000/api' - } + }, + 'nautobot' => { + 'url' => 'http://localhost:8080/api', + 'type' => 'nautobot', + 'token' => 'FAKETESTTOKEN', + 'namespace' => 'TestNamespace' + } }, } diff --git a/src/test/ipams/phpipam/ipam_config b/src/test/ipams/phpipam/ipam_config index a33be30..014d6b1 100644 --- a/src/test/ipams/phpipam/ipam_config +++ b/src/test/ipams/phpipam/ipam_config @@ -13,6 +13,12 @@ 'token' => '0123456789abcdef0123456789abcdef01234567', 'type' => 'netbox', 'url' => 'http://localhost:8000/api' - } + }, + 'nautobot' => { + 'url' => 'http://localhost:8080/api', + 'type' => 'nautobot', + 'token' => 'FAKETESTTOKEN', + 'namespace' => 'TestNamespace' + } }, } -- 2.39.5 --===============3541084033844734174== 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 --===============3541084033844734174==--