Metadata-Version: 2.4
Name: napalm-openmediavault
Version: 0.3.0
Summary: NAPALM driver for OpenMediaVault NAS (SSH)
Author-email: Christian Manivong <christian@manivong.de>
License-Expression: Apache-2.0
Project-URL: Repository, https://git.netork.io/NAPALM/napalm-openmediavault
Project-URL: Issues, https://git.netork.io/NAPALM/napalm-openmediavault/issues
Project-URL: Changelog, https://git.netork.io/NAPALM/napalm-openmediavault/src/branch/main/CHANGELOG.md
Keywords: napalm,network,automation,nas,openmediavault,omv,storage
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Networking
Classifier: Topic :: System :: Systems Administration
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: napalm>=4.0
Requires-Dist: napalm-device-types>=4.22.0
Requires-Dist: napalm-linux>=0.15.0
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-cov>=5; extra == "dev"
Requires-Dist: mypy>=1.11; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Dynamic: license-file

# napalm-openmediavault

NAPALM driver for [OpenMediaVault](https://www.openmediavault.org/) NAS systems, built on
[napalm-device-types](https://git.netork.io/NAPALM/napalm-device-types) (`StorageDriver`) and
[napalm-linux](https://git.netork.io/NAPALM/napalm-linux) (`LinuxDriver`).

OpenMediaVault is Debian underneath, so the driver inherits everything napalm-linux does for a
Linux host (packages, updates, services, users, processes, cron, Docker) and adds the NAS side:
disks, md RAID arrays, filesystems, shares and the NAS services.

## Tested against

| Model | Firmware |
|---|---|
| OpenMediaVault | 6.x (Debian Bullseye), 7.x (Debian Bookworm) |

## Connection

SSH, port 22 by default, through napalm-linux (Netmiko). The account needs a shell; `smartctl`
and `mdadm` run through `sudo` (passwordless, or with `sudo_password`). Every `optional_args`
key of napalm-linux is accepted (`port`, `pkg_manager`, `sudo_password`, …).

```python
from napalm import get_network_driver

driver = get_network_driver("openmediavault")
with driver("192.0.2.10", "admin", "secret", optional_args={"sudo_password": "secret"}) as nas:
    print(nas.get_facts())
    print(nas.get_disks())
    print(nas.get_shares())
```

## Supported

| Getter / action | |
|---|---|
| `get_facts` | napalm-linux's facts, `os_version` is `OMV <version>` of the `openmediavault` package |
| `get_disks` | `lsblk` for the disks, `smartctl -iA` for health, temperature and RPM |
| `get_disk_pools` | md arrays from `/proc/mdstat`, size and state from `mdadm --detail` |
| `get_volumes` | mounted block-device filesystems from `df`, read-only flag from `/proc/mounts` |
| `get_shares` | SMB, NFS and FTP shares from OMV's configuration database (`omv-confdbadm`) |
| `get_storage_services` | whether `smbd`, `nfs-server`, `proftpd`, `ssh` and `rsync` are enabled and running |
| everything of napalm-linux | packages, updates, services, users, processes, cron, Docker, … |

"Upgrade everything" is a full upgrade (`FULL_UPGRADE = True`): a plain `apt-get upgrade` holds
back OpenMediaVault's own packages and the kernel.

## Not supported

- `get_volume_snapshots`, `get_replication_jobs`, `get_quotas` raise `NotImplementedError`.
- `harden_ssh_server` is not offered: OpenMediaVault generates `sshd_config` from its own
  database and would undo a drop-in on the next apply of its SSH settings.
- Configuration changes to shares, disks or arrays.

## Installation

```bash
pip install napalm-openmediavault
```

## Development

The rules are in [STANDARDS.md](https://git.netork.io/NAPALM/driver-standard/src/branch/main/STANDARDS.md).

```bash
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest --cov
```

## License

Apache-2.0
