Skip to content

Commit 7709b45

Browse files
authored
Merge pull request #536 from nautobot/release-3.1.0
Release 3.1.0
2 parents 6effda8 + bc8e850 commit 7709b45

File tree

26 files changed

+509
-145
lines changed

26 files changed

+509
-145
lines changed

.cookiecutter.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
"_drift_manager": {
2222
"template": "https://github.com/nautobot/cookiecutter-nautobot-app.git",
2323
"template_dir": "nautobot-app",
24-
"template_ref": "refs/tags/nautobot-app-v2.3.0",
24+
"template_ref": "refs/tags/nautobot-app-v2.3.2",
2525
"cookie_dir": "",
2626
"branch_prefix": "drift-manager",
2727
"pull_request_strategy": "create",
2828
"post_actions": [
2929
"black"
3030
],
3131
"draft": true,
32-
"baked_commit_ref": "edf831ea98364f9a475ef147f13c1fb2f17b825f"
32+
"baked_commit_ref": "022954d51f46c54813d3c8c81584a16f0faea1f5"
3333
}
3434
}
3535
}

.github/workflows/ci.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ on: # yamllint disable-line rule:truthy rule:comments
1313
pull_request: ~
1414

1515
env:
16-
APP_NAME: "nautobot-app-ssot"
16+
APP_NAME: "nautobot-ssot"
1717

1818
jobs:
1919
ruff-format:
@@ -91,6 +91,10 @@ jobs:
9191
uses: "actions/checkout@v4"
9292
- name: "Setup environment"
9393
uses: "networktocode/gh-action-setup-poetry-environment@v6"
94+
- name: "Constrain Nautobot version and regenerate lock file"
95+
env:
96+
INVOKE_NAUTOBOT_SSOT_LOCAL: "true"
97+
run: "poetry run invoke lock --constrain-nautobot-ver --constrain-python-ver"
9498
- name: "Set up Docker Buildx"
9599
id: "buildx"
96100
uses: "docker/setup-buildx-action@v3"
@@ -108,6 +112,7 @@ jobs:
108112
build-args: |
109113
NAUTOBOT_VER=${{ matrix.nautobot-version }}
110114
PYTHON_VER=${{ matrix.python-version }}
115+
CI=true
111116
- name: "Copy credentials"
112117
run: "cp development/creds.example.env development/creds.env"
113118
- name: "Linting: pylint"
@@ -122,14 +127,14 @@ jobs:
122127
strategy:
123128
fail-fast: true
124129
matrix:
125-
python-version: ["3.8", "3.11"]
130+
python-version: ["3.8", "3.12"]
126131
db-backend: ["postgresql"]
127132
nautobot-version: ["stable"]
128133
include:
129134
- python-version: "3.11"
130135
db-backend: "postgresql"
131136
nautobot-version: "2.2.1"
132-
- python-version: "3.11"
137+
- python-version: "3.12"
133138
db-backend: "mysql"
134139
nautobot-version: "stable"
135140
runs-on: "ubuntu-22.04"
@@ -158,6 +163,7 @@ jobs:
158163
build-args: |
159164
NAUTOBOT_VER=${{ matrix.nautobot-version }}
160165
PYTHON_VER=${{ matrix.python-version }}
166+
CI=true
161167
- name: "Copy credentials"
162168
run: "cp development/creds.example.env development/creds.env"
163169
- name: "Use Mysql invoke settings when needed"
@@ -195,7 +201,7 @@ jobs:
195201
- name: "Set up Python"
196202
uses: "actions/setup-python@v5"
197203
with:
198-
python-version: "3.11"
204+
python-version: "3.12"
199205
- name: "Install Python Packages"
200206
run: "pip install poetry"
201207
- name: "Set env"
@@ -230,7 +236,7 @@ jobs:
230236
- name: "Set up Python"
231237
uses: "actions/setup-python@v5"
232238
with:
233-
python-version: "3.11"
239+
python-version: "3.12"
234240
- name: "Install Python Packages"
235241
run: "pip install poetry"
236242
- name: "Set env"

changes/536.housekeeping

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Cut release for 3.1.0

changes/562.housekeeping

Lines changed: 0 additions & 1 deletion
This file was deleted.

development/Dockerfile

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -53,29 +53,18 @@ RUN which poetry || curl -sSL https://install.python-poetry.org | python3 - && \
5353
WORKDIR /source
5454
COPY . /source
5555

56-
# Get container's installed Nautobot version as a forced constraint
57-
# NAUTOBOT_VER may be a branch name and not a published release therefor we need to get the installed version
58-
# so pip can use it to recognize local constraints.
59-
RUN pip show nautobot | grep "^Version: " | sed -e 's/Version: /nautobot==/' > constraints.txt
56+
# Build args must be declared in each stage
57+
ARG PYTHON_VER
6058

