Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions changelogs/fragments/version_api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
minor_changes:
- rename variable version to api_version.
3 changes: 3 additions & 0 deletions changelogs/fragments/version_netbox.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
minor_changes:
- rename variable full_version to netbox_version.
2 changes: 1 addition & 1 deletion docs/getting_started/contributing/modules/architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ We set several instance attributes that are used within other methods throughout
else:
self.nb = nb_client
try:
self.version = self.nb.version
self.api_version = self.nb.version
except AttributeError:
self.module.fail_json(msg="Must have pynetbox >=4.1.0")

Expand Down
12 changes: 9 additions & 3 deletions plugins/module_utils/netbox_dcim.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ def run(self):

# Handle rack and form_factor
if endpoint_name == "rack":
if self._version_check_greater(self.version, "4.1", greater_or_equal=True):
if self._version_check_greater(
self.api_version, "4.1", greater_or_equal=True
):
if "type" in data:
data["form_factor"] = self._to_slug(data["type"])
del data["type"]
Expand Down Expand Up @@ -193,7 +195,9 @@ def run(self):
data["color"] = data["color"].lower()

if self.endpoint == "cables":
if self._version_check_greater(self.version, "3.0", greater_or_equal=True):
if self._version_check_greater(
self.api_version, "3.0", greater_or_equal=True
):
cables = [
nb_endpoint.get(
termination_a_type=data["termination_a_type"],
Expand Down Expand Up @@ -222,7 +226,9 @@ def run(self):
else:
self._handle_errors(msg="More than one result returned for %s" % (name))

if self._version_check_greater(self.version, "3.3", greater_or_equal=True):
if self._version_check_greater(
self.api_version, "3.3", greater_or_equal=True
):
data["a_terminations"] = [
{
"object_id": data.pop("termination_a_id"),
Expand Down
6 changes: 4 additions & 2 deletions plugins/module_utils/netbox_ipam.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ def _ensure_ip_in_prefix_present_on_netif(
"parent": data["prefix"],
}

if not self._version_check_greater(self.version, "2.9", greater_or_equal=True):
if not self._version_check_greater(
self.api_version, "2.9", greater_or_equal=True
):
if not data.get("interface") or not data.get("prefix"):
self._handle_errors("A prefix and interface is required")
data_intf_key = "interface"
Expand Down Expand Up @@ -217,7 +219,7 @@ def run(self):
data["slug"] = self._to_slug(name)

if self.endpoint == "services" and self._version_check_greater(
self.version, "4.3", greater_or_equal=True
self.api_version, "4.3", greater_or_equal=True
):
if "device" in data:
data["parent_object_type"] = "dcim.device"
Expand Down
8 changes: 4 additions & 4 deletions plugins/module_utils/netbox_tenancy.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,17 @@ def run(self):
if self.endpoint == NB_CONTACTS:
if data.get("groups"):
if not self._version_check_greater(
self.version, "4.3", greater_or_equal=True
self.api_version, "4.3", greater_or_equal=True
):
raise Exception(
f"contact_groups is not available in Netbox {self.version}. Use contact_group instead, or upgrade to Netbox 4.3 or greater."
f"contact_groups is not available in Netbox {self.api_version}. Use contact_group instead, or upgrade to Netbox 4.3 or greater."
)
if data.get("group"):
if self._version_check_greater(
self.version, "4.3", greater_or_equal=True
self.api_version, "4.3", greater_or_equal=True
):
raise Exception(
f"contact_group is not available in Netbox {self.version}. Use contact_groups instead."
f"contact_group is not available in Netbox {self.api_version}. Use contact_groups instead."
)

# For ease and consistency of use, the contact assignment module takes the name of the contact, role, and target object rather than an ID or slug.
Expand Down
42 changes: 22 additions & 20 deletions plugins/module_utils/netbox_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -781,14 +781,14 @@ def __init__(self, module, endpoint, nb_client=None):
else:
self.nb = nb_client
try:
self.version = self._version_sanitize(self.nb.version)
self.api_version = self._version_sanitize(self.nb.version)
try:
self.full_version = self._version_sanitize(
self.netbox_version = self._version_sanitize(
self.nb.status().get("netbox-version")
)
except Exception:
# For NetBox versions without /api/status endpoint
self.full_version = f"{self.version}.0"
self.netbox_version = f"{self.api_version}.0"
except AttributeError:
self.module.fail_json(msg="Must have pynetbox >=4.1.0")

Expand Down Expand Up @@ -850,14 +850,14 @@ def _connect_netbox_api(self, url, token, ssl_verify, cert, headers=None):
nb = pynetbox.api(url, token=token)
nb.http_session = session
try:
self.version = self._version_sanitize(nb.version)
self.api_version = self._version_sanitize(nb.version)
try:
self.full_version = self._version_sanitize(
self.netbox_version = self._version_sanitize(
nb.status().get("netbox-version")
)
except Exception:
# For NetBox versions without /api/status endpoint
self.full_version = f"{self.version}.0"
self.netbox_version = f"{self.api_version}.0"
except AttributeError:
self.module.fail_json(msg="Must have pynetbox >=4.1.0")
except Exception:
Expand Down Expand Up @@ -941,7 +941,7 @@ def _convert_identical_keys(self, data):
:params data (dict): Data dictionary after _find_ids method ran
"""
temp_dict = dict()
if self._version_check_greater(self.version, "2.7", greater_or_equal=True):
if self._version_check_greater(self.api_version, "2.7", greater_or_equal=True):
if data.get("form_factor"):
temp_dict["type"] = data.pop("form_factor")

Expand All @@ -950,7 +950,7 @@ def _convert_identical_keys(self, data):
temp_dict[key] = data[key]
# TODO: Remove this once the lowest supported Netbox version is 3.6 or greater as we can use default logic of CONVERT_KEYS moving forward.
elif key == "device_role" and not self._version_check_greater(
self.version, "3.6", greater_or_equal=True
self.api_version, "3.6", greater_or_equal=True
):
temp_dict[key] = data[key]
elif key in CONVERT_KEYS:
Expand Down Expand Up @@ -1043,7 +1043,7 @@ def _build_query_params(
parent == "interface"
and "device" in module_data
and self._version_check_greater(
self.version, "3.6", greater_or_equal=True
self.api_version, "3.6", greater_or_equal=True
)
):
query_dict.update(
Expand Down Expand Up @@ -1130,7 +1130,7 @@ def _build_query_params(
elif parent == "rear_port_template" and self.endpoint == "front_port_templates":
if isinstance(module_data.get("rear_port_template"), str):
if self._version_check_greater(
self.version, "4.0", greater_or_equal=True
self.api_version, "4.0", greater_or_equal=True
):
rear_port_template = {
"device_type_id": module_data.get("device_type"),
Expand All @@ -1157,7 +1157,7 @@ def _build_query_params(
):
if isinstance(module_data.get("power_port_template"), str):
if self._version_check_greater(
self.version, "4.0", greater_or_equal=True
self.api_version, "4.0", greater_or_equal=True
):
power_port_template = {
"device_type_id": module_data.get("device_type"),
Expand Down Expand Up @@ -1192,7 +1192,7 @@ def _build_query_params(
elif "_template" in parent:
if query_dict.get("device_type"):
if self._version_check_greater(
self.version, "4.0", greater_or_equal=True
self.api_version, "4.0", greater_or_equal=True
):
query_dict["device_type_id"] = query_dict.pop("device_type")
else:
Expand All @@ -1202,8 +1202,8 @@ def _build_query_params(
# Netbox 4.3.0 - 4.4.3 is removed
elif parent == "services":
if self._version_check_greater(
self.version, "4.3", greater_or_equal=True
) and self._version_check_greater("4.4.4", self.full_version):
self.api_version, "4.3", greater_or_equal=True
) and self._version_check_greater("4.4.4", self.netbox_version):
query_dict.pop("parent_object_id", None)
query_dict.pop("parent_object_type", None)

Expand Down Expand Up @@ -1277,13 +1277,15 @@ def _find_app(self, endpoint):
if endpoint in v.keys():
if "introduced" in v[endpoint]:
pre_introduction = self._version_check_greater(
v[endpoint]["introduced"], self.version
v[endpoint]["introduced"], self.api_version
)
if pre_introduction:
continue
if "deprecated" in v[endpoint]:
after_deprecation = self._version_check_greater(
self.version, v[endpoint]["deprecated"], greater_or_equal=True
self.api_version,
v[endpoint]["deprecated"],
greater_or_equal=True,
)
if after_deprecation:
continue
Expand All @@ -1303,7 +1305,7 @@ def _find_ids(self, data, user_query_params):
if k in CONVERT_TO_ID:
if (
not self._version_check_greater(
self.version, "2.9", greater_or_equal=True
self.api_version, "2.9", greater_or_equal=True
)
and k == "tags"
) or (self.endpoint == "config_contexts" and k == "tags"):
Expand Down Expand Up @@ -1527,7 +1529,7 @@ def _update_netbox_object(self, data):
updated_obj["tags"] = set(data["tags"])

# Ensure idempotency for site on older netbox versions
version_pre_30 = self._version_check_greater("3.0", self.version)
version_pre_30 = self._version_check_greater("3.0", self.api_version)
if (
serialized_nb_obj.get("latitude")
and data.get("latitude")
Expand All @@ -1542,15 +1544,15 @@ def _update_netbox_object(self, data):
updated_obj["longitude"] = str(data["longitude"])

# Ensure idempotency for virtual machine on older netbox versions
version_pre_211 = self._version_check_greater("2.11", self.version)
version_pre_211 = self._version_check_greater("2.11", self.api_version)
if serialized_nb_obj.get("vcpus") and data.get("vcpus"):
if version_pre_211:
updated_obj["vcpus"] = int(data["vcpus"])
else:
updated_obj["vcpus"] = float(data["vcpus"])

# Ensure idempotency for cable on netbox versions later than 3.3
version_post_33 = self._version_check_greater(self.version, "3.3", True)
version_post_33 = self._version_check_greater(self.api_version, "3.3", True)
if (
serialized_nb_obj.get("a_terminations")
and serialized_nb_obj.get("b_terminations")
Expand Down
2 changes: 1 addition & 1 deletion plugins/modules/netbox_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def main():

# Change port to ports for 2.10+ and convert to a list with the single integer
if netbox_service.data.get("port") and netbox_service._version_check_greater(
netbox_service.version, "2.10", greater_or_equal=True
netbox_service.api_version, "2.10", greater_or_equal=True
):
netbox_service.data["ports"] = [netbox_service.data.pop("port")]

Expand Down
Loading