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.1.tar.gz (135.9 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.1-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mikrotik_swos-1.2.1.tar.gz
  • Upload date:
  • Size: 135.9 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.1.tar.gz
Algorithm Hash digest
SHA256 39d0b040466c70de7b3efd3bd8d1de4fbed52a004f2ff7ad65bcd9981a4a99f9
MD5 2fd12e7398b1e027cf9ecd9525cb700d
BLAKE2b-256 3786179459ea8b26de9717fc4b9f6b73a7361e43492020d842d2cd3b4fc490bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for mikrotik_swos-1.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: mikrotik_swos-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 28.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a1d05066d2d7267b68c8468cd8754928e29e1837cc0e9f1fa9412abeb8cf327e
MD5 b6f7c289d02d0a06b2a4a2daa0f03453
BLAKE2b-256 8f11c809b99d38f6ad3ca6bfec0db958890ae1d4a36152df56dcdaa1ff739da1

See more details on using hashes here.

Provenance

The following attestation bundles were made for mikrotik_swos-1.2.1-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