61-
# Use Poetry to grab dev dependencies from the lock file
62-
# Can be improved in Poetry 1.2 which allows `poetry install --only dev`
63-
#
64-
# We can't use the entire freeze as it takes forever to resolve with rigidly fixed non-direct dependencies,
65-
# especially those that are only direct to Nautobot but the container included versions slightly mismatch
66-
RUN poetry export -f requirements.txt --without-hashes --extras all --output poetry_freeze_base.txt
67-
RUN poetry export -f requirements.txt --without-hashes --extras all --with dev --output poetry_freeze_all.txt
68-
RUN sort poetry_freeze_base.txt poetry_freeze_all.txt | uniq -u > poetry_freeze_dev.txt
69-
70-
# Install all local project as editable, constrained on Nautobot version, to get any additional
71-
# direct dependencies of the app
72-
RUN --mount=type=cache,target="/root/.cache/pip",sharing=locked \
73-
pip install -c constraints.txt -e .[all]
59+
# Constrain the Nautobot version to NAUTOBOT_VER
60+
# In CI, this should be done outside of the Dockerfile to prevent cross-compile build failures
61+
ARG CI
62+
RUN if [ -z "${CI+x}" ]; then \
63+
INSTALLED_NAUTOBOT_VER=$(pip show nautobot | grep "^Version" | sed "s/Version: //"); \
64+
poetry add --lock nautobot@${INSTALLED_NAUTOBOT_VER} --python ${PYTHON_VER}; fi
7465

75-
# Install any dev dependencies frozen from Poetry
76-
# Can be improved in Poetry 1.2 which allows `poetry install --only dev`
77-
RUN --mount=type=cache,target="/root/.cache/pip",sharing=locked \
78-
pip install -c constraints.txt -r poetry_freeze_dev.txt
66+
# Install the app
67+
RUN poetry install --extras all --with dev
7968

8069
COPY development/nautobot_config.py ${NAUTOBOT_ROOT}/nautobot_config.py
8170
# !!! USE CAUTION WHEN MODIFYING LINES ABOVE

development/app_config_schema.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def _main():
4040
**SchemaBuilder().to_json_schema(app_config), # type: ignore
4141
}
4242
app_config = import_module(package_name).config
43-
_enrich_object_schema(schema, app_config.default_settings, app_config.required_settings)
43+
_enrich_object_schema(
44+
schema, app_config.default_settings, app_config.required_settings
45+
)
4446
schema_path.write_text(json.dumps(schema, indent=4) + "\n")
4547
print(f"\n==================\nGenerated schema:\n\n{schema_path}\n")
4648
print(

development/nautobot_config.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818

1919
if "debug_toolbar" not in INSTALLED_APPS: # noqa: F405
2020
INSTALLED_APPS.append("debug_toolbar") # noqa: F405
21-
if "debug_toolbar.middleware.DebugToolbarMiddleware" not in MIDDLEWARE: # noqa: F405
22-
MIDDLEWARE.insert(0, "debug_toolbar.middleware.DebugToolbarMiddleware") # noqa: F405
21+
if (
22+
"debug_toolbar.middleware.DebugToolbarMiddleware" not in MIDDLEWARE
23+
): # noqa: F405
24+
MIDDLEWARE.insert(
25+
0, "debug_toolbar.middleware.DebugToolbarMiddleware"
26+
) # noqa: F405
2327

2428
#
2529
# Misc. settings
@@ -51,7 +55,9 @@
5155
"NAUTOBOT_DB_PORT",
5256
default_db_settings[nautobot_db_engine]["NAUTOBOT_DB_PORT"],
5357
), # Database port, default to postgres
54-
"CONN_MAX_AGE": int(os.getenv("NAUTOBOT_DB_TIMEOUT", "300")), # Database timeout
58+
"CONN_MAX_AGE": int(
59+
os.getenv("NAUTOBOT_DB_TIMEOUT", "300")
60+
), # Database timeout
5561
"ENGINE": nautobot_db_engine,
5662
}
5763
}

