Skip to content

Commit

Permalink
Merge pull request #510 from nautobot/release-v2.8.0
Browse files Browse the repository at this point in the history
Release v2.8.0
  • Loading branch information
jdrew82 authored Aug 21, 2024
2 parents 93a216f + 8f8fd4c commit 2610e89
Show file tree
Hide file tree
Showing 30 changed files with 861 additions and 219 deletions.
1 change: 0 additions & 1 deletion changes/484.housekeeping

This file was deleted.

7 changes: 7 additions & 0 deletions docs/admin/compatibility_matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,10 @@ While that last supported version will not be strictly enforced--via the max_ver
| 2.0.1 | 2.0.0 | 2.99.09 |
| 2.0.2 | 2.0.0 | 2.99.09 |
| 2.1.0 | 2.0.0 | 2.99.09 |
| 2.2.0 | 2.0.0 | 2.99.09 |
| 2.3.0 | 2.1.0 | 2.99.09 |
| 2.4.0 | 2.1.0 | 2.99.09 |
| 2.5.0 | 2.1.0 | 2.99.09 |
| 2.6.0 | 2.1.0 | 2.99.09 |
| 2.7.0 | 2.1.0 | 2.99.09 |
| 2.8.0 | 2.1.0 | 2.99.09 |
64 changes: 35 additions & 29 deletions docs/admin/integrations/infoblox_setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,42 +21,48 @@ To access integration configuration navigate to `Apps -> Installed Apps` and cli

Configuration instance contains the below settings:

| Setting | Default | Description |
| Name | N/A | Unique name of the configuration instance. |
| Description | N/A | Description of the configuration instance. |
| Infoblox Instance Config | N/A | External Integration object describing remote Infoblox instance. |
| Infoblox WAPI Version | v2.12 | The version of the Infoblox API. |
| Enabled for Sync Job | False | Allows this config to be used in the sync jobs. |
| Sync to Infoblox | False | Allows this config to be used in the job syncing from Nautobot to Infoblox. |
| Sync to Nautobot | True | Allows this config to be used in the job syncing from Infoblox to Nautobot. |
| Import IP Addresses | False | Import IP addresses from the source to the target system. |
| Import Networks | False | Import IP networks from the source to the target system. |
| Import VLAN Views | False | Import VLAN Views from the source to the target system. |
| Import VLANs | False | Import VLANs from the source to the target system. |
| Import IPv4 | True | Import IPv4 objects from the source to the target system. |
| Import IPv6 | False | Import IPv6 objects from the source to the target system. |
| Fixed address type | Do not create record | Selects type of Fixed Address to create in Infoblox for imported IP Addresses. |
| DNS record type | Do not create record | Selects the type of DNS record to create in Infoblox for imported IP Addresses. |
| Default object status | Active | Default Status to be assigned to imported objects. |
| Infoblox - deletable models | [] | Infoblox model types whose instances are allowed to be deleted during sync. |
| Nautobot - deletable models | [] | Nautobot model types whose instances are allowed to be deleted during sync. |
| Infoblox Sync Filters | `[{"network_view": "default"}]` | Filters control what data is loaded from the source and target systems and considered for sync. |
| Infoblox Network View to DNS Mapping | `{}`| Map specifying Infoblox DNS View for each Network View where DNS records need to be created.
| Extensible Attributes/Custom Fields to Ignore | `{"custom_fields": [], "extensible_attributes": []}` | Specifies Nautobot custom fields and Infoblox extensible attributes that are excluded from the sync. |
| Setting | Default | Description |
| --------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Name | N/A | Unique name of the configuration instance. |
| Description | N/A | Description of the configuration instance. |
| Infoblox Instance Config | N/A | External Integration object describing remote Infoblox instance. |
| Infoblox WAPI Version | v2.12 | The version of the Infoblox API. |
| Enabled for Sync Job | False | Allows this config to be used in the sync jobs. |
| Sync to Infoblox | False | Allows this config to be used in the job syncing from Nautobot to Infoblox. |
| Sync to Nautobot | True | Allows this config to be used in the job syncing from Infoblox to Nautobot. |
| Import IP Addresses | False | Import IP addresses from the source to the target system. |
| Import Networks | False | Import IP networks from the source to the target system. |
| Import VLAN Views | False | Import VLAN Views from the source to the target system. |
| Import VLANs | False | Import VLANs from the source to the target system. |
| Import IPv4 | True | Import IPv4 objects from the source to the target system. |
| Import IPv6 | False | Import IPv6 objects from the source to the target system. |
| Fixed address type | Do not create record | Selects type of Fixed Address to create in Infoblox for imported IP Addresses. |
| DNS record type | Do not create record | Selects the type of DNS record to create in Infoblox for imported IP Addresses. |
| Default object status | Active | Default Status to be assigned to imported objects. |
| Infoblox - deletable models | [] | Infoblox model types whose instances are allowed to be deleted during sync. |
| Nautobot - deletable models | [] | Nautobot model types whose instances are allowed to be deleted during sync. |
| Infoblox Sync Filters | `[{"network_view": "default"}]` | Filters control what data is loaded from the source and target systems and considered for sync. |
| Infoblox Network View to DNS Mapping | `{}` | Map specifying Infoblox DNS View for each Network View where DNS records need to be created. |
| Extensible Attributes/Custom Fields to Ignore | `{"custom_fields": [], "extensible_attributes": []}` | Specifies Nautobot custom fields and Infoblox extensible attributes that are excluded from the sync. |


