diff --git a/CHANGELOG.MD b/CHANGELOG.MD
index 92f848d..3fc9131 100644
--- a/CHANGELOG.MD
+++ b/CHANGELOG.MD
@@ -1,4 +1,12 @@
+## v0.9.6 - 2022-05-31
+### Fixed
+
+- #94 - Fix `primary_ip` usage in `interface` model, `delete` operations and `device_content` embedded `iframe`.
+
+### Changed
+
+- #94 - Make `ssot-safe-delete` log messages less noisy, using `debug` log level.
## v0.9.5 - 2022-05-11
diff --git a/nautobot_ssot_ipfabric/diffsync/adapter_ipfabric.py b/nautobot_ssot_ipfabric/diffsync/adapter_ipfabric.py
index 30d1533..261854c 100644
--- a/nautobot_ssot_ipfabric/diffsync/adapter_ipfabric.py
+++ b/nautobot_ssot_ipfabric/diffsync/adapter_ipfabric.py
@@ -68,8 +68,9 @@ def load_device_interfaces(self, device_model, interfaces, device_primary_ip):
type=DEFAULT_INTERFACE_TYPE,
mgmt_only=iface.get("mgmt_only", False),
ip_address=ip_address,
+ # TODO: why is only IPv4? and why /32?
subnet_mask="255.255.255.255",
- ip_is_primary=ip_address == device_primary_ip,
+ ip_is_primary=ip_address is not None and ip_address == device_primary_ip,
status="Active",
)
self.add(interface)
diff --git a/nautobot_ssot_ipfabric/diffsync/adapter_nautobot.py b/nautobot_ssot_ipfabric/diffsync/adapter_nautobot.py
index b8ac0c7..6dd1473 100644
--- a/nautobot_ssot_ipfabric/diffsync/adapter_nautobot.py
+++ b/nautobot_ssot_ipfabric/diffsync/adapter_nautobot.py
@@ -82,8 +82,12 @@ def sync_complete(self, source: DiffSync, *args, **kwargs):
def load_interfaces(self, device_record: Device, diffsync_device):
"""Import a single Nautobot Interface object as a DiffSync Interface model."""
- # Get MGMT IP
- mgmt_int_qset = device_record.interfaces.filter(mgmt_only=True)
+ device_primary_ip = None
+ if device_record.primary_ip4:
+ device_primary_ip = device_record.primary_ip4
+ elif device_record.primary_ip6:
+ device_primary_ip = device_record.primary_ip6
+
for interface_record in device_record.interfaces.all():
interface = self.interface(
diffsync=self,
@@ -100,9 +104,9 @@ def load_interfaces(self, device_record: Device, diffsync_device):
type=DEFAULT_INTERFACE_TYPE,
mgmt_only=interface_record.mgmt_only if interface_record.mgmt_only else False,
pk=interface_record.pk,
- ip_is_primary=bool(
- any(interface for interface in mgmt_int_qset if interface.name == interface_record.name)
- ),
+ ip_is_primary=interface_record.ip_addresses.first() == device_primary_ip
+ if device_primary_ip
+ else False,
ip_address=str(interface_record.ip_addresses.first().host)
if interface_record.ip_addresses.first()
else None,
diff --git a/nautobot_ssot_ipfabric/diffsync/diffsync_models.py b/nautobot_ssot_ipfabric/diffsync/diffsync_models.py
index 75d094f..f23d896 100644
--- a/nautobot_ssot_ipfabric/diffsync/diffsync_models.py
+++ b/nautobot_ssot_ipfabric/diffsync/diffsync_models.py
@@ -83,7 +83,7 @@ def safe_delete(self, nautobot_object: Any, safe_delete_status: Optional[str] =
if update:
tonb_nbutils.tag_object(nautobot_object=nautobot_object, custom_field="ssot-synced-from-ipfabric")
else:
- self.diffsync.job.log_warning(
+ self.diffsync.job.log_debug(
message=f"{nautobot_object} has previously been tagged with `ssot-safe-delete`. Skipping..."
)
@@ -118,7 +118,7 @@ def delete(self) -> Optional["DiffSyncModel"]:
site_object,
SAFE_DELETE_SITE_STATUS,
)
- return self
+ return super().delete()
def update(self, attrs):
"""Update Site Object in Nautobot."""
@@ -215,7 +215,7 @@ def delete(self) -> Optional["DiffSyncModel"]:
device_object,
SAFE_DELETE_DEVICE_STATUS,
)
- return self
+ return super().delete()
except NautobotDevice.DoesNotExist:
self.diffsync.job.log_warning(f"Unable to match device by name, {self.name}")
@@ -271,7 +271,7 @@ class Interface(DiffSyncExtras):
"mgmt_only",
"ip_address",
"subnet_mask",
- # "ip_is_primary",
+ "ip_is_primary",
"status",
)
@@ -314,8 +314,10 @@ def create(cls, diffsync, ids, attrs):
if attrs.get("ip_is_primary"):
if ip_address_obj.family == 4:
device_obj.primary_ip4 = ip_address_obj
+ device_obj.save()
if ip_address_obj.family == 6:
device_obj.primary_ip6 = ip_address_obj
+ device_obj.save()
interface_obj.save()
return super().create(ids=ids, diffsync=diffsync, attrs=attrs)
@@ -335,11 +337,11 @@ def delete(self) -> Optional["DiffSyncModel"]:
self.safe_delete(
interface,
)
- return self
+ return super().delete()
except NautobotDevice.DoesNotExist:
self.diffsync.job.log_warning(f"Unable to match device by name, {self.name}")
- def update(self, attrs):
+ def update(self, attrs): # pylint: disable=too-many-branches
"""Update Interface object in Nautobot."""
try:
ssot_tag, _ = Tag.objects.get_or_create(name="SSoT Synced from IPFabric")
@@ -372,6 +374,16 @@ def update(self, attrs):
object_pk=interface,
)
interface.ip_addresses.add(ip_address_obj)
+ if attrs.get("ip_is_primary"):
+ interface_obj = interface.ip_addresses.first()
+ if interface_obj:
+ if interface_obj.family == 4:
+ device.primary_ip4 = interface_obj
+ device.save()
+ if interface_obj.family == 6:
+ device.primary_ip6 = interface_obj
+ device.save()
+ interface.save()
tonb_nbutils.tag_object(nautobot_object=interface, custom_field="ssot-synced-from-ipfabric")
return super().update(attrs)
@@ -418,7 +430,7 @@ def delete(self) -> Optional["DiffSyncModel"]:
vlan,
SAFE_DELETE_VLAN_STATUS,
)
- return self
+ return super().delete()
def update(self, attrs):
"""Update VLAN object in Nautobot."""
diff --git a/nautobot_ssot_ipfabric/template_content.py b/nautobot_ssot_ipfabric/template_content.py
index 52696e6..9bb4b90 100644
--- a/nautobot_ssot_ipfabric/template_content.py
+++ b/nautobot_ssot_ipfabric/template_content.py
@@ -1,4 +1,4 @@
-"""Testing."""
+"""Template Content for other models."""
from nautobot.extras.plugins import PluginTemplateExtension
@@ -12,9 +12,6 @@ def full_width_page(self):
"""Implement cool topology from IPFabric based on site."""
return self.render(
"nautobot_ssot_ipfabric/inc/diagram.html",
- extra_context={
- "ipfabric_site": "{{ settings.PLUGINS_CONFIG.nautobot_ssot_ipfabric.ipfabric_host }}/graph?urls=domains%3Fad%3DvSite%252F55467784%2Btransit%3Fad%3DvSite%252F55467784"
- },
)
diff --git a/nautobot_ssot_ipfabric/templates/nautobot_ssot_ipfabric/inc/diagram.html b/nautobot_ssot_ipfabric/templates/nautobot_ssot_ipfabric/inc/diagram.html
index f461f11..018e8ac 100644
--- a/nautobot_ssot_ipfabric/templates/nautobot_ssot_ipfabric/inc/diagram.html
+++ b/nautobot_ssot_ipfabric/templates/nautobot_ssot_ipfabric/inc/diagram.html
@@ -5,7 +5,7 @@
IPFabric Site Diagram
-
+
{% endblock %}
diff --git a/poetry.lock b/poetry.lock
index 83709bf..1ba98af 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1095,6 +1095,19 @@ pytz = ">=2022.1,<2023.0"
[package.extras]
examples = ["openpyxl (>=3.0.9,<4.0.0)", "pandas (==1.3.0)", "tabulate (>=0.8.9,<0.9.0)"]
+[[package]]
+name = "ipfabric-diagrams"
+version = "1.2.7"
+description = "Python package for interacting with IP Fabric Diagrams"
+category = "dev"
+optional = false
+python-versions = ">=3.7.1,<4.0.0"
+
+[package.dependencies]
+ipfabric = ">=0,<1"
+pydantic = ">=1.8.2,<2.0.0"
+typing-extensions = ">=4.1.1,<5.0.0"
+
[[package]]
name = "ipython"
version = "7.33.0"
@@ -1394,12 +1407,12 @@ social-auth-app-django = ">=5.0.0,<5.1.0"
svgwrite = ">=1.4.1,<1.5.0"
[package.extras]
-all = ["django-auth-ldap (>=4.0.0,<4.1.0)", "django-storages (>=1.12.3,<1.13.0)", "mysqlclient (>=2.1.0,<2.2.0)", "napalm (>=3.3.1,<3.4.0)", "social-auth-core[openidconnect,saml] (>=4.2.0,<4.3.0)"]
+all = ["django-auth-ldap (>=4.0.0,<4.1.0)", "django-storages (>=1.12.3,<1.13.0)", "mysqlclient (>=2.1.0,<2.2.0)", "napalm (>=3.3.1,<3.4.0)", "social-auth-core[saml,openidconnect] (>=4.2.0,<4.3.0)"]
ldap = ["django-auth-ldap (>=4.0.0,<4.1.0)"]
remote_storage = ["django-storages (>=1.12.3,<1.13.0)"]
mysql = ["mysqlclient (>=2.1.0,<2.2.0)"]
napalm = ["napalm (>=3.3.1,<3.4.0)"]
-sso = ["social-auth-core[openidconnect,saml] (>=4.2.0,<4.3.0)"]
+sso = ["social-auth-core[saml,openidconnect] (>=4.2.0,<4.3.0)"]
[[package]]
name = "nautobot-capacity-metrics"
@@ -1431,13 +1444,15 @@ webexteamssdk = ">=1.3,<2.0"
[[package]]
name = "nautobot-chatops-ipfabric"
-version = "1.1.1"
-description = "IPFabric"
+version = "1.1.2"
+description = "Nautobot Plugin Chatops IPFabric"
category = "dev"
optional = false
-python-versions = ">=3.6.2,<4.0.0"
+python-versions = ">=3.7.1,<4.0.0"
[package.dependencies]
+ipfabric = ">=0,<1"
+ipfabric-diagrams = ">=1.2.7,<2.0.0"
nautobot-chatops = ">=1.1.0,<2.0.0"
netutils = ">=1.0.0,<2.0.0"
@@ -1706,7 +1721,7 @@ python-versions = ">=3.6"
[[package]]
name = "pyjwt"
-version = "2.3.0"
+version = "2.4.0"
description = "JSON Web Token implementation in Python"
category = "main"
optional = false
@@ -2928,6 +2943,10 @@ ipfabric = [
{file = "ipfabric-0.10.8-py3-none-any.whl", hash = "sha256:ed11216d25068287195fdb7259c70b4c99b85112f0be0f3e59a9b49853f18960"},
{file = "ipfabric-0.10.8.tar.gz", hash = "sha256:fdffd9185764adfe338d83cb0a038631a9063de5bd137a94f6c49f11f3385433"},
]
+ipfabric-diagrams = [
+ {file = "ipfabric-diagrams-1.2.7.tar.gz", hash = "sha256:e6c1a005270ae170b07937de2f8b4d203f9ddf4b6cad39d5e2adf07169eb6f82"},
+ {file = "ipfabric_diagrams-1.2.7-py3-none-any.whl", hash = "sha256:1efb25c951fbb5ef4d045408c807d3c539e9fcaa6ef9da6829688438c6b34965"},
+]
ipython = [
{file = "ipython-7.33.0-py3-none-any.whl", hash = "sha256:916a3126896e4fd78dd4d9cf3e21586e7fd93bae3f1cd751588b75524b64bf94"},
{file = "ipython-7.33.0.tar.gz", hash = "sha256:bcffb865a83b081620301ba0ec4d95084454f26b91d6d66b475bff3dfb0218d4"},
@@ -3078,8 +3097,8 @@ nautobot-chatops = [
{file = "nautobot_chatops-1.8.0-py3-none-any.whl", hash = "sha256:87a10b9bcb77a71b4eb8ab64a41afcf6c242c06e4828ea8a81cbc5d133ca5209"},
]
nautobot-chatops-ipfabric = [
- {file = "nautobot-chatops-ipfabric-1.1.1.tar.gz", hash = "sha256:3d1fee420a6b369c5ffa3b36e12fd7aa97862522d71978692de5df1e7840d7c4"},
- {file = "nautobot_chatops_ipfabric-1.1.1-py3-none-any.whl", hash = "sha256:57adf3035dce2b286c309daf6675f11fdf61d86c8b0969c443a1800e8b175f3b"},
+ {file = "nautobot-chatops-ipfabric-1.1.2.tar.gz", hash = "sha256:8242ad2aff6b823a54bdd573a39f4175a9443502fb0c17d1cc69241c738efa30"},
+ {file = "nautobot_chatops_ipfabric-1.1.2-py3-none-any.whl", hash = "sha256:683595da778e626cbd02783c274a3ca37c6e7169d2d0100c903523a40d3d665d"},
]
nautobot-ssot = [
{file = "nautobot-ssot-1.1.1.tar.gz", hash = "sha256:11794d18b39d686df88cdabc6f5d58e002ea0a7bd6ff6fbcf567dc1f4fc3a1c6"},
@@ -3333,8 +3352,8 @@ pygments = [
{file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"},
]
pyjwt = [
- {file = "PyJWT-2.3.0-py3-none-any.whl", hash = "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"},
- {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"},
+ {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"},
+ {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"},
]
pylint = [
{file = "pylint-2.13.8-py3-none-any.whl", hash = "sha256:f87e863a0b08f64b5230e7e779bcb75276346995737b2c0dc2793070487b1ff6"},
@@ -3402,36 +3421,26 @@ pyuwsgi = [
{file = "pyuwsgi-2.0.20-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd09a7328558728f6e38f77609f44d16f18d8b4dc5f8b8776f657c8892b70337"},
{file = "pyuwsgi-2.0.20-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210ad768b8af02bbfd3c0345a51c6d2c56a2333ac268d9a97ecf2d4209f78ef8"},
{file = "pyuwsgi-2.0.20-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e33111308a79dbd202094963fd3a537dab30854e375d9be018f642fcd359e03d"},
- {file = "pyuwsgi-2.0.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0306c3ca6f781ed7409774e44a2a90217824d3efb44e075a1f39a78a54ffe7d"},
- {file = "pyuwsgi-2.0.20-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3eeea48fd965b68801618fc20eda2cb65dc2aeb4121955c9c422685f046311da"},
{file = "pyuwsgi-2.0.20-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:dd048b85abb90c79a34afbf787995ab2933cb2a8b210a6e064e5fca0a9bdf2d8"},
{file = "pyuwsgi-2.0.20-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f612a72437c2934e39393fb575fab791e919efc102a0aa1a27b5d9a301d462e9"},
{file = "pyuwsgi-2.0.20-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:78ac2d8b7d307232f8276cb8a45300211b0fae179c0494f2a3e3178c70693f81"},
{file = "pyuwsgi-2.0.20-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f84fc44bba77d05fa9d01189028501ff8e6a2d63db184ceea42085ce28196317"},
{file = "pyuwsgi-2.0.20-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:342c312949c2f494f5d9ac272965715483cb22ed0353c18abb1b4590769ef00f"},
- {file = "pyuwsgi-2.0.20-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5740b84a016a246c69edef0df11912560df9a45c2adf6e47701329a974e37a71"},
- {file = "pyuwsgi-2.0.20-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:82058f6b6656f12dbc66c963be2d7c0b977f481ddca5d4d3918e26def003b60d"},
{file = "pyuwsgi-2.0.20-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:dc99724df6d5613300d3357c4017cde840830ca132fe98f0a4feab9a6af48622"},
{file = "pyuwsgi-2.0.20-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:70096084ccfa18f058dfb3380aa10e80d48958ddfdb888b827f06aacb72f80b8"},
{file = "pyuwsgi-2.0.20-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e7a8576452635612c82f660e5be99ba42cdcdff142948f5c263b5278f2c17b0"},
{file = "pyuwsgi-2.0.20-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2844205e0095a29d3a6e9e23bd37bcf18d65e4e5ab23a14a45f5159c03a3b890"},
{file = "pyuwsgi-2.0.20-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e2c0d5dafb9faacc8ed5b662f9eacb22e723fbc3cb7152b2ebf09a92b8bd6c0d"},
- {file = "pyuwsgi-2.0.20-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087397457837c5fd653eda91c5d2c7948e06da589c786d26145bdcc397656bb2"},
- {file = "pyuwsgi-2.0.20-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:da24ddb7e3522d36b4cdc2dbf131141d559084862f515d37f9a4b7b5c8b538b1"},
{file = "pyuwsgi-2.0.20-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:99b0c5a87aa95dcbaca2ccb599d783f37461600e098881d4ec9796ba68e3ff8f"},
{file = "pyuwsgi-2.0.20-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:df08a05dda4a92da46bd56af755dac091b145815c3cf6dda1855e01e40d12a99"},
{file = "pyuwsgi-2.0.20-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7c8ac4b2f411d15222f53a96627b8fa79056b39606925f429f59a51668bd95ab"},
{file = "pyuwsgi-2.0.20-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f1494d00df440865b1ee269a350187766c9c364ba5f124eddb064f366c4b6d8a"},
{file = "pyuwsgi-2.0.20-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5ee8782932dbacdb4dd98714c3575cbbb88ba87d7bcb3149c828725ba048897"},
- {file = "pyuwsgi-2.0.20-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cdc4b32234b40fa2d515108a2f56a159896134ef16394f26dba764635142976"},
- {file = "pyuwsgi-2.0.20-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:300417d6669171a454da19991fc7f910b3975232dac5b2dbc359e26f1038624b"},
{file = "pyuwsgi-2.0.20-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:015a8d310503eb8c0028ac8f98c7df3b49bc937c7db137aaf149ca7fae64c777"},
{file = "pyuwsgi-2.0.20-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9fc3d256270adf24b87f1dff893f3bc59bd5ee20c4ebb5add25e944c36359e1e"},
{file = "pyuwsgi-2.0.20-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:052fe12d6a9ab9e9fc7814e40d2d28061aaea1a610069008d773e1d8a71feb11"},
{file = "pyuwsgi-2.0.20-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7d160c7bfa8f2974fc6b807a8fc080be0d130b1a4ad0b463c0320e707e6a6eb6"},
{file = "pyuwsgi-2.0.20-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7691ca470e541133c444b23f83c6f07ecca12f4771a49e0e3a04b05f4c80f2d3"},
- {file = "pyuwsgi-2.0.20-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c87fb1d56dd2c6f18b87b08496be326afb6cf57c6a059261b01ce99046d9147"},
- {file = "pyuwsgi-2.0.20-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8eb97cf51f58df05ec0dd74d83510172a2f5bcd8adc91382e24690a2abddc2f3"},
{file = "pyuwsgi-2.0.20-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a8fc4d52232f55df16e9cbf6faf4bf16910d15042229d5f8c717278fd4ea37a5"},
{file = "pyuwsgi-2.0.20-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1acedb1841aa0e60e1a7245ae483a5fcb30e39cf0cdfe3987e14de4746daf75b"},
{file = "pyuwsgi-2.0.20.tar.gz", hash = "sha256:8b0936a964511fa0e2ac2847c2435e95130e7c98619f06fe1f67320527576043"},
@@ -3504,10 +3513,6 @@ rq = [
{file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"},
]
"ruamel.yaml.clib" = [
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"},
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7"},
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win32.whl", hash = "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee"},
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de"},
{file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751"},
{file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527"},
{file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win32.whl", hash = "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5"},
diff --git a/pyproject.toml b/pyproject.toml
index f63c216..4be1746 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "nautobot-ssot-ipfabric"
-version = "0.9.5"
+version = "0.9.6"
description = "Nautobot SSoT IPFabric"
authors = ["Network to Code, LLC "]
license = "Apache-2.0"