Skip to content
This repository was archived by the owner on Jun 27, 2025. It is now read-only.

Commit 3f83f61

Browse files
authored
NetBox 3.7 VPN API Changes (#24)
1 parent bb4ecd3 commit 3f83f61

File tree

11 files changed

+83
-73
lines changed

11 files changed

+83
-73
lines changed

.pre-commit-config.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ repos:
4848
- id: python-no-log-warn
4949
- id: python-no-eval
5050
- id: python-use-type-annotations
51-
- id: rst-backticks
52-
- id: rst-directive-colons
53-
- id: rst-inline-touching-normal
5451

5552
- repo: https://github.com/mgedmin/check-manifest
5653
rev: "0.47"

netbox_python/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
"""Top-level package for NetBox Python."""
2+
from importlib.metadata import version
23

34
__author__ = """Arthur Hanson"""
45
__email__ = "[email protected]"
5-
__version__ = "0.1.0"
6+
__version__ = version(__name__)
67

78
from netbox_python.exceptions import NetBoxException
89
from netbox_python.netbox import NetBoxClient

netbox_python/api/circuits.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class _circuits(APIResource):
2121
path = "circuits/circuits/"
2222

2323
class _provider_networks(APIResource):
24-
path = "circuits/provider_networks/"
24+
path = "circuits/provider-networks/"
2525

2626
class _providers(APIResource):
2727
path = "circuits/providers/"

netbox_python/api/dcim.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
from netbox_python.baseapi import APIResource, CreateableAPIResource, ElevationAPIResource
1+
from netbox_python.baseapi import (
2+
APIResource,
3+
CreateableAPIResource,
4+
ElevationAPIResource,
5+
)
26
from netbox_python.rest import Result
37

48

netbox_python/api/ipam.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@ def __init__(self, client):
1616
self.ip_addresses = self._ip_addresses(client)
1717
self.ip_ranges = self._ip_ranges(client)
1818
self.ip_range = ip_range(client)
19-
self.l2vpn_terminations = self._l2vpn_terminations(client)
20-
self.l2vpns = self._l2vpns(client)
2119
self.prefixes = self._prefixes(client)
2220
self.rirs = self._rirs(client)
2321
self.roles = self._roles(client)
2422
self.route_targets = self._route_targets(client)
2523
self.service_templates = self._service_templates(client)
2624
self.services = self._services(client)
2725
self.vlan_groups = self._vlan_groups(client)
26+
self.vlan_group = vlan_group(client)
2827
self.vlans = self._vlans(client)
2928
self.vrfs = self._vrfs(client)
3029
super().__init__()
@@ -50,12 +49,6 @@ class _ip_addresses(APIResource):
5049
class _ip_ranges(APIResource):
5150
path = "ipam/ip-ranges/"
5251

53-
class _l2vpn_terminations(APIResource):
54-
path = "ipam/l2vpn-terminations/"
55-
56-
class _l2vpns(APIResource):
57-
path = "ipam/l2vpns/"
58-
5952
class _prefixes(APIResource):
6053
path = "ipam/prefixes/"
6154

netbox_python/api/vpn.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from netbox_python.baseapi import APIResource
2+
3+
4+
class vpn:
5+
def __init__(self, client):
6+
self.ike_policies = self._ike_policies(client)
7+
self.ike_proposals = self._ike_proposals(client)
8+
self.ipsec_policies = self._ipsec_policies(client)
9+
self.ipsec_proposals = self._ipsec_proposals(client)
10+
self.ipsec_profiles = self._ipsec_profiles(client)
11+
self.tunnel_groups = self._tunnel_groups(client)
12+
self.tunnels = self._tunnels(client)
13+
self.tunnel_terminations = self._tunnel_terminations(client)
14+
self.l2vpns = self._l2vpns(client)
15+
self.l2vpn_terminations = self._l2vpn_terminations(client)
16+
17+
super().__init__()
18+
19+
class _ike_policies(APIResource):
20+
path = "vpn/ike-policies/"
21+
22+
class _ike_proposals(APIResource):
23+
path = "vpn/ike-proposals/"
24+
25+
class _ipsec_policies(APIResource):
26+
path = "vpn/ipsec-policies/"
27+
28+
class _ipsec_proposals(APIResource):
29+
path = "vpn/ipsec-proposals/"
30+
31+
class _ipsec_profiles(APIResource):
32+
path = "vpn/ipsec-profiles/"
33+
34+
class _tunnel_groups(APIResource):
35+
path = "vpn/tunnel-groups/"
36+
37+
class _tunnels(APIResource):
38+
path = "vpn/tunnels/"
39+
40+
class _tunnel_terminations(APIResource):
41+
path = "vpn/tunnel-terminations/"
42+
43+
class _l2vpns(APIResource):
44+
path = "vpn/l2vpns/"
45+
46+
class _l2vpn_terminations(APIResource):
47+
path = "vpn/l2vpn-terminations/"

netbox_python/baseapi.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ def paginate(self, result: Result) -> Result:
3030
next_token = result.pagination["next"]
3131
yield result
3232
while next_token:
33-
result = self.client.get(
34-
self.path, url_override=next_token, params=result.params
35-
)
33+
result = self.client.get(self.path, url_override=next_token, params=result.params)
3634
yield result
3735
next_token = result.pagination["next"]
3836

@@ -97,31 +95,29 @@ class ROAPIResource(
9795
pass
9896

9997

100-
class AvailableAPIResource(
101-
baseapi,
102-
CreateableAPIResource,
103-
ListableAPIResource,
104-
):
105-
def create(self, id: str | int, *args, **kwargs) -> Result:
98+
class CreateablePathAPIResource:
99+
def create(self, *args, **kwargs) -> Result:
106100
path = self.path.format(id=id)
107101
return self._create(path, *args, **kwargs)
108102

109-
def list(self, id: str | int, **kwargs) -> Result:
103+
104+
class ListablePathAPIResource:
105+
def list(self, **kwargs) -> Result:
110106
path = self.path.format(id=id)
111107
return self._list(path, **kwargs)
112108

113-
def all(self, id: str | int, **kwargs):
109+
def all(self, **kwargs):
114110
path = self.path.format(id=id)
115111
return self._all(path, **kwargs)
116112

117-
class ElevationAPIResource(
113+
114+
class AvailableAPIResource(
118115
baseapi,
119-
ListableAPIResource
116+
CreateablePathAPIResource,
117+
ListablePathAPIResource,
120118
):
121-
def list(self, id: str | int, **kwargs) -> Result:
122-
path = self.path.format(id=id)
123-
return self._list(path, **kwargs)
119+
pass
124120

125-
def all(self, id: str | int, **kwargs):
126-
path = self.path.format(id=id)
127-
return self._all(path, **kwargs)
121+
122+
class ElevationAPIResource(baseapi, ListablePathAPIResource):
123+
pass

netbox_python/netbox.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from netbox_python.api.tenancy import tenancy
1010
from netbox_python.api.users import users
1111
from netbox_python.api.virtualization import virtualization
12+
from netbox_python.api.vpn import vpn
1213
from netbox_python.api.wireless import wireless
1314
from netbox_python.baseapi import RetrievableRootAPIResource, baseapi
1415
from netbox_python.rest import RestClient
@@ -30,9 +31,7 @@ def __init__(self, base_url: str, token: str, headers: Dict[str, str] = None):
3031
if token:
3132
headers["authorization"] = f"Token {token}"
3233

33-
url = base_url = "{}/api".format(
34-
base_url if base_url[-1] != "/" else base_url[:-1]
35-
)
34+
url = base_url = "{}/api".format(base_url if base_url[-1] != "/" else base_url[:-1])
3635

3736
self.circuits = circuits(self)
3837
self.core = core(self)
@@ -43,6 +42,7 @@ def __init__(self, base_url: str, token: str, headers: Dict[str, str] = None):
4342
self.tenancy = tenancy(self)
4443
self.users = users(self)
4544
self.virtualization = virtualization(self)
45+
self.vpn = vpn(self)
4646
self.wireless = wireless(self)
4747

4848
super().__init__(base_url=url, headers=headers)

netbox_python/rest.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,7 @@ def request(self, method: str, path: str, **kwargs) -> Result:
5858
response = self._session.request(method=method, url=url, **kwargs)
5959
response.raise_for_status()
6060
except requests.HTTPError as http_error:
61-
raise NetBoxException(
62-
f"Invalid request from {self.base_url}: {http_error}"
63-
) from http_error
61+
raise NetBoxException(f"Invalid request from {self.base_url}: {http_error}") from http_error
6462
except requests.RequestException as err:
6563
raise NetBoxException("Request failed") from err
6664

@@ -73,7 +71,7 @@ def request(self, method: str, path: str, **kwargs) -> Result:
7371

7472
# If status_code in 200-299 range, return success Result with data, otherwise raise exception
7573
is_success = 299 >= response.status_code >= 200 # 200 to 299 is OK
76-
no_content_success = response.status_code == 204 # 204 is OK. Means no content
74+
no_content_success = response.status_code == 204 # 204 is OK. Means no content
7775
if is_success:
7876
# check if list - fixme: should have cleaner way to do this
7977
pagination = None

requirements_dev.txt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
pip==23.0.1
2-
bump2version==1.0.1
3-
wheel==0.38.4
4-
watchdog==2.3.0
5-
flake8==6.0.0
6-
tox==4.4.6
7-
coverage==7.2.1
8-
twine==4.0.2
9-
10-
pytest==7.2.1
111
black==23.1.0
2+
flake8==6.0.0
3+
pip==23.0.1
124
pre-commit==3.1.0
5+
6+
pytest==7.2.*
7+
twine==4.0.2
8+
watchdog==2.3.0
9+
wheel==0.38.4

0 commit comments

Comments
 (0)