Installing the App in Nautobot¶
This page covers install and configure for nautobot-contract-models.
Prerequisites¶
- Nautobot 3.0.0 or higher
- Database: PostgreSQL or MySQL
- Python 3.10+
Note
Check the compatibility matrix for the supported Nautobot version range.
Install Guide¶
The app is published on PyPI. Install with pip:
To make sure the app is reinstalled on Nautobot upgrades, add it to your local_requirements.txt:
Enable the App¶
Edit nautobot_config.py:
- Append
"nautobot_contract_models"toPLUGINS. - Optionally add a
"nautobot_contract_models"block toPLUGINS_CONFIG.
# In nautobot_config.py
PLUGINS = [
"nautobot_contract_models",
]
PLUGINS_CONFIG = {
"nautobot_contract_models": {
# Default window for the renewal-check Job and the home dashboard
# "Upcoming Renewals" panel. Defaults to 60 days.
"renewal_window_days": 60,
},
}
Then run migrations and collect static:
Restart the Nautobot web service AND the Celery worker:
The worker restart is important — newly-discovered Jobs won't appear until the worker re-reads the registry.
Verify the install¶
- Visit
/apps/installed-apps/and confirmnautobot_contract_modelsis listed. - Visit
/plugins/contracts/contracts/— you should see the (empty) contract list. - Visit
/jobs/and look under the Contracts group for five jobs:- Check upcoming renewals
- Find devices without contract coverage
- Monthly cost report
- Capture cost history snapshot
- Detect cost anomalies
App Configuration¶
| Setting | Default | Description |
|---|---|---|
renewal_window_days |
60 |
Days from today to look ahead. Drives the renewal-check Job's default and the Renewal Forecast home dashboard panel. |
Upgrading from pre-Phase-8¶
Migration 0007_contract_billing_period defaults every existing Contract to billing_period='monthly'. If you have annual or quarterly contracts already in the database, their recurring_cost will be interpreted as a monthly figure after upgrade — over-counting the burn rate panels by 12x (annual) or 3x (quarterly).
Two ways to fix:
Option 1 — bulk edit via the UI
- Visit
/plugins/contracts/contracts/?billing_period=monthly - Select contracts that should be annual / quarterly
- Click Edit Selected and change
billing_period
Option 2 — Django ORM (faster for many contracts)
# nautobot-server shell
from nautobot_contract_models.models import Contract
Contract.objects.filter(name__icontains="EA").update(billing_period="annual")
Contract.objects.filter(name__icontains="quarterly").update(billing_period="quarterly")
After the fix, run Capture cost history snapshot to refresh the trend baseline.
Static files¶
The plugin ships its own static CSS files for the Renewal Calendar, Action Required, and Cost History pages. nautobot-server collectstatic picks these up automatically; no additional configuration needed.
Removing the app¶
See Uninstall.