Skip to main content

Imperative UniFi homelab actions the Integration API can't express

Project description

unifictl

Imperative UniFi homelab actions that the official Integration API can't express. Companion to unifi-mcp (reads): same gateway, same API key, but unifictl hits the private controller API to do things — starting with toggling switch-port link aggregation (LACP LAGs).

Status: set lag implemented. The first feature works end-to-end against the private controller API (API-key auth). See SPEC.md for the design and decisions/ for the architecture decision records.

Install

uv tool install unifictl        # or: pipx install unifictl

Usage

unifictl set lag off            # dissolve the LAGs on the leader ports
unifictl set lag on             # restore the LACP bonds
unifictl set lag off --dry-run  # print the computed change, apply nothing

A real apply prints the diff, prompts for confirmation, and snapshots the switch's current port_overrides to a timestamped backup before writing.

Configuration

Connection and secrets come from the environment (never committed), matching unifi-mcp:

Variable Purpose
UNIFI_BASE_URL Gateway address, e.g. https://192.168.1.1
UNIFI_API_KEY Integration API key (also authenticates the private endpoints)
UNIFI_SITE Controller site (default default)
UNIFI_CA_CERT Optional path to the controller CA certificate (PEM)
UNIFI_INSECURE_TLS Last-resort TLS bypass
UNIFI_TIMEOUT_MS Per-request timeout (default 30000)

Operational parameters (switch MAC and LAG leader ports) live in an XDG TOML file at ~/.config/unifictl/config.toml; CLI flags override them.

Development

uv sync                 # create the venv and install deps
task dev:check          # lint, format-check, typecheck, import boundaries, tests
task dev:hooks-install  # install git hooks (prek)

See SPEC.md for the build reference and decisions/ for the architecture decision records.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unifictl-0.2.0.tar.gz (86.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unifictl-0.2.0-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file unifictl-0.2.0.tar.gz.

File metadata

  • Download URL: unifictl-0.2.0.tar.gz
  • Upload date:
  • Size: 86.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for unifictl-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d2c210c8e3a075383d00514069711a434db81972aca2946a58d26d8a52fd56c4
MD5 3fc4126d224ceeab5213ec80d4c225d3
BLAKE2b-256 f7edab91805afde2a7bc53242a6217520771842d5e5281e00853757647d46b6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for unifictl-0.2.0.tar.gz:

Publisher: release.yaml on yo61/unifictl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file unifictl-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: unifictl-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 20.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for unifictl-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cd9f9519f2ebe9a85d47aa4294fe5da1b14141b0b0cd6fbd372ba57bc2633656
MD5 2747d420ba5a0b9daa9b72978f4976ff
BLAKE2b-256 39d3adcab7d9c971ba3b41a683a4824b66b2629efa065517ccee05c81c7b4c9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for unifictl-0.2.0-py3-none-any.whl:

Publisher: release.yaml on yo61/unifictl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page