Skip to main content

Python library and tools for managing MikroTik SwOS and SwOS Lite switches

Project description

SwOS API and Tools

PyPI version Python versions License: MIT

Python library and tools for managing MikroTik SwOS (SwitchOS) and SwOS Lite (SwitchOS Lite) switches.

Components

  • swos package: Python library for reading/writing switch configuration
  • swos-config: CLI tool for displaying configuration
  • swos-export: CLI tool for exporting configurations to Ansible YAML format
  • Ansible module: Full-featured Ansible integration for declarative, idempotent switch configuration management
    • Supports check mode (dry-run)
    • Auto-detects platform (SwOS vs SwOS Lite)
    • Manages ports, PoE, VLANs, LAG/LACP, SNMP
    • See ANSIBLE.md for complete documentation

Capabilities

Read: System info, ports, PoE, LAG/LACP, per-port VLANs, VLAN table, host table, SFP info, SNMP Write: System settings, port config, PoE settings, LAG/LACP, per-port VLANs, VLAN table, SNMP SwOS-only: VLAN names, isolation, learning, mirror settings (not available on SwOS Lite) Note: All configuration changes are immediately applied and persisted by the switch.

Requirements

  • Python 3.6+
  • requests>=2.25.0

Installation

pip install mikrotik-swos

Or for development:

pip install -r requirements.txt

Confirmed Compatibility

  • SwOS 2.17

  • SwOS 2.18

  • SwOS Lite 2.17

  • SwOS Lite 2.18

  • SwOS Lite 2.19

  • SwOS Lite 2.20

Tested Hardware

  • CRS305-1G-4S+

  • CRS309-1G-8S+

  • CRS310-8G+2S+

  • CRS326-24S+2Q

  • CSS610-8G-2S+

  • CSS610-8P-2S+

Note: Gracefully handles switches without PoE, LAG/LACP, or SFP capabilities.

Quick Start

CLI Tools

swos-config - Display switch configuration:

# Display configuration
swos-config 192.168.88.1 admin ""

# Save to file
swos-config 192.168.88.1 admin "" > backup.txt

swos-export - Export to Ansible YAML format:

# Export all switches from inventory
swos-export -i inventory.yml -o configs/

# Export single switch
swos-export --host 192.168.1.1 --username admin --password "" -o switch.yml

Python API

from swos import get_system_info, set_port_config

url = "http://192.168.88.1"
system = get_system_info(url, "admin", "")
print(f"{system['device_name']} - {system['model']}")

set_port_config(url, "admin", "", port_number=1, name="Uplink")

See module docstrings for complete API documentation.

Ansible - Infrastructure as Code

Perfect for managing multiple switches declaratively!

Quick Setup:

# Install package
pip install mikrotik-swos

# Copy module to your playbook
mkdir -p library
cp ansible/swos.py library/

Example Playbook:

- name: Configure Switch
  hosts: switches
  tasks:
    - name: Apply configuration
      swos:
        host: "{{ ansible_host }}"
        username: admin
        password: ""
        config:
          system:
            identity: "Office-Switch-01"
          ports:
            - port: 1
              name: "Uplink"
              enabled: true
            - port: 2
              name: "Server"
              enabled: true
          vlans:
            - vlan_id: 10
              members: [2, 3, 4]

Features:

  • Idempotent - only applies changes when needed
  • Check mode - preview changes with --check
  • Auto-detection - works with both SwOS and SwOS Lite
  • Complete validation - catches configuration errors before applying

Full Ansible Documentation - Complete guide with advanced examples

API Functions

Read: get_system_info(), get_links(), get_poe(), get_lag(), get_port_vlans(), get_vlans(), get_hosts(), get_sfp_info(), get_snmp()

Write: set_system(), set_port_config(), set_poe_config(), set_lag_config(), set_port_vlan(), set_vlans(), set_snmp()

All functions take (url, username, password, ...) parameters. Read functions return lists of dictionaries with configuration data. Write functions take port_number and optional setting parameters (except set_system(), set_snmp(), and set_vlans() which set global config).

See docstrings in the swos module for detailed parameters and return values.

Security

  • SwOS Lite uses HTTP with Digest Authentication (no HTTPS)
  • Use on trusted networks only
  • Use Ansible Vault for password storage

Development

Publishing a New Release

  1. Create and push a git tag:

    git tag v0.2.0
    git push origin v0.2.0
    
  2. GitHub Actions automatically builds and publishes to PyPI

Credits

Certain components of this codebase were created with the assistance of AI.

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

mikrotik_swos-1.2.0.tar.gz (135.8 kB view details)

Uploaded Source

Built Distribution

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

mikrotik_swos-1.2.0-py3-none-any.whl (27.7 kB view details)

Uploaded Python 3

File details

Details for the file mikrotik_swos-1.2.0.tar.gz.

File metadata

  • Download URL: mikrotik_swos-1.2.0.tar.gz
  • Upload date:
  • Size: 135.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mikrotik_swos-1.2.0.tar.gz
Algorithm Hash digest
SHA256 4e273f0f1b714d1c94c2ced3b55059caa11db03d38fd7244374d9ede26392225
MD5 4216af88ad477bc46ca50a9a16ca9acc
BLAKE2b-256 b8caad185d7afb90cb9ce7ee0001fb743a4971d40b03380e9399d738db4dcfc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mikrotik_swos-1.2.0.tar.gz:

Publisher: publish.yml on lanrat/python-mikrotik-swos

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

File details

Details for the file mikrotik_swos-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: mikrotik_swos-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 27.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mikrotik_swos-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 531ae020981fb89f3acf8f7962fc8e870e20f313496f79f713a81badaab76d51
MD5 8f18c1db5104b33868ac61974fd0e18e
BLAKE2b-256 ef7d811d1426f7eb944a65b2c72f67dcc687afeb38a5c401ac525b457eb3d2eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for mikrotik_swos-1.2.0-py3-none-any.whl:

Publisher: publish.yml on lanrat/python-mikrotik-swos

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