Skip to content

Commit 0dcc02d

Browse files
authored
Merge pull request #512 from nautobot/release-v3.0.0
Release v3.0.0
2 parents 2610e89 + 8359443 commit 0dcc02d

File tree

145 files changed

+13472
-3861
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+13472
-3861
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ This Nautobot application framework includes the following integrations:
2929
- Cisco ACI
3030
- Arista CloudVision
3131
- Device42
32+
- Cisco DNA Center
3233
- Infoblox
3334
- IPFabric
3435
- Itential
@@ -79,6 +80,7 @@ The SSoT framework includes a number of integrations with external Systems of Re
7980
* Cisco ACI
8081
* Arista CloudVision
8182
* Device42
83+
* Cisco DNA Center
8284
* Infoblox
8385
* Itential
8486
* ServiceNow
@@ -119,6 +121,9 @@ This project includes code originally written in separate Nautobot apps, which h
119121
- [nautobot-plugin-ssot-device42](https://github.com/nautobot/nautobot-plugin-ssot-device42):
120122
Thanks
121123
[@jdrew82](https://github.com/jdrew82)
124+
- [nautobot-plugin-ssot-dna-center](https://github.com/nautobot/nautobot-plugin-ssot-dna-center):
125+
Thanks
126+
[@jdrew82](https://github.com/jdrew82)
122127
- [nautobot-plugin-ssot-infoblox](https://github.com/nautobot/nautobot-plugin-ssot-infoblox):
123128
Thanks
124129
[@FragmentedPacket](https://github.com/FragmentedPacket),

development/development.env

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ NAUTOBOT_SSOT_ACI_TAG_DOWN_COLOR="FF3333"
5555
NAUTOBOT_SSOT_ACI_MANUFACTURER_NAME="Cisco"
5656
NAUTOBOT_SSOT_ACI_IGNORE_TENANTS="[mgmt,infra]"
5757
NAUTOBOT_SSOT_ACI_COMMENTS="Created by ACI SSoT Integration"
58-
NAUTOBOT_SSOT_ACI_SITE="Data Center"
5958

6059
NAUTOBOT_SSOT_ENABLE_ARISTACV="False"
6160
NAUTOBOT_ARISTACV_CONTROLLER_SITE=""
@@ -74,6 +73,12 @@ NAUTOBOT_SSOT_DEVICE42_HOST=""
7473
NAUTOBOT_SSOT_DEVICE42_USERNAME=""
7574
NAUTOBOT_SSOT_DEVICE42_PASSWORD=""
7675

76+
NAUTOBOT_SSOT_ENABLE_DNA_CENTER="False"
77+
NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_GLOBAL="True"
78+
NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_MERAKIS="False"
79+
NAUTOBOT_DNAC_SSOT_DNA_CENTER_UPDATE_LOCATIONS="True"
80+
NAUTOBOT_DNAC_SSOT_DNA_CENTER_SHOW_FAILURES="True"
81+
7782
NAUTOBOT_SSOT_ENABLE_INFOBLOX="False"
7883
NAUTOBOT_SSOT_INFOBLOX_DEFAULT_STATUS="Active"
7984
NAUTOBOT_SSOT_INFOBLOX_ENABLE_SYNC_TO_INFOBLOX="True"

development/docker-compose.base.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ x-nautobot-base: &nautobot-base
1313
- "creds.env"
1414
tty: true
1515

16-
version: "3.8"
1716
services:
1817
nautobot:
1918
depends_on:

development/docker-compose.dev.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
# any override will need to include these volumes to use them.
44
# see: https://github.com/docker/compose/issues/3729
55
---
6-
version: "3.8"
76
services:
87
nautobot:
98
command: "nautobot-server runserver 0.0.0.0:8080"

development/docker-compose.mysql.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
---
2-
version: "3.8"
3-
42
services:
53
nautobot:
64
environment:

development/docker-compose.postgres.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
---
2-
version: "3.8"
3-
42
services:
53
nautobot:
64
environment:

development/docker-compose.redis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
---
2-
version: "3.8"
32
services:
43
redis:
54
image: "redis:6-alpine"

development/nautobot_config.py

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -128,25 +128,21 @@
128128

129129
# Enable installed Apps. Add the name of each App to the list.
130130
PLUGINS = [
131-
"nautobot_chatops",
131+
# "nautobot_chatops",
132132
"nautobot_device_lifecycle_mgmt",
133133
"nautobot_ssot",
134134
]
135135

136136
# Apps configuration settings. These settings are used by various Apps that the user may have installed.
137137
# Each key in the dictionary is the name of an installed App and its value is a dictionary of settings.
138138
PLUGINS_CONFIG = {
139-
"nautobot_chatops": {
140-
"enable_slack": True,
141-
"slack_api_token": os.getenv("SLACK_API_TOKEN"),
142-
"slack_signing_secret": os.getenv("SLACK_SIGNING_SECRET"),
143-
"session_cache_timeout": 3600,
144-
"ipfabric_api_token": os.getenv("IPFABRIC_API_TOKEN"),
145-
"ipfabric_host": os.getenv("IPFABRIC_HOST"),
146-
},
139+
# "nautobot_chatops": {
140+
# "enable_slack": True,
141+
# "slack_api_token": os.getenv("SLACK_API_TOKEN"),
142+
# "slack_signing_secret": os.getenv("SLACK_SIGNING_SECRET"),
143+
# "session_cache_timeout": 3600,
144+
# },
147145
"nautobot_ssot": {
148-
# URL and credentials should be configured as environment variables on the host system
149-
"aci_apics": {x: os.environ[x] for x in os.environ if "APIC" in x},
150146
# Tag which will be created and applied to all synchronized objects.
151147
"aci_tag": os.getenv("NAUTOBOT_SSOT_ACI_TAG"),
152148
"aci_tag_color": os.getenv("NAUTOBOT_SSOT_ACI_TAG_COLOR"),
@@ -161,23 +157,21 @@
161157
"aci_ignore_tenants": os.getenv("NAUTOBOT_SSOT_ACI_IGNORE_TENANTS", "").split(","),
162158
# The below value will appear in the Comments field on objects created in Nautobot
163159
"aci_comments": os.getenv("NAUTOBOT_SSOT_ACI_COMMENTS"),
164-
# Site to associate objects. Specify existing, or a new site with this name will be created.
165-
"aci_site": os.getenv("NAUTOBOT_SSOT_ACI_SITE"),
166-
"aristacv_apply_import_tag": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_TAG", False)),
160+
"aristacv_apply_import_tag": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_TAG", "false")),
167161
"aristacv_controller_site": os.getenv("NAUTOBOT_ARISTACV_CONTROLLER_SITE", ""),
168-
"aristacv_create_controller": is_truthy(os.getenv("NAUTOBOT_ARISTACV_CREATE_CONTROLLER", False)),
162+
"aristacv_create_controller": is_truthy(os.getenv("NAUTOBOT_ARISTACV_CREATE_CONTROLLER", "false")),
169163
"aristacv_cvaas_url": os.getenv("NAUTOBOT_ARISTACV_CVAAS_URL", "www.arista.io:443"),
170164
"aristacv_cvp_host": os.getenv("NAUTOBOT_ARISTACV_CVP_HOST", ""),
171165
"aristacv_cvp_password": os.getenv("NAUTOBOT_ARISTACV_CVP_PASSWORD", ""),
172166
"aristacv_cvp_port": os.getenv("NAUTOBOT_ARISTACV_CVP_PORT", "443"),
173167
"aristacv_cvp_token": os.getenv("NAUTOBOT_ARISTACV_CVP_TOKEN", ""),
174168
"aristacv_cvp_user": os.getenv("NAUTOBOT_ARISTACV_CVP_USERNAME", ""),
175-
"aristacv_delete_devices_on_sync": is_truthy(os.getenv("NAUTOBOT_ARISTACV_DELETE_ON_SYNC", False)),
169+
"aristacv_delete_devices_on_sync": is_truthy(os.getenv("NAUTOBOT_ARISTACV_DELETE_ON_SYNC", "false")),
176170
"aristacv_from_cloudvision_default_device_role": "network",
177171
"aristacv_from_cloudvision_default_device_role_color": "ff0000",
178172
"aristacv_from_cloudvision_default_site": "cloudvision_imported",
179173
"aristacv_hostname_patterns": [r"(?P<site>\w{2,3}\d+)-(?P<role>\w+)-\d+"],
180-
"aristacv_import_active": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_ACTIVE", False)),
174+
"aristacv_import_active": is_truthy(os.getenv("NAUTOBOT_ARISTACV_IMPORT_ACTIVE", "false")),
181175
"aristacv_role_mappings": {
182176
"bb": "backbone",
183177
"edge": "edge",
@@ -190,19 +184,16 @@
190184
"ams01": "Amsterdam",
191185
"atl01": "Atlanta",
192186
},
193-
"aristacv_verify": is_truthy(os.getenv("NAUTOBOT_ARISTACV_VERIFY", True)),
187+
"aristacv_verify": is_truthy(os.getenv("NAUTOBOT_ARISTACV_VERIFY", "true")),
194188
"enable_aci": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_ACI")),
195189
"enable_aristacv": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_ARISTACV")),
196190
"enable_device42": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_DEVICE42")),
191+
"enable_dna_center": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_DNA_CENTER")),
197192
"enable_infoblox": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_INFOBLOX")),
198193
"enable_ipfabric": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_IPFABRIC")),
199194
"enable_itential": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_ITENTIAL")),
200195
"enable_servicenow": is_truthy(os.getenv("NAUTOBOT_SSOT_ENABLE_SERVICENOW")),
201196
"hide_example_jobs": is_truthy(os.getenv("NAUTOBOT_SSOT_HIDE_EXAMPLE_JOBS")),
202-
"device42_host": os.getenv("NAUTOBOT_SSOT_DEVICE42_HOST", ""),
203-
"device42_username": os.getenv("NAUTOBOT_SSOT_DEVICE42_USERNAME", ""),
204-
"device42_password": os.getenv("NAUTOBOT_SSOT_DEVICE42_PASSWORD", ""),
205-
"device42_verify_ssl": False,
206197
"device42_defaults": {
207198
"site_status": "Active",
208199
"rack_status": "Active",
@@ -215,6 +206,11 @@
215206
"device42_role_prepend": "",
216207
"device42_ignore_tag": "",
217208
"device42_hostname_mapping": [],
209+
"dna_center_import_global": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_GLOBAL", "true")),
210+
"dna_center_import_merakis": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_IMPORT_MERAKIS", "false")),
211+
"dna_center_delete_locations": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_DELETE_LOCATIONS", "true")),
212+
"dna_center_update_locations": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_UPDATE_LOCATIONS", "true")),
213+
"dna_center_show_failures": is_truthy(os.getenv("NAUTOBOT_DNAC_SSOT_DNA_CENTER_SHOW_FAILURES", "true")),
218214
"infoblox_default_status": os.getenv("NAUTOBOT_SSOT_INFOBLOX_DEFAULT_STATUS", "active"),
219215
"infoblox_enable_sync_to_infoblox": is_truthy(os.getenv("NAUTOBOT_SSOT_INFOBLOX_ENABLE_SYNC_TO_INFOBLOX")),
220216
"infoblox_import_objects_ip_addresses": is_truthy(
@@ -230,13 +226,9 @@
230226
"infoblox_password": os.getenv("NAUTOBOT_SSOT_INFOBLOX_PASSWORD"),
231227
"infoblox_url": os.getenv("NAUTOBOT_SSOT_INFOBLOX_URL"),
232228
"infoblox_username": os.getenv("NAUTOBOT_SSOT_INFOBLOX_USERNAME"),
233-
"infoblox_verify_ssl": is_truthy(os.getenv("NAUTOBOT_SSOT_INFOBLOX_VERIFY_SSL", True)),
229+
"infoblox_verify_ssl": is_truthy(os.getenv("NAUTOBOT_SSOT_INFOBLOX_VERIFY_SSL", "true")),
234230
"infoblox_wapi_version": os.getenv("NAUTOBOT_SSOT_INFOBLOX_WAPI_VERSION", "v2.12"),
235231
"infoblox_network_view": os.getenv("NAUTOBOT_SSOT_INFOBLOX_NETWORK_VIEW", ""),
236-
"ipfabric_api_token": os.getenv("NAUTOBOT_SSOT_IPFABRIC_API_TOKEN"),
237-
"ipfabric_host": os.getenv("NAUTOBOT_SSOT_IPFABRIC_HOST"),
238-
"ipfabric_ssl_verify": is_truthy(os.getenv("NAUTOBOT_SSOT_IPFABRIC_SSL_VERIFY", "False")),
239-
"nautobot_host": os.getenv("NAUTOBOT_HOST"),
240232
"servicenow_instance": os.getenv("SERVICENOW_INSTANCE", ""),
241233
"servicenow_password": os.getenv("SERVICENOW_PASSWORD", ""),
242234
"servicenow_username": os.getenv("SERVICENOW_USERNAME", ""),

docs/admin/compatibility_matrix.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ While that last supported version will not be strictly enforced--via the max_ver
2525
| 2.6.0 | 2.1.0 | 2.99.09 |
2626
| 2.7.0 | 2.1.0 | 2.99.09 |
2727
| 2.8.0 | 2.1.0 | 2.99.09 |
28+
| 3.0.0 | 2.1.0 | 2.99.09 |

docs/admin/install.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ Set up each integration using the specific guides:
9191

9292
- [Cisco ACI](./integrations/aci_setup.md)
9393
- [Arista CloudVision](./integrations/aristacv_setup.md)
94-
- [Device42](./integrations//device42_setup.md)
94+
- [Device42](./integrations/device42_setup.md)
95+
- [Cisco DNA Center](./integrations/dna_center_setup.md)
9596
- [Infoblox](./integrations/infoblox_setup.md)
9697
- [IPFabric](./integrations/ipfabric_setup.md)
9798
- [ServiceNow](./integrations/servicenow_setup.md)

0 commit comments

Comments
 (0)