docs/admin/compatibility_matrix.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@ While that last supported version will not be strictly enforced--via the max_ver
1414
| 2.0.0-beta.2 | 2.0.0b2 | 2.0.0b2 |
1515
| 2.0.0-rc.1 | 2.0.0rc1 | 2.0.0rc1 |
1616
| 2.0.0-rc.2 | 2.0.0rc2 | 2.0.0rc99 |
17-
| 2.0.0 | 2.0.0 | 2.99.09 |
18-
| 2.0.1 | 2.0.0 | 2.99.09 |
19-
| 2.0.2 | 2.0.0 | 2.99.09 |
20-
| 2.1.0 | 2.0.0 | 2.99.09 |
21-
| 2.2.0 | 2.0.0 | 2.99.09 |
22-
| 2.3.0 | 2.1.0 | 2.99.09 |
23-
| 2.4.0 | 2.1.0 | 2.99.09 |
24-
| 2.5.0 | 2.1.0 | 2.99.09 |
25-
| 2.6.0 | 2.1.0 | 2.99.09 |
26-
| 2.7.0 | 2.1.0 | 2.99.09 |
27-
| 2.8.0 | 2.1.0 | 2.99.09 |
28-
| 3.0.0 | 2.1.0 | 2.99.09 |
29-
| 3.0.1 | 2.1.0 | 2.99.09 |
17+
| 2.0.0 | 2.0.0 | 2.99.99 |
18+
| 2.0.1 | 2.0.0 | 2.99.99 |
19+
| 2.0.2 | 2.0.0 | 2.99.99 |
20+
| 2.1.0 | 2.0.0 | 2.99.99 |
21+
| 2.2.0 | 2.0.0 | 2.99.99 |
22+
| 2.3.0 | 2.1.0 | 2.99.99 |
23+
| 2.4.0 | 2.1.0 | 2.99.99 |
24+
| 2.5.0 | 2.1.0 | 2.99.99 |
25+
| 2.6.0 | 2.1.0 | 2.99.99 |
26+
| 2.7.0 | 2.1.0 | 2.99.99 |
27+
| 2.8.0 | 2.1.0 | 2.99.99 |
28+
| 3.0.0 | 2.1.0 | 2.99.99 |
29+
| 3.0.1 | 2.1.0 | 2.99.99 |
30+
| 3.1.0 | 2.1.0 | 2.99.99 |

docs/admin/integrations/infoblox_setup.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,19 @@ pip install nautobot-ssot[infoblox]
1515
!!! note
1616
Legacy configuration settings defined in the `nautobot_config.py` and environmental variables are deprecated. These settings are migrated on a best-effort basis on the first startup following migration to the Nautobot SSOT 2.7.0 or higher.
1717

18-
Integration configuration is defined in the instance of the `SSOTInfobloxConfig` model. Multiple configuration instances are supported. Synchronization jobs take the `Config` parameter which specifies the configuration instance to use.
18+
The integration with Infoblox utilizes [External Integrations](https://docs.nautobot.com/projects/core/en/stable/user-guide/platform-functionality/externalintegration/?h=external) to specify your Infoblox host information. To enable this integration, the only modification needed is to activate it in the nautobot_config.py file.
19+
20+
Below is an example snippet from `nautobot_config.py` that demonstrates how to enable the Infoblox integration:
21+
22+
```python
23+
PLUGINS_CONFIG = {
24+
"nautobot_ssot": {
25+
"enable_infoblox": True,
26+
}
27+
}
28+
```
29+
30+
The remaining integration configuration is defined in the instance of the `SSOTInfobloxConfig` model. Multiple configuration instances are supported. Synchronization jobs take the `Config` parameter which specifies the configuration instance to use.
1931

2032
To access integration configuration navigate to `Apps -> Installed Apps` and click on the cog icon in the `Single Source of Truth` entry. Then in the table `SSOT Integration Configs` click on the `Infoblox Configuration List` link. This will take you to the view where you can view/modify existing config instances or create new ones.
2133

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
## [v3.1.0 (2024-09-06)](https://github.com/nautobot/nautobot-app-ssot/releases/tag/v3.1.0)
3+
4+
### Added
5+
6+
- [#527](https://github.com/nautobot/nautobot-app-ssot/issues/527) - Added Python 3.12 support.
7+
- [#528](https://github.com/nautobot/nautobot-app-ssot/issues/528) - Added DNA Center integration to _MIN_NAUTOBOT_VERSION as it requires Nautobot 2.2 for Controller object.
8+
9+
### Changed
10+
11+
- [#526](https://github.com/nautobot/nautobot-app-ssot/issues/526) - Updated the ExampleDataSource job to improve memory utilization with large data sets.
12+
- [#526](https://github.com/nautobot/nautobot-app-ssot/issues/526) - Changed memory profiling logging output to format bytes into KiB/MiB.
13+
14+
### Fixed
15+
16+
- [#521](https://github.com/nautobot/nautobot-app-ssot/issues/521) - Fixed generalized Exception with SecretsGroup and add custom Exception in case SecretsGroup not found on ExternalIntegration.
17+
- [#528](https://github.com/nautobot/nautobot-app-ssot/issues/528) - Fixed bug preventing use of Nautobot 2.1 due to ACI requiring 2.2.
18+
- [#528](https://github.com/nautobot/nautobot-app-ssot/issues/528) - Fixed JobResult association to Sync object to CASCADE instead of PROTECT so Sync object is deleted when JobResult is instead of preventing deletion.
19+
- [#530](https://github.com/nautobot/nautobot-app-ssot/issues/530) - Fixed Infoblox Configuration List Bug when on Nautobot 2.3 by disabling SSOTInfobloxConfig from being a saved view.
20+
21+
### Documentation
22+
23+
- [#520](https://github.com/nautobot/nautobot-app-ssot/issues/520) - Added instructions for enabling Infoblox integration.
24+
25+
### Housekeeping
26+
27+
- [#527](https://github.com/nautobot/nautobot-app-ssot/issues/527) - Rebaked from the cookie 'nautobot-app-v2.3.2'.

0 commit comments

Comments
 (0)