Metadata-Version: 2.4
Name: az-scout-plugin-mana-supportability
Version: 2026.7.0
Summary: Best-effort MANA (Microsoft Azure Network Adapter) supportability risk assessment for Azure VMs
Project-URL: Homepage, https://github.com/az-scout/az-scout-plugin-mana-supportability
Project-URL: Repository, https://github.com/az-scout/az-scout-plugin-mana-supportability
Project-URL: Issues, https://github.com/az-scout/az-scout-plugin-mana-supportability/issues
Author: Ludovic Rivallain
License-Expression: MIT
License-File: LICENSE.txt
Keywords: accelerated-networking,az-scout,azure,mana,nva,plugin
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Plugins
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Systems Administration
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: az-scout>=2026.5.0
Requires-Dist: fastapi
Description-Content-Type: text/markdown

# az-scout-plugin-mana-supportability

An [az-scout](https://docs.az-scout.com/plugins/) plugin that performs **best-effort detection
of Azure virtual machines at risk of MANA unsupportability**.

[MANA](https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-mana-overview)
(Microsoft Azure Network Adapter) is the new Azure network interface. Azure is progressively
rolling MANA-capable hardware into existing VM series. When a VM using Accelerated Networking
lands on MANA hardware, the guest OS must ship a MANA driver — otherwise networking degrades or
fails. Network virtual appliances (NVAs) are uniquely impacted.

This plugin enumerates VMs and scale sets in the selected subscriptions, then scores
each one against the documented MANA criteria using **ARM metadata only** — no in-guest
inspection, no agent, read-only.

## Detection criteria

| # | Criterion | Effect |
|---|---|---|
| 1 | VM size belongs to a MANA-eligible *existing* series | Gate — a non-listed size is not impacted |
| 2 | Accelerated Networking enabled on at least one NIC | Gate — "if AccelNet is not enabled, no action is required" |
| 3 | AKS-managed resource | Gate — AKS is not impacted |
| 4 | Guest OS ships a MANA driver (marketplace image → supported / unsupported / unknown) | high / medium risk |
| 5 | NVA workload (known marketplace publisher, product hint, or IP forwarding) | critical risk |
| 6 | `LegacyVMNVA` opt-out tag present and enabled | Mitigation, expires **2027-05-31** |
| 7 | Series announced for retirement | Recommend a resize instead of an opt-out |
| 8 | Hardware class → earliest possible MANA placement date | Cobalt 100 / Intel v5 → 2026-05-26, Intel v1–v4 → 2026-08-01 |

Findings are aggregated into a single risk level per resource: `none`, `low`, `medium`, `high`
or `critical`.

> The result is a **best-effort signal, not a guarantee**. The guest OS of custom, Compute Gallery,
> shared and community-gallery images cannot be determined from ARM metadata, so they are reported
> as `unknown` (and labelled with the image kind so you know where to look). Always confirm the
> in-guest driver and kernel version before acting.

## Features

- **UI tab** — "MANA readiness" with a multi-subscription checklist sidebar, summary cards, a risk
  filter, a searchable results table with expandable per-resource findings, and CSV export
- **API routes** under `/plugins/mana-supportability/`
- **MCP tools** exposed on the az-scout MCP server and in the AI chat
- **Chat mode** — `mana-supportability-advisor`

## API

| Route | Purpose |
|---|---|
| `GET /plugins/mana-supportability/assess` | Assess subscriptions. Params: `subscriptions` (`id` or `id\|name`, comma separated), `regions`, `tenantId`, `include_vmss` |
| `GET /plugins/mana-supportability/reference` | Eligible-series catalogue, milestone dates, known NVA publishers, doc links |
| `GET /plugins/mana-supportability/check-size` | Check a single VM size. Param: `vm_size` |

## MCP tools

- `check_mana_vm_size` — is a given VM size on MANA-eligible hardware?
- `list_mana_eligible_vm_series` — the documented eligible-series catalogue
- `assess_mana_supportability` — full assessment for one or more subscriptions

## Install

```bash
uv pip install az-scout-plugin-mana-supportability
az-scout  # the plugin is auto-discovered via the az_scout.plugins entry point
```

Development install:

```bash
uv sync --group dev
uv pip install -e .
az-scout
```

## Structure

```text
src/az_scout_mana_supportability/
├── __init__.py          # Plugin class + module-level `plugin` instance
├── mana_series.py       # MANA-eligible VM series catalogue + size matching
├── os_support.py        # Marketplace image → guest OS MANA support
├── nva.py               # Network virtual appliance detection
├── assessment.py        # Findings + risk engine
├── collector.py         # ARM collection (VMs, NICs, scale sets)
├── routes.py            # FastAPI APIRouter
├── tools.py             # MCP tools
└── static/
    ├── css/mana-supportability.css
    ├── html/mana-supportability-tab.html
    └── js/mana-supportability-tab.js
```

## Required permissions

Read-only. The signed-in identity needs `Reader` on the assessed subscriptions:

- `Microsoft.Compute/virtualMachines/read`
- `Microsoft.Compute/virtualMachineScaleSets/read`
- `Microsoft.Network/networkInterfaces/read`

## Quality checks

```bash
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
uv run mypy src/
uv run pytest
```

CI runs the same checks on Python 3.11–3.13. Releases are published to PyPI via trusted
publishing (OIDC) on version tags (`v*`).

## References

- [MANA overview](https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-mana-overview)
- [MANA on existing VM sizes](https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-mana-existing-sizes)
- [MANA on Linux VMs](https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-mana-linux)
- [MANA on Windows VMs](https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-mana-windows)
- [NVA opt-out](https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-mana-network-virtual-appliance-opt-out)

## License

[MIT](LICENSE.txt)

## Disclaimer

> **This tool is not affiliated with Microsoft.** MANA supportability detection is best-effort and
> based on ARM metadata only. It cannot inspect the guest OS, installed drivers, or kernel
> versions. Custom, Compute Gallery, shared, community-gallery images and unrecognised publishers
> are reported as `unknown`. Microsoft's rollout dates and eligible series lists may change —
> always confirm against the official documentation before making changes to production workloads.