Each Infoblox configuration must be linked to an External Integration describing the Infoblox instance. The following External Integration fields must be defined for integration to work correctly:

| Setting | Description |
| Remote URL | URL of the remote Infoblox instance to sync with. |
| Verify SSL | Toggle SSL verification when syncing data with Infoblox. |
| Setting | Description |
| ------------- | --------------------------------------------------------------------------------- |
| Remote URL | URL of the remote Infoblox instance to sync with. |
| Verify SSL | Toggle SSL verification when syncing data with Infoblox. |
| Secrets Group | Secrets Group defining credentials used when connecting to the Infoblox instance. |
| Timeout | How long HTTP requests to Infoblox should wait for a response before failing. |
| Timeout | How long HTTP requests to Infoblox should wait for a response before failing. |


The Secrets Group linked to the Infoblox External Integration must contain password and username secrets defined as per the below:

| Access Type | Secret Type |
| REST | Password |
| REST | Username |
| Access Type | Secret Type |
| ----------- | ----------- |
| REST | Password |
| REST | Username |



### Configuring Infoblox Sync Filters
Expand Down
15 changes: 15 additions & 0 deletions docs/admin/release_notes/version_2.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

## [v2.8.0 (2024-08-21)](https://github.com/nautobot/nautobot-app-ssot/releases/tag/v2.8.0)

### Added

