From: "lou.lecrivain--- via pve-devel" <pve-devel@lists.proxmox.com>
To: pve-devel@lists.proxmox.com
Cc: lou.lecrivain@orange.fr, jonatan.crystall@gwdg.de
Subject: [pve-devel] [PATCH pve-network v3 2/3] ipam: nautobot: add testing for nautobot plugin
Date: Thu, 6 Mar 2025 12:08:30 +0100 [thread overview]
Message-ID: <mailman.835.1741261422.293.pve-devel@lists.proxmox.com> (raw)
In-Reply-To: <20250306110831.6426-1-lou.lecrivain@orange.fr>
[-- Attachment #1: Type: message/rfc822, Size: 16672 bytes --]
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>
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
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-03-06 11:44 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20250306110831.6426-1-lou.lecrivain@orange.fr>
2025-03-06 11:08 ` [pve-devel] [PATCH pve-network v3 1/3] ipam: nautobot: base plugin lou.lecrivain--- via pve-devel
2025-03-06 11:08 ` lou.lecrivain--- via pve-devel [this message]
2025-03-06 11:08 ` [pve-devel] [PATCH pve-network v3 3/3] ipam: nautobot: add checks for prefix deletion lou.lecrivain--- via pve-devel
2025-03-06 11:10 ` [pve-devel] [PATCH] pve-docs: add documentation for Nautobot IPAM plugin lou.lecrivain--- via pve-devel
2025-03-06 11:10 ` [pve-devel] [PATCH] pve-manager: add UI dialogs for Nautobot IPAM backend lou.lecrivain--- via pve-devel
2025-03-06 12:13 ` [pve-devel] [PATCH-SERIES pve-network v3] Add Nautobot IPAM support Hannes Dürr
2025-03-06 13:11 ` Lou Lecrivain via pve-devel
[not found] ` <FR3PPF52E80A3568CB02FD718D9A4A750B885CA2@FR3PPF52E80A356.DEUP281.PROD.OUTLOOK.COM>
2025-03-06 13:14 ` Hannes Dürr
2025-03-06 12:18 ` Hannes Dürr
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=mailman.835.1741261422.293.pve-devel@lists.proxmox.com \
--to=pve-devel@lists.proxmox.com \
--cc=jonatan.crystall@gwdg.de \
--cc=lou.lecrivain@orange.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal