Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync Main to Develop for 3.0.0 #514

Merged
merged 156 commits into from
Aug 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
04bf665
Update Diffsync to 2.0.0 and perform Linting
mattmiller87 Apr 17, 2024
6aeb07e
fix: 🐛 Replace all instances of diffsync attributes with adapter.
jdrew82 May 14, 2024
caf3b26
fix: 🐛 Update keyword to auth from token for IPFClient.
jdrew82 May 14, 2024
5fd835d
test: 🐛 Address complaints from pylint about possible undefined vars.
jdrew82 May 14, 2024
5d1b91c
build: 🏗️ Remove version from compose files as no longer required.
jdrew82 May 14, 2024
bcaf3a3
build: ⬆️ Rebuild and update dependencies for lockfile.
jdrew82 May 14, 2024
144ba6d
fix: 🐛 Correct instances of diffsync for adapter that were missed.
jdrew82 May 15, 2024
c00c267
revert: ⏪️ Rollback patch change to correct folder name to be diffsync.
jdrew82 May 15, 2024
e4b3160
fix: 🐛 Update VLAN Location assignment to use location attribute.
jdrew82 May 15, 2024
0241728
test: ✅ Update tests to add missing mocks and update patch to enable …
jdrew82 May 15, 2024
2a375a4
revert: ⏪️ Revert removal of tagging prefixes so prefixes are indeed …
jdrew82 May 15, 2024
0a3e96a
fix: 🐛 Update all instances of diffsync to adapter for contrib models…
jdrew82 May 16, 2024
1c5799d
Fixing AttributeError: 'ModelPrivateAttr' object has no attribute '_m…
mattmiller87 May 16, 2024
219ec79
test: ✅ Fix tests to have correct expected value for ranges.
jdrew82 May 17, 2024
ee4aa62
fix: 🐛 Update example Jobs to specify default None for Optional attrs.
jdrew82 May 21, 2024
a43c52c
fix outstanding issues
Kircheneer May 21, 2024
c9b3c45
fix: 🐛 Add missing job to path for logger
jdrew82 May 21, 2024
819775b
docs: 📝 Add documentation on upgrading SSoT Apps to 3.x
jdrew82 May 21, 2024
fabd6ef
feat: ✨ Update Itential integration for DiffSync 2.0.
jdrew82 Aug 2, 2024
4ed6933
fix: 🐛 Set missing defaults for Optional class attributes on DiffSync…
jdrew82 Aug 2, 2024
ddc2f51
fix: 🐛 Set default values for vars to address possibly being used bef…
jdrew82 Aug 2, 2024
21acc1c
test: ✅ Fix test to address default value for ranges attribute.
jdrew82 Aug 2, 2024
d828637
style: 🚨 Fix import sorting
jdrew82 Aug 13, 2024
062e776
test: ✅ Fix pylint complaint
jdrew82 Aug 13, 2024
aed014e
build: ⬆️ Update project dependencies and lockfile
jdrew82 Aug 13, 2024
abcda55
build: Change ruff output_format to concise
jdrew82 Aug 13, 2024
67cfb03
Update Diffsync to 2.0.0 and perform Linting
mattmiller87 Apr 17, 2024
5006b52
fix: 🐛 Replace all instances of diffsync attributes with adapter.
jdrew82 May 14, 2024
e933f8f
build: ⬆️ Rebuild and update dependencies for lockfile.
jdrew82 May 14, 2024
2deef00
refactor: 🔥 Remove tenant_prefix from NautobotAdapter as it's unused.
jdrew82 Jun 21, 2024
86e06ab
feat: ✨ Update ACI integration to use Controller model.
jdrew82 Jun 21, 2024
7c3e55a
build: ⬆️ Make Nautobot 2.2.0 minimum supported version.
jdrew82 Jun 21, 2024
d131757
fix: 🔥 Remove unused import
jdrew82 Jun 21, 2024
d2525fe
feat: ✨ Update Device42 integration to use ExternalIntegration.
jdrew82 Jun 21, 2024
5baeea0
refactor: 🔥 Remove aci_apics default_setting as no longer needed.
jdrew82 Jun 21, 2024
89a9b36
docs: 📝 Update ACI docs to reference Controller/ExternalIntegration u…
jdrew82 Jun 21, 2024
14c7790
feat: ✨ Update IPFabric integration to use Controller object.
jdrew82 Jun 21, 2024
a57f06e
build: 🔥 Remove unused config settings for ACI integration.
jdrew82 Jun 21, 2024
f7b857c
build: 🔥 Remove IPFabric settings that are no longer used.
jdrew82 Jun 21, 2024
f5e646d
fix: 🐛 Correct default booleans to be strings.
jdrew82 Jun 21, 2024
69ee831
refactor: ♻️ Update Nautobot Host to be pulled from env var directly.
jdrew82 Jun 21, 2024
01dd23e
refactor: 🔥 Remove unused env vars
jdrew82 Jun 21, 2024
cdeec0f
docs: 📝 Update IPFabric documentation about using Controller/External…
jdrew82 Jun 21, 2024
27b62ce
feat: ✨ Add support for ControllerManagedDeviceGroup in ACI integration.
jdrew82 Jul 26, 2024
a2a9aae
refactor: ♻️ Move code to get username/password from HTTP SecretsGrou…
jdrew82 Jul 26, 2024
7d7c2a0
feat: ✨ Update SSoT ChatOps command to use or request a Controller fo…
jdrew82 Jul 26, 2024
16606e4
test: 🚨 Address various linter complaints.
jdrew82 Jul 26, 2024
fe6df71
refactor: ♻️ Move ControllerManagedDeviceGroup validation to utility …
jdrew82 Jul 30, 2024
d4269c2
style: Add help text to device_site Job var.
jdrew82 Jul 30, 2024
bea5550
fix: 🐛 Correct remote_url and verify_ssl to come from ExternalIntegra…
jdrew82 Jul 30, 2024
85240ef
fix: 🐛 Correct errors caused by rebase
jdrew82 Aug 13, 2024
6b3f022
fix: 🐛 Fix ACI signals to only try to iterate through APICs if they'r…
jdrew82 Aug 13, 2024
0046ff5
fix: 🐛 Correct ObjectVar to use description instead of help_text.
jdrew82 Aug 13, 2024
2c945d4
fix: 🐛 Move client initialization to dunder init as init_ipf_client n…
jdrew82 Aug 13, 2024
bacc9b2
style: 🚨 Sort imports
jdrew82 Aug 13, 2024
e063a97
style: Change ordering of Job vars so Controller is first selection.
jdrew82 Aug 13, 2024
17d3654
fix: 🐛 Add check for existing ControllerManagedDeviceGroup on selecte…
jdrew82 Aug 13, 2024
95350fa
feat: ✨ Add controller_group attribute to Device DiffSyncModel to con…
jdrew82 Aug 13, 2024
62011e8
style: 🚨 Sort imports with ruff
jdrew82 Aug 13, 2024
d612704
style: 🚨 Formatting for black
jdrew82 Aug 14, 2024
95be184
revert: ⏪️ Revert IPFabric integration changes for adding Controller.
jdrew82 Aug 14, 2024
1079193
build: ⬆️ Update project dependencies lockfile
jdrew82 Aug 14, 2024
2e3fea2
test: 🚨 Remove unused import
jdrew82 Aug 14, 2024
460f208
build: ⏪️ Revert minimum Nautobot to 2.1.0
jdrew82 Aug 14, 2024
ceead74
build: 📌 Pin django-debug-toolbar to version less than 4.4
jdrew82 Aug 14, 2024
a0fc330
feat: ✨ Add checks for ExternalIntegration on Controller and SecretsG…
jdrew82 Aug 14, 2024
21faa15
fix: 🐛 Add default value for tenant_prefix in case not defined in ext…
jdrew82 Aug 14, 2024
3ba85eb
fix: 🐛 Correct var to be client.site instead of using dict key.
jdrew82 Aug 14, 2024
44fa434
fix: 🐛 Remove duplicate lines from rebase.
jdrew82 Aug 19, 2024
3ca7999
docs: 📝 Update Device42 Documentation with screenshots of ExternalInt…
jdrew82 Aug 19, 2024
8e7dc42
docs: ⏪️ Revert documentation changes for IPFabric integration.
jdrew82 Aug 19, 2024
25245fe
revert: ⏪️ Revert any changes to ChatOps command for Controller in IP…
jdrew82 Aug 19, 2024
2759c16
fix: 🐛 Correct NB minimum version to 2.1.0 to match pyproject.toml an…
jdrew82 Aug 19, 2024
48919ff
fix: ⏪️ Remove missed portions of container additions to IPFabric wor…
jdrew82 Aug 20, 2024
83c23eb
test: ✅ Adjust variable names to not conflict with vars in function a…
jdrew82 Aug 20, 2024
00ba1f9
Update Diffsync to 2.0.0 and perform Linting
mattmiller87 Apr 17, 2024
799fff7
test: ✅ Fix tests to have correct expected value for ranges.
jdrew82 May 17, 2024
f496fb1
feat: ✨ Add DiffSync Adapter, Models, and utility methods for DNA Cen…
jdrew82 May 2, 2024
c71e0ed
test: ✅ Add tests for DNA Center integration.
jdrew82 May 2, 2024
a53f206
feat: ✨ Add original project name to conflicting apps list.
jdrew82 May 2, 2024
974cea2
fix: 🐛 Correct tests folder for dna_center and correct imports for ne…
jdrew82 May 3, 2024
e38244f
build: ➕ Add dnacentersdk dependency for DNA Center integration.
jdrew82 May 3, 2024
b7bab8c
fix: 🐛 Fix imports for new pathing
jdrew82 May 3, 2024
53ebd44
build: 🏗️ Add settings for DNA Center integration.
jdrew82 May 3, 2024
2781bf1
docs: 📝 Add changelog fragment
jdrew82 May 6, 2024
289c1b5
build: 🏗️ Add default settings to dunder init for main SSoT project.
jdrew82 May 6, 2024
8d85888
build: 🏗️ Correct examples in nautobot_config to use lowercased strin…
jdrew82 May 6, 2024
4ed93e9
build: 🏗️ Add default env vars in development.env
jdrew82 May 6, 2024
4e25e80
fix: 🐛 Add missing register_signals function from DNAC signals file.
jdrew82 May 6, 2024
579a675
fix: 🐛 Correct import paths
jdrew82 May 7, 2024
d1e7eaa
fix: 🐛 Correct settings to use new dna_center prepend and look at nau…
jdrew82 May 7, 2024
58d0bd5
docs: 📝 Update docstring to use integration name.
jdrew82 May 7, 2024
d5b55bc
test: 🐛 Correct paths for fixtures
jdrew82 May 7, 2024
80fb378
test: ✅ Correct patches and overridden settings for DNAC tests.
jdrew82 May 7, 2024
4a0b30f
fix: 🐛 Correct setting key for updating locations.
jdrew82 May 8, 2024
c3eb613
test: ✅ Fix tests to add LocationTypes and CustomFields that are crea…
jdrew82 May 8, 2024
e5eba9c
perf: ♻️ Redo Location filter to use location_type_map for the locati…
jdrew82 May 10, 2024
09f9b64
fix: 🐛 Add check for extra_config being defined and port key existing…
jdrew82 May 10, 2024
53fe5b6
fix: 🐛 Update region_map to use parent to allow for nested Locations …
jdrew82 May 10, 2024
e52fd88
fix: 🚨 Update list() with []
jdrew82 May 10, 2024
e3c3b25
test: ✅ Update test fixtures with recent example with Locations with …
jdrew82 May 10, 2024
f501158
build: ⬆️ Update project dependency lockfile.
jdrew82 May 10, 2024
82d0e15
test: ✅ Update fixtures for expected areas, buildings, and floors and…
jdrew82 May 10, 2024
4783067
test: ✅ Update test fixtures to include all locations returned in loc…
jdrew82 May 13, 2024
ab59a32
test: ✅ Update test to build expected areas list and fix logger asser…
jdrew82 May 13, 2024
8690dd1
test: ✅ Update test fixture to use updated location examples.
jdrew82 May 13, 2024
840d37a
test: ✅ Fix logger assertion for latest location data.
jdrew82 May 13, 2024
e1b5c5e
test: ✅ Fix test_load_buildings_duplicate to handle additional buildi…
jdrew82 May 13, 2024
dd869c7
test: ✅ Fix test_load_areas_wo_global to build expected areas with li…
jdrew82 May 13, 2024
e76d4da
test: ✅ Update test_load_buildings_w_global to build expected buildin…
jdrew82 May 13, 2024
32fcb0b
test: ✅ Fix test_load_floors method to update expected floors.
jdrew82 May 13, 2024
b61b16d
test: ✅ Fix test_load_buildings_with_validation_error to only use las…
jdrew82 May 13, 2024
7867ab4
test: ✅ Fix test_load_buildings_wo_global to generate expected buildi…
jdrew82 May 13, 2024
8a8e645
fix: ✅ Fix test fixture parent for Forschungszentrum should be null w…
jdrew82 May 13, 2024
65d907b
test: ✅ Update test_load_areas_wo_global to use fixture with Global m…
jdrew82 May 13, 2024
bf62311
test: ✅ Fix tests by sorting lists in assertions.
jdrew82 May 13, 2024
924bf0b
fix: 🐛 Fix assignment of parent in area creation.
jdrew82 May 13, 2024
4a33ce8
test: ✅ Fix model tests to address changes to Area DiffSync model.
jdrew82 May 13, 2024
ffe3acd
fix: 🐛 Update DNAC integration for DiffSync 2.0 changes.
jdrew82 May 21, 2024
0bc69e4
refactor: ♻️ Move DiffSyncModelFlag assignment to be done in load() m…
jdrew82 May 21, 2024
6386422
fix: 🐛 Replace deprecated update_forward_refs() with model_rebuild()
jdrew82 May 21, 2024
fdcd6c6
docs: 📝 Update logger setting to use full setting name.
jdrew82 May 21, 2024
3baf7b6
fix: 🐛 Check that site has parent before checking for its parent.
jdrew82 May 21, 2024
8c08bff
feat: ✨ Update Job to use Controller instead of ExternalIntegration.
jdrew82 May 21, 2024
a958e98
docs: 📝 Add initial documentation for DNA Center integration.
jdrew82 May 22, 2024
66ad2ab
feat: ✨ Add controller_group attribute to Device DiffSync model to li…
jdrew82 Jun 28, 2024
f6be933
refactor: 🚚 Update CustomField key from ssot_last_synchronized to las…
jdrew82 Jul 9, 2024
dd06351
fix: 🔥 Remove Device ContentType from Region LocationType as was done…
jdrew82 Jul 9, 2024
a927554
refactor: 🧑‍💻 Move logging message behind debug toggle.
jdrew82 Jul 9, 2024
13b3595
fix: 🐛 Change tenant passed to the one specified in Job form.
jdrew82 Jul 9, 2024
60cba84
feat: ✨ Add controller_group to Device for tracking all imported Devi…
jdrew82 Jul 9, 2024
6a12d64
test: ✅ Update tests to include Controller and ControllerDeviceManage…
jdrew82 Jul 9, 2024
d2f4592
docs: 📝 Update docs with links to Nautobot core documentation regardi…
jdrew82 Jul 9, 2024
95c45dd
build: ⬆️ Update netutils to 1.9.0 for DNAC mapping
jdrew82 Jul 10, 2024
630c443
build: ⬆️ Update dnacentersdk and make it optional
jdrew82 Jul 10, 2024
df09cf2
refactor: ♻️ Replace DNAC_PLATFORM_MAPPER with DNA_CENTER_LIB_MAPPER …
jdrew82 Jul 10, 2024
dbea854
perf: ♻️ Refactor functions to be a lil more performant
jdrew82 Jul 10, 2024
35d1cad
perf: ♻️ Refactor queryt o use select_related to minimize queries.
jdrew82 Jul 10, 2024
54ef723
fix: 🐛 Correct mistakes caused by rebase and add missing dnacentersdk…
jdrew82 Aug 14, 2024
02a3dd9
build: 📌 Correct dnacentersdk to be optional dependency.
jdrew82 Aug 19, 2024
d7c67f4
build: ⬆️ Redo lockfile affected by rebase.
jdrew82 Aug 20, 2024
99ed0a9
build: 📌 Update mkdocstrings and mkdocstrings-python to be *.
jdrew82 Aug 20, 2024
6c9c626
build: 📌 Add netutils to dna_center group as it's required for mapper.
jdrew82 Aug 20, 2024
b88a8f9
fix: 🐛 Update of site parent to use region_map correctly.
jdrew82 Aug 21, 2024
e6b90e1
style: 🚨 Sort imports for linter
jdrew82 Aug 21, 2024
614047c
fix: 🐛 Redo loading of areas to allow for possible duplicate area loads.
jdrew82 Aug 21, 2024
a6977f0
test: ✅ Update test to adjust for log statement change.
jdrew82 Aug 21, 2024
7433a9b
build: 🔥 Remove IPFabric ChatOps command and ChatOps dependency as it…
jdrew82 Aug 21, 2024
3677e85
docs: 📝 Add changelog fragment
jdrew82 Aug 21, 2024
5d87274
build: Bump version to 3.0.0
jdrew82 Aug 22, 2024
89c1ad2
docs: 📝 Add release notes
jdrew82 Aug 22, 2024
546dc5a
docs: 📝 Update mkdocs to link to release notes
jdrew82 Aug 22, 2024
0048b48
docs: 📝 Update compatibility matrix
jdrew82 Aug 22, 2024
990863a
fix: 🐛 Correct errors from rebasing
jdrew82 Aug 22, 2024
8359443
docs: 📝 Fix release notes
jdrew82 Aug 22, 2024
0dcc02d
Merge pull request #512 from nautobot/release-v3.0.0
jdrew82 Aug 22, 2024
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
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ This Nautobot application framework includes the following integrations:
- Cisco ACI
- Arista CloudVision
- Device42
- Cisco DNA Center
- Infoblox
- IPFabric
- Itential
Expand Down Expand Up @@ -79,6 +80,7 @@ The SSoT framework includes a number of integrations with external Systems of Re
* Cisco ACI
* Arista CloudVision
* Device42
* Cisco DNA Center
* Infoblox
* Itential
* ServiceNow
Expand Down Expand Up @@ -119,6 +121,9 @@ This project includes code originally written in separate Nautobot apps, which h
- [nautobot-plugin-ssot-device42](https://github.com/nautobot/nautobot-plugin-ssot-device42):
Thanks
[@jdrew82](https://github.com/jdrew82)
- [nautobot-plugin-ssot-dna-center](https://github.com/nautobot/nautobot-plugin-ssot-dna-center):
Thanks
[@jdrew82](https://github.com/jdrew82)
- [nautobot-plugin-ssot-infoblox](https://github.com/nautobot/nautobot-plugin-ssot-infoblox):
Thanks
[@FragmentedPacket](https://github.com/FragmentedPacket),
Expand Down
7 changes: 6 additions & 1 deletion development/development.env
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ NAUTOBOT_SSOT_ACI_TAG_DOWN_COLOR="FF3333"
NAUTOBOT_SSOT_ACI_MANUFACTURER_NAME="Cisco"
NAUTOBOT_SSOT_ACI_IGNORE_TENANTS="[mgmt,infra]"
NAUTOBOT_SSOT_ACI_COMMENTS="Created by ACI SSoT Integration"
NAUTOBOT_SSOT_ACI_SITE="Data Center"

NAUTOBOT_SSOT_ENABLE_ARISTACV="False"
NAUTOBOT_ARISTACV_CONTROLLER_SITE=""
Expand All @@ -74,6 +73,12 @@ NAUTOBOT_SSOT_DEVICE42_HOST=""
NAUTOBOT_SSOT_DEVICE42_USERNAME=""
NAUTOBOT_SSOT_DEVICE42_PASSWORD=""

NAUTOBOT_SSOT_ENABLE_DNA_CENTER="False"
NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_GLOBAL="True"
NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_MERAKIS="False"
NAUTOBOT_DNAC_SSOT_DNA_CENTER_UPDATE_LOCATIONS="True"
NAUTOBOT_DNAC_SSOT_DNA_CENTER_SHOW_FAILURES="True"

NAUTOBOT_SSOT_ENABLE_INFOBLOX="False"
NAUTOBOT_SSOT_INFOBLOX_DEFAULT_STATUS="Active"
NAUTOBOT_SSOT_INFOBLOX_ENABLE_SYNC_TO_INFOBLOX="True"
Expand Down
1 change: 0 additions & 1 deletion development/docker-compose.base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ x-nautobot-base: &nautobot-base
- "creds.env"
tty: true

version: "3.8"
services:
nautobot:
depends_on:
Expand Down
1 change: 0 additions & 1 deletion development/docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
# any override will need to include these volumes to use them.
# see: https://github.com/docker/compose/issues/3729
---
version: "3.8"
services:
nautobot:
command: "nautobot-server runserver 0.0.0.0:8080"
Expand Down
2 changes: 0 additions & 2 deletions development/docker-compose.mysql.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
---
version: "3.8"

services:
nautobot:
environment:
Expand Down
2 changes: 0 additions & 2 deletions development/docker-compose.postgres.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
---
version: "3.8"

services:
nautobot:
environment:
Expand Down
1 change: 0 additions & 1 deletion development/docker-compose.redis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
---
version: "3.8"
services:
redis:
image: "redis:6-alpine"
Expand Down
46 changes: 19 additions & 27 deletions development/nautobot_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,25 +128,21 @@

# Enable installed Apps. Add the name of each App to the list.
PLUGINS = [
"nautobot_chatops",
# "nautobot_chatops",
"nautobot_device_lifecycle_mgmt",
"nautobot_ssot",
]

# Apps configuration settings. These settings are used by various Apps that the user may have installed.
# Each key in the dictionary is the name of an installed App and its value is a dictionary of settings.
PLUGINS_CONFIG = {
"nautobot_chatops": {
"enable_slack": True,
"slack_api_token": os.getenv("SLACK_API_TOKEN"),
"slack_signing_secret": os.getenv("SLACK_SIGNING_SECRET"),
"session_cache_timeout": 3600,
"ipfabric_api_token": os.getenv("IPFABRIC_API_TOKEN"),
"ipfabric_host": os.getenv("IPFABRIC_HOST"),
},
# "nautobot_chatops": {
# "enable_slack": True,
# "slack_api_token": os.getenv("SLACK_API_TOKEN"),
# "slack_signing_secret": os.getenv("SLACK_SIGNING_SECRET"),
# "session_cache_timeout": 3600,
# },
"nautobot_ssot": {
# URL and credentials should be configured as environment variables on the host system
"aci_apics": {x: os.environ[x] for x in os.environ if "APIC" in x},
# Tag which will be created and applied to all synchronized objects.
"aci_tag": os.getenv("NAUTOBOT_SSOT_ACI_TAG"),
"aci_tag_color": os.getenv("NAUTOBOT_SSOT_ACI_TAG_COLOR"),
Expand All @@ -161,23 +157,21 @@
"aci_ignore_tenants": os.getenv("NAUTOBOT_SSOT_ACI_IGNORE_TENANTS", "").split(","),
# The below value will appear in the Comments field on objects created in Nautobot
"aci_comments": os.getenv("NAUTOBOT_SSOT_ACI_COMMENTS"),
# Site to associate objects. Specify existing, or a new site with this name will be created.
"aci_site": os.getenv("NAUTOBOT_SSOT_ACI_SITE"),
"aristacv_apply_import_tag": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_TAG", False)),
"aristacv_apply_import_tag": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_TAG", "false")),
"aristacv_controller_site": os.getenv("NAUTOBOT_ARISTACV_CONTROLLER_SITE", ""),
"aristacv_create_controller": is_truthy(os.getenv("NAUTOBOT_ARISTACV_CREATE_CONTROLLER", False)),
"aristacv_create_controller": is_truthy(os.getenv("NAUTOBOT_ARISTACV_CREATE_CONTROLLER", "false")),
"aristacv_cvaas_url": os.getenv("NAUTOBOT_ARISTACV_CVAAS_URL", "www.arista.io:443"),
"aristacv_cvp_host": os.getenv("NAUTOBOT_ARISTACV_CVP_HOST", ""),
"aristacv_cvp_password": os.getenv("NAUTOBOT_ARISTACV_CVP_PASSWORD", ""),
"aristacv_cvp_port": os.getenv("NAUTOBOT_ARISTACV_CVP_PORT", "443"),
"aristacv_cvp_token": os.getenv("NAUTOBOT_ARISTACV_CVP_TOKEN", ""),
"aristacv_cvp_user": os.getenv("NAUTOBOT_ARISTACV_CVP_USERNAME", ""),
"aristacv_delete_devices_on_sync": is_truthy(os.getenv("NAUTOBOT_ARISTACV_DELETE_ON_SYNC", False)),
"aristacv_delete_devices_on_sync": is_truthy(os.getenv("NAUTOBOT_ARISTACV_DELETE_ON_SYNC", "false")),
"aristacv_from_cloudvision_default_device_role": "network",
"aristacv_from_cloudvision_default_device_role_color": "ff0000",
"aristacv_from_cloudvision_default_site": "cloudvision_imported",
"aristacv_hostname_patterns": [r"(?P<site>\w{2,3}\d+)-(?P<role>\w+)-\d+"],
"aristacv_import_active": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_ACTIVE", False)),
"aristacv_import_active": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_ACTIVE", "false")),
"aristacv_role_mappings": {
"bb": "backbone",
"edge": "edge",
Expand All @@ -190,19 +184,16 @@
"ams01": "Amsterdam",
"atl01": "Atlanta",
},
"aristacv_verify": is_truthy(os.getenv("NAUTOBOT_ARISTACV_VERIFY", True)),
"aristacv_verify": is_truthy(os.getenv("NAUTOBOT_ARISTACV_VERIFY", "true")),
"enable_aci": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_ACI")),
"enable_aristacv": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_ARISTACV")),
"enable_device42": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_DEVICE42")),
"enable_dna_center": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_DNA_CENTER")),
"enable_infoblox": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_INFOBLOX")),
"enable_ipfabric": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_IPFABRIC")),
"enable_itential": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_ITENTIAL")),
"enable_servicenow": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_SERVICENOW")),
"hide_example_jobs": is_truthy(os.getenv("NAUTOBOT_SSOT_HIDE_EXAMPLE_JOBS")),
"device42_host": os.getenv("NAUTOBOT_SSOT_DEVICE42_HOST", ""),
"device42_username": os.getenv("NAUTOBOT_SSOT_DEVICE42_USERNAME", ""),
"device42_password": os.getenv("NAUTOBOT_SSOT_DEVICE42_PASSWORD", ""),
"device42_verify_ssl": False,
"device42_defaults": {
"site_status": "Active",
"rack_status": "Active",
Expand All @@ -215,6 +206,11 @@
"device42_role_prepend": "",
"device42_ignore_tag": "",
"device42_hostname_mapping": [],
"dna_center_import_global": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_GLOBAL", "true")),
"dna_center_import_merakis": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_MERAKIS", "false")),
"dna_center_delete_locations": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_DELETE_LOCATIONS", "true")),
"dna_center_update_locations": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_UPDATE_LOCATIONS", "true")),
"dna_center_show_failures": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_SHOW_FAILURES", "true")),
"infoblox_default_status": os.getenv("NAUTOBOT_SSOT_INFOBLOX_DEFAULT_STATUS", "active"),
"infoblox_enable_sync_to_infoblox": is_truthy(os.getenv("NAUTOBOT_SSOT_INFOBLOX_ENABLE_SYNC_TO_INFOBLOX")),
"infoblox_import_objects_ip_addresses": is_truthy(
Expand All @@ -230,13 +226,9 @@
"infoblox_password": os.getenv("NAUTOBOT_SSOT_INFOBLOX_PASSWORD"),
"infoblox_url": os.getenv("NAUTOBOT_SSOT_INFOBLOX_URL"),
"infoblox_username": os.getenv("NAUTOBOT_SSOT_INFOBLOX_USERNAME"),
"infoblox_verify_ssl": is_truthy(os.getenv("NAUTOBOT_SSOT_INFOBLOX_VERIFY_SSL", True)),
"infoblox_verify_ssl": is_truthy(os.getenv("NAUTOBOT_SSOT_INFOBLOX_VERIFY_SSL", "true")),
"infoblox_wapi_version": os.getenv("NAUTOBOT_SSOT_INFOBLOX_WAPI_VERSION", "v2.12"),
"infoblox_network_view": os.getenv("NAUTOBOT_SSOT_INFOBLOX_NETWORK_VIEW", ""),
"ipfabric_api_token": os.getenv("NAUTOBOT_SSOT_IPFABRIC_API_TOKEN"),
"ipfabric_host": os.getenv("NAUTOBOT_SSOT_IPFABRIC_HOST"),
"ipfabric_ssl_verify": is_truthy(os.getenv("NAUTOBOT_SSOT_IPFABRIC_SSL_VERIFY", "False")),
"nautobot_host": os.getenv("NAUTOBOT_HOST"),
"servicenow_instance": os.getenv("SERVICENOW_INSTANCE", ""),
"servicenow_password": os.getenv("SERVICENOW_PASSWORD", ""),
"servicenow_username": os.getenv("SERVICENOW_USERNAME", ""),
Expand Down
1 change: 1 addition & 0 deletions docs/admin/compatibility_matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ While that last supported version will not be strictly enforced--via the max_ver
| 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 |
| 3.0.0 | 2.1.0 | 2.99.09 |
3 changes: 2 additions & 1 deletion docs/admin/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ Set up each integration using the specific guides:

- [Cisco ACI](./integrations/aci_setup.md)
- [Arista CloudVision](./integrations/aristacv_setup.md)
- [Device42](./integrations//device42_setup.md)
- [Device42](./integrations/device42_setup.md)
- [Cisco DNA Center](./integrations/dna_center_setup.md)
- [Infoblox](./integrations/infoblox_setup.md)
- [IPFabric](./integrations/ipfabric_setup.md)
- [ServiceNow](./integrations/servicenow_setup.md)
34 changes: 8 additions & 26 deletions docs/admin/integrations/aci_setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ pip install nautobot-ssot[aci]

## Configuration

!!! note
Legacy configuration settings defined in `nautobot_config.py` for `aci_apics` is now deprecated. All information related to communicating to an APIC has been updated to use the Controller and its related ExternalIntegration objects.

Integration behavior can be controlled with the following settings:

| Setting Name<br>(* required) | Type | Description |
|---|:---:|---|
| <p>aci_apics_*</p> | | Per-APIC settings. See per-APIC settings section for details. |
| aci_tag* | _String_ | Tag which is created and applied to all <br>synchronized objects. |
| aci_tag_color* | _String_ | Hex color code used for the tag. |
| aci_tag_up* | _String_ | Tag indicating the state applied to synchronized <br>interfaces. |
Expand All @@ -33,8 +35,6 @@ Below is an example snippet from `nautobot_config.py` that demonstrates how to e
PLUGINS_CONFIG = {
"nautobot_ssot": {
"enable_aci": True,
# URL and credentials should be configured as environment variables on the host system
"aci_apics": {x: os.environ[x] for x in os.environ if "APIC" in x},
# Tag which will be created and applied to all synchronized objects.
"aci_tag": "ACI",
"aci_tag_color": "0047AB",
Expand All @@ -54,36 +54,21 @@ PLUGINS_CONFIG = {

### Per-APIC settings

The APIC URL and credentials need to be created as environment variables on the host system.

You can configure multiple APIC instances for synchronization. To do this, append `_` character, followed by an identifier, to the names of environment variables.

In the example below, configured APIC uses `NTC` for an identifier. Instead of `NTC` you could, for example, use `CHCG01` to configure an APIC instance in your Chicago facility.

```bash
export NAUTOBOT_APIC_BASE_URI_NTC=https://aci.cloud.networktocode.com
export NAUTOBOT_APIC_USERNAME_NTC=admin
export NAUTOBOT_APIC_PASSWORD_NTC=not_so_secret_password
export NAUTOBOT_APIC_VERIFY_NTC=False
export NAUTOBOT_APIC_SITE_NTC="NTC ACI"
export NAUTOBOT_APIC_TENANT_PREFIX_NTC="NTC_ACI"
```

The identifier is used to select APIC from the SSoT dashboard when initiating a synchronization job:
All APIC specific settings have been updated to use the Controller and related ExternalIntegration objects. The ExternalIntegration object that is assigned to the Controller will define the APIC base URL, user credentials, and SSL verification. It will also have a `tenant_prefix` key in the `extra_config` section of the ExternalIntegration to define the Tenant prefix.

![image](../../images/aci-dashboard-apic.png)
The `aci_apics` setting from the `nautobot_config.py` file is no longer used and any configuration found for it will be automatically migrated into a Controller and an ExternalIntegration object.

## Nautobot Objects Affected by Settings

A Site will be created in Nautobot with the name specified in the `NAUTOBOT_APIC_SITE` environment variable and resources created by the integration will be assigned to this site.
The Job form has been updated to allow specifying a Location for the imported objects. If that is left unspecified then the Location associated to the specified Controller will be used.

Tenants imported from ACI will be prepended with the unique name specified by the corresponding `TENANT_PREFIX` variable. This uniquely identifies tenants which might have the same name, but belong to two different APIC clusters.
Tenants imported from ACI will be prefixed with the unique name specified by the corresponding `tenant_prefix` key in the Controller's associated ExternalIntegration `extra_config`. This uniquely identifies tenants which might have the same name, but belong to two different APIC clusters.

## Configuring Device Templates

To create a new Nautobot Device Type mapping to a specific ACI leaf or spine switch model you need to provide YAML file describing that model. This model definition includes interface template with the ports and transceiver types (ex. 10GE SFP+) specification.

The YAML files need to be placed in the `nautobot_ssot/integrations/aci/diffsync/device-types` directory. Their names need to match the model name as it appears in the ACI Fabric Membership area of the APIC dashboard.
The YAML files need to be placed in the `nautobot_ssot/integrations/aci/diffsync/device-types` directory. Their names need to match the model name as it appears in the ACI Fabric Membership area of the APIC dashboard.

For example, given a Model name of `N9K-C9396PX` as shown below, the YAML file should be named `N9K-C9396PX.yaml`.

Expand Down Expand Up @@ -114,15 +99,13 @@ There are example YAML files for a few common switch models in `nautobot_ssot/in
PLUGINS_CONFIG = {
# "nautobot_ssot_aci": { REMOVE THIS APP CONFIGURATION
# MOVE CONFIGURATION TO `nautobot_ssot` SECTION
# "apics": {x: os.environ[x] for x in os.environ if "NAUTOBOT_APIC" in x},
# "tag": "ACI",
# ...
# }
"nautobot_ssot": {
# Enable Cisco ACI integration
"enable_aci": True,
# Following lines are moved from `nautobot_ssot_aci` and prefixed with `aci_`
"aci_apics": {x: os.environ[x] for x in os.environ if "NAUTOBOT_APIC" in x},
"aci_tag": "ACI",
...
}
Expand All @@ -133,5 +116,4 @@ There are example YAML files for a few common switch models in `nautobot_ssot/in
Configuration keys are prefixed with `aci_`.

!!! note
Environment variables defining APICs access must contain `APIC`.
Other environment variables for this integration are prefixed with `NAUTOBOT_SSOT_ACI_`.
21 changes: 13 additions & 8 deletions docs/admin/integrations/device42_setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,21 @@ pip install nautobot-ssot[device42]

## Configuration

Integration behavior can be controlled with the following settings:
Access to your Device42 instance is defined using the [ExternalIntegration](https://docs.nautobot.com/projects/core/en/stable/user-guide/platform-functionality/externalintegration/) model which allows you to utilize this integration with multiple instances concurrently. Please bear in mind that it will synchronize all data 1:1 with the specified instance to match exactly, meaning it will delete data missing from an instance, unless you have the `device42_delete_on_sync` option set to False. Each ExternalIntegration must specify a SecretsGroup that contains Secrets that contain the Device42 Username and Password to authenticate against that instance. You can find Secrets and SecretsGroups available under the Secrets menu.

| Configuration Variable | Type | Usage |
| ---------------------- | ------- | ----------------------------------------------------------------------------------------------------- |
| device42_host | string | This defines the FQDN of the Device42 instance, ie `https://device42.example.com`. |
| device42_username | string | This defines the username of the account used to connect to the Device42 API endpoint. |
| device42_password | string | This defines the password of the account used to connect to the Device42 API endpoint. |
| device42_verify | boolean | This denotes whether SSL validation of the Device42 endpoint should be enabled or not. |
![Device42 Username](../../images/device42_username.png)

When creating Sites and Racks in Nautobot it is required to define a Status for each. It is also required to define a Role for your Device when created. You may define the default for each of those objects being imported with the respective values in your `nautobot_config.py` file.
![Device42 Password](../../images/device42_password.png)

![Device42 SecretsGroup](../../images/device42_secretsgroup.png)

Please note that is it imperative for the SecretsGroup used with the specified Controller uses HTTP(S) Access type and Username and Password respectively for each Secret. Also note that the name of the Secrets or SecretsGroup are irrelevant but are recommended to be relevant to the instance in question.

Once the SecretsGroup is created you'll need to create the ExternalIntegration. You'll find this under the Extensibility menu.

![Device42 ExternalIntegration](../../images/device42_externalintegration.png)

When creating Locations and Racks in Nautobot it is required to define a Status for each. It is also required to define a Role for your Device when created. You may define the default for each of those objects being imported with the respective values in your `nautobot_config.py` file.

| Configuration Variable | Type | Usage | Default |
| --------------------------------------------------- | ------ | ---------------------------------------------------------- | -------------------- |
Expand Down
Loading
Loading