This tool generates vendor-specific network switch configurations (e.g., Cisco NX-OS, Dell OS10) using JSON input and Jinja2 templates. It supports both Python source usage and standalone executables.
Documentation:
- Template Guide — Jinja2 templates and switch interface templates
- Converter Guide — Writing custom input format converters
- Troubleshooting — Common issues and solutions
Download from Releases, then:
# See all options ./network_config_generator -h # Generate configs from standard-format JSON ./network_config_generator --input_json input/standard_input.json --output_folder output/ # Generate from custom-format JSON (auto-converts) ./network_config_generator --input_json my_input.json --output_folder configs/ --convertor lab # Include debug data (vlan_map, ip_map) in converted JSON ./network_config_generator --input_json my_input.json --output_folder configs/ --debug# Install dependencies pip install -r requirements.txt # Generate from standard-format JSON python -m src.main --input_json input/standard_input.json --output_folder output/ # Generate from custom-format JSON with auto-conversion python -m src.main --input_json my_input.json --output_folder configs/ --convertor lab # Include debug data in converted JSON output python -m src.main --input_json my_input.json --output_folder configs/ --debug # Run tests python -m pytest tests/ -vThe tool produces individual section configs plus a merged full config:
output/ ├── generated_system.cfg ├── generated_vlan.cfg ├── generated_interface.cfg ├── generated_port_channel.cfg ├── generated_bgp.cfg ├── generated_prefix_list.cfg ├── generated_qos.cfg ├── generated_login.cfg └── generated_full_config.cfg flowchart LR A["Standard Input JSON"] -->|Load Variables| E("Config Generator") C["Jinja2 Templates"] -->|Provide Templates| E E -->|Render| G["Generated .cfg Files"] Non-standard inputs can be transformed to standard format via pluggable converters:
flowchart LR U1["Custom Format<br/>(JSON, CSV, YAML, etc.)"] -->|Converter| S1["Standard JSON"] S1 --> G["Generator + Templates → .cfg"] Note
The standard JSON format must match the variables used in Jinja2 templates. You can safely update values but the structure must stay fixed.
├── docs/ # Documentation │ ├── TEMPLATE_GUIDE.md # Jinja2 + switch interface template guide │ ├── CONVERTOR_GUIDE.md # Custom converter guide │ └── TROUBLESHOOTING.md # Common issues and solutions ├── input/ │ ├── standard_input.json # Standard format example │ ├── jinja2_templates/ # Jinja2 config templates │ │ ├── cisco/nxos/ # 10 templates (bgp, vlan, interface, …) │ │ └── dellemc/os10/ # 11 templates (+ vlt.j2) │ └── switch_interface_templates/ # Switch model definitions │ ├── cisco/ # 93108TC-FX3P, 93180YC-FX, 93180YC-FX3, │ │ # 9348GC-FXP, 9348GC-FX3 │ └── dellemc/ # N3248TE-ON, S5248F-ON ├── src/ │ ├── main.py # CLI entry point │ ├── generator.py # Jinja2 rendering engine │ ├── loader.py # Input file loading and parsing │ ├── constants.py # Shared constants (VLAN maps, templates) │ ├── utils.py # Helpers (infer_firmware, classify_vlan) │ └── convertors/ │ ├── convertors_lab_switch_json.py # Input format converter (TOR switches) │ └── convertors_bmc_switch_json.py # Input format converter (BMC switches) ├── tests/ │ ├── conftest.py # Shared fixtures and helpers │ ├── test_unit.py # Unit tests (88 tests) │ ├── test_convertors.py # Golden-file converter tests (12 tests) │ ├── test_generator.py # Golden-file generator tests (6 tests) │ ├── test_submission_flow.py # Submission workflow & template tests (121 tests) │ └── test_cases/ # Test data (6 converter + 3 generator cases) ├── tools/ # Utility scripts (IP mgmt, port mapping) └── requirements.txt # Python dependencies { "switch": { "hostname": "tor-switch-1", "make": "cisco", "firmware": "nxos" }, "vlans": [ { "vlan_id": 711, "name": "Compute" } ], "interfaces": [ { "name": "Ethernet1/1", "vlan": 711, "description": "Compute1" } ], "bgp": { "asn": 65001, "router_id": "192.168.0.1" } }router bgp {{ bgp.asn }} router-id {{ bgp.router_id }}See docs/TEMPLATE_GUIDE.md for complete template reference.