Skip to main content

Multi-vendor network config converter

Project description

netforge

Version License Python

Bidirectional converter between HP Comware and AlliedWare Plus network switch configurations.


Installation

pip install netforge

CLI usage

Single file

# HP Comware -> AlliedWare Plus
netforge switch.txt --to allied

# AlliedWare Plus -> HP Comware, write to file
netforge switch.txt --to hp --output out.txt

# Override auto-detection
netforge switch.txt --from hp --to allied

Batch (directory)

netforge configs/ --to allied --output converted/

All .txt and .cfg files in configs/ are converted. Results land in converted/.

stdin

cat switch.txt | netforge --to allied
ssh admin@switch "display current-configuration" | netforge --from hp --to allied

Detect vendor

netforge switch.txt --detect
# switch.txt: HP Comware (hp)

Report

netforge switch.txt --to allied --report
# prints IR summary (hostname, VLANs, interfaces, AAA schemes) to stderr
# converted config goes to stdout

Version

netforge --version

Exit codes

Code Meaning
0 Success
1 Conversion / parsing error
2 Bad arguments / usage error
3 Vendor detection ambiguous or failed

Python library

import netforge

# Auto-detect source vendor and convert
allied_config = netforge.convert(hp_config_text, to="allied")
hp_config     = netforge.convert(allied_config_text, to="hp")

# Force source vendor
allied_config = netforge.convert(text, to="allied", from_vendor="hp")

# Detect only
vendor = netforge.detect_vendor(text)   # "hp" or "allied"

Lower-level API

from netforge.parsers.hp import HPParser
from netforge.renderers.allied import AlliedRenderer

model = HPParser().parse(raw_text)        # UniversalConfig (dataclass IR)
print(model.hostname, model.vlans)

output = AlliedRenderer().render(model)

Supported features

Feature HP Comware AlliedWare Plus
Hostname sysname hostname
VLANs vlan <id> + name block vlan database
Access port port access vlan <id> switchport access vlan <id>
Trunk port port link-type trunk switchport mode trunk
SVI interface Vlan-interface<id> interface vlan<id>
Interface name GigabitEthernet1/0/1 port1.0.1
Static routes ip route-static ip route
RADIUS named scheme block radius-server host inline
TACACS+ named scheme block tacacs-server host inline
SSH ssh server enable service ssh
NTP ntp-service unicast-server ntp server
Syslog info-center loghost log host
dot1x dot1x per interface dot1x port-control auto
MAC auth mac-authentication auth-mac enable
STP edge stp edged-port spanning-tree edgeport
LLDP lldp global enable lldp run
SNMP snmp-agent snmp-server enable
DNS dns server + dns domain ip name-server + ip domain-name
VTY lines line vty + authentication-mode line vty + transport input
Local users local-user + password hash username + password 8

Key placeholders

Encrypted secrets are never carried across vendors. The converter emits human-readable placeholders that the Key Manager can replace:

  • TACACS / RADIUS keys: <REPLACE_KEY_10_0_0_10>
  • User passwords: <REPLACE_PASSWORD_admin>

Contributing

  1. Fork the repository and create a feature branch.
  2. Add your feature to the IR (models.py), both parsers, both renderers.
  3. Add fixture lines to tests/fixtures/hp_sample.txt and allied_sample.txt.
  4. Write tests in tests/test_hp_parser.py, test_allied_parser.py, test_renderers.py.
  5. Run pytest tests/ -v — all tests must pass.
  6. Open a pull request.
pip install -e ".[dev]"
pytest tests/ -v --tb=short

License

MIT

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

netforge-1.0.0.tar.gz (49.9 kB view details)

Uploaded Source

Built Distribution

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

netforge-1.0.0-py3-none-any.whl (28.4 kB view details)

Uploaded Python 3

File details

Details for the file netforge-1.0.0.tar.gz.

File metadata

  • Download URL: netforge-1.0.0.tar.gz
  • Upload date:
  • Size: 49.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for netforge-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8ef6dda66e187982c07353929fffa81ba92a97637788af8e520ed531d03b0d22
MD5 9fa2f8cc1c0e1e008b8fd5d899f7d77b
BLAKE2b-256 5dba9ba5598bd147055d8e6377dacf6afe6325537d15d81655b9210d95e69e34

See more details on using hashes here.

File details

Details for the file netforge-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: netforge-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 28.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for netforge-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ee351d63b5393b5da63ea71f3c72dbdc51d080b0c83ce1328efb172ef4da660
MD5 848fc85f6aac965a4f7073105fa03241
BLAKE2b-256 32a5a4321457257cb229b60a0a28b550a935ff2c1da1b20c1ac59a923ea1557f

See more details on using hashes here.

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