Metadata-Version: 2.4
Name: netbox-services
Version: 0.1.0
Summary: A NetBox services Plugin for Service Providers
Author-email: Arturo Baldo <baldoarturo@gmail.com>
Maintainer-email: Arturo Baldo <baldoarturo@gmail.com>
Project-URL: Documentation, https://github.com/baldoarturo/netbox-services/blob/main/README.md
Project-URL: Source, https://github.com/baldoarturo/netbox-services
Project-URL: Tracker, https://github.com/baldoarturo/netbox-services/issues
Keywords: netbox-plugin
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# NetBox Services Plugin

[![Upload Python Package](https://github.com/baldoarturo/netbox-services/actions/workflows/python-publish.yml/badge.svg)](https://github.com/baldoarturo/netbox-services/actions/workflows/python-publish.yml)
[![PyPI version](https://img.shields.io/pypi/v/netbox-services.svg)](https://pypi.org/project/netbox-services/)

A NetBox plugin for **service providers** who need a service-centric inventory on top of DCIM/IPAM.

It adds a `Service` object: a unique ID, a type, a tenant, a lifecycle, and links out to whatever DCIM/IPAM/VPN objects actually deliver it — the PE/CE devices, interfaces, prefixes, VRFs, whatever makes up the Cogent DIA circuit `NW-123456` or the customer's L3VPN. It's the page you open when someone asks "what does this customer's product actually run on?"

## What a Service is

Each Service has:

| Area | Fields |
| --- | --- |
| Identity | Unique `service_id`, type (L2VPN, L3VPN, DIA, IP Transit, CDN, Voice), description, status, tenant |
| Lifecycle | Order date, planned activation, installed, contract start/end, requested disconnect, decommissioned |
| Delivery | Devices, interfaces, cables, VLANs, prefixes, VRFs, ASNs, route targets, L2VPNs, tunnels, VMs |
| Dependencies | Other services this one depends on, and the services that depend on it in turn |
| Files | PDF/other files (`ServiceAttachment`) plus NetBox image attachments (photos) on the Images tab |

Status reuses NetBox circuit statuses so services line up with how circuits are already tracked.

Date checks: contract end cannot precede start; decommissioned cannot precede installed or requested disconnect.

## Why not just tags?

A tag is a label; a Service is a record. Tagging a prefix `dia` doesn't tell you which customer it's for, when it was ordered, or which interface hands it off — a Service does.

Say you're onboarding DIA `NW-123456` for a tenant. With a Service you'd:

- Point at the PE/CE devices and the exact interfaces
- Attach the WAN prefixes, VRF, and ASN
- Log the order / install / contract dates
- Keep the signed PDF and site photos right next to the inventory

The detail page is laid out for that: technical inventory on the left, lifecycle and paperwork on the right.

## Features

- CRUD for business services from **Business Services** in the nav
- Relate/unrelate DCIM, IPAM, VPN, and virtualization objects from the service detail view
- Service-to-service dependencies (e.g. a CDN service riding over an L2L circuit), with direct and
  indirect cycle detection, visible on the detail page and the list view
- Filter and search by service ID, description, tenant, status, dates, and dependencies
- Bulk delete from the list view
- Changelog, tags, and custom fields (`NetBoxModel`)
- REST API under `/api/plugins/services/` (list/detail include `id`, lifecycle fields, and
  dependencies; query-string filtering works the same as the UI)
- File attachments and native image attachments

## Usage

1. Open **Business Services** in the plugin menu.
2. Create a service — ID and type is all you need to start.
3. On the detail page, hit **Assign** on each technical card to attach inventory.
4. Fill in lifecycle dates as the order, install, or disconnect actually happen.
5. Drop contracts/PDFs under **Attachments**; photos go on the **Images** tab.

![Plugin screenshot](https://github.com/baldoarturo/netbox-services/raw/master/02-main.png)

## Requirements

- NetBox 4.4+
- Python 3.10+

## Installation

Install the package:

```bash
pip install netbox-services
```

Or clone this repo next to your NetBox plugins and install it in editable mode if you want to hack on it.

Enable it in `configuration.py`:

```python
PLUGINS = [
    'netbox_services',
]
```

Apply migrations and restart NetBox:

```bash
python manage.py migrate netbox_services
```

The UI lives at `/plugins/services/`. The API lives at `/api/plugins/services/` (no extra `/services/` segment).

## License

MIT