- [#504](https://github.com/nautobot/nautobot-app-ssot/issues/504) - Added pagination to the `get_all_subnets` Infoblox client call.

### Documentation

- [#488](https://github.com/nautobot/nautobot-app-ssot/issues/488) - Fixed issue with Infoblox setup docs.

### Fixed

- [#491](https://github.com/nautobot/nautobot-app-ssot/issues/491) - Fixed tenant names and introduced tag for multisite.
- [#497](https://github.com/nautobot/nautobot-app-ssot/issues/497) - Fixed IPFabric test failures under Django 4.2.
3 changes: 3 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ nav:
- Device42: "user/integrations/device42.md"
- Infoblox: "user/integrations/infoblox.md"
- IPFabric: "user/integrations/ipfabric.md"
- Itential: "user/integrations/itential.md"
- ServiceNow: "user/integrations/servicenow.md"
- Modeling: "user/modeling.md"
- Performance: "user/performance.md"
Expand All @@ -126,12 +127,14 @@ nav:
- Device42: "admin/integrations/device42_setup.md"
- Infoblox: "admin/integrations/infoblox_setup.md"
- IPFabric: "admin/integrations/ipfabric_setup.md"
- Itential: "admin/integrations/itential_setup.md"
- ServiceNow: "admin/integrations/servicenow_setup.md"
- Upgrade: "admin/upgrade.md"
- Uninstall: "admin/uninstall.md"
- Compatibility Matrix: "admin/compatibility_matrix.md"
- Release Notes:
- "admin/release_notes/index.md"
- v2.8: "admin/release_notes/version_2.8.md"
- v2.7: "admin/release_notes/version_2.7.md"
- v2.6: "admin/release_notes/version_2.6.md"
- v2.5: "admin/release_notes/version_2.5.md"
Expand Down
31 changes: 22 additions & 9 deletions nautobot_ssot/integrations/aci/diffsync/adapters/aci.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,16 @@ def load_tenants(self):
for _tenant in tenant_list:
if not _tenant["name"] in PLUGIN_CFG.get("ignore_tenants"):
tenant_name = f"{self.tenant_prefix}:{_tenant['name']}"
if ":mso" in _tenant.get("annotation").lower(): # pylint: disable=simplifiable-if-statement
_msite_tag = True
else:
_msite_tag = False
new_tenant = self.tenant(
name=tenant_name,
description=_tenant["description"],
comments=PLUGIN_CFG.get("comments", ""),
site_tag=self.site,
msite_tag=_msite_tag,
)
self.add(new_tenant)

Expand Down Expand Up @@ -210,15 +215,19 @@ def load_ipaddresses(self):
vrf_tenant = f"{self.tenant_prefix}:{bd_value['vrf_tenant']}"
else:
vrf_tenant = None
if bd_value.get("tenant") == "mgmt":
_namespace = "Global"
else:
_namespace = vrf_tenant or tenant_name
for subnet in bd_value["subnets"]:
prefix = ip_network(subnet[0], strict=False).with_prefixlen
self.load_subnet_as_prefix(
prefix=prefix,
namespace=tenant_name,
namespace=_namespace,
site=self.site,
vrf=bd_value["vrf"],
vrf_tenant=vrf_tenant,
tenant=tenant_name,
tenant=vrf_tenant or tenant_name,
)
new_ipaddress = self.ip_address(
address=subnet[0],
Expand All @@ -227,8 +236,8 @@ def load_ipaddresses(self):
description=f"ACI Bridge Domain: {bd_key}",
device=None,
interface=None,
tenant=tenant_name,
namespace=tenant_name,
tenant=vrf_tenant or tenant_name,
namespace=_namespace,
site=self.site,
site_tag=self.site,
)
Expand All @@ -241,7 +250,7 @@ def load_ipaddresses(self):
self.add(new_ipaddress)
else:
self.job.logger.warning(
"Duplicate DiffSync IPAddress Object found and has not been loaded.",
f"Duplicate DiffSync IPAddress Object found: {new_ipaddress.address} in Tenant {new_ipaddress.tenant} and has not been loaded.",
)

def load_prefixes(self):
Expand All @@ -255,15 +264,19 @@ def load_prefixes(self):
vrf_tenant = f"{self.tenant_prefix}:{bd_value['vrf_tenant']}"
else:
vrf_tenant = None
if tenant_name not in PLUGIN_CFG.get("ignore_tenants"):
if bd_value.get("tenant") == "mgmt":
_namespace = "Global"
else:
_namespace = vrf_tenant or tenant_name
if bd_value.get("tenant") not in PLUGIN_CFG.get("ignore_tenants"):
for subnet in bd_value["subnets"]:
new_prefix = self.prefix(
prefix=str(ip_network(subnet[0], strict=False)),
namespace=tenant_name,
namespace=_namespace,
status="Active",
site=self.site,
description=f"ACI Bridge Domain: {bd_key}",
tenant=tenant_name,
tenant=vrf_tenant or tenant_name,
vrf=bd_value["vrf"] if bd_value.get("vrf") != "" else None,
vrf_tenant=vrf_tenant,
site_tag=self.site,
Expand All @@ -282,7 +295,7 @@ def load_prefixes(self):
self.add(new_prefix)
else:
self.job.logger.warning(
"Duplicate DiffSync Prefix Object found and has not been loaded.",
f"Duplicate DiffSync Prefix Object found {new_prefix.prefix} in Namespace {new_prefix.namespace} and has not been loaded.",
)

def load_devicetypes(self):
Expand Down
6 changes: 5 additions & 1 deletion nautobot_ssot/integrations/aci/diffsync/adapters/nautobot.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ def load_tenants(self):
"""Method to load Tenants from Nautobot."""
for nbtenant in Tenant.objects.filter(tags=self.site_tag):
_tenant = self.tenant(
name=nbtenant.name, description=nbtenant.description, comments=nbtenant.comments, site_tag=self.site
name=nbtenant.name,
description=nbtenant.description,
comments=nbtenant.comments,
site_tag=self.site,
msite_tag=nbtenant.tags.filter(name="ACI_MULTISITE").exists(),
)
self.add(_tenant)

Expand Down
Loading

0 comments on commit 2610e89

Please sign in to comment.