Hierarchical Configuration, also known as hier_config, is a Python library designed to query and compare network devices configurations. Among other capabilities, it can compare the running config to an intended configuration to determine the commands necessary to bring a device into compliance with its intended configuration.
Hierarchical Configuration has been used extensively on:
- Cisco IOS
- Cisco IOSXR
- Cisco NXOS
- Arista EOS
- Fortinet FortiOS
- HP Procurve (Aruba AOSS)
In addition to the Cisco-style syntax, hier_config offers experimental support for Juniper-style configurations using set and delete commands. This allows users to remediate Junos configurations in native syntax. However, please note that Juniper syntax support is still in an experimental phase and has not been tested extensively. Use with caution in production environments.
- Juniper JunOS
- VyOS
Hier Config is compatible with any NOS that utilizes a structured CLI syntax similar to Cisco IOS or Junos OS.
The code documentation can be found at: Hier Config documentation.
Network devices continuously drift from their intended state — VLANs appear, ACL entries change, BGP timers shift. hier_config solves this by parsing configuration text into a hierarchical tree and performing deterministic, line-level diffs that respect the vendor's own syntax rules. Rather than string-matching raw text, it understands the structure of commands so that remediation output is minimal, ordered, and safe to apply.
- Predict the device state before deploying with
future()and generate accurate rollbacks that preserve distinct structural commands — BGP neighbor descriptions, for example, no longer collapse when multiple peers share a common prefix. - Build remediation workflows with deterministic diffs across Cisco-style and Junos-style configuration syntaxes.
- Tag remediation lines and filter output with tag-based rules for phased or conditional deployment.
- Aggregate and analyse changes across a fleet with RemediationReporter.
- Render structured, typed interface data with the Config View abstraction.
See the Architecture Overview for how the tree, driver, and workflow layers fit together.
Install from PyPi:
pip install hier-configfrom hier_config import WorkflowRemediation, get_hconfig, Platform
from hier_config.utils import read_text_from_fileLoad the running and intended configurations as strings:
running_config_text = read_text_from_file("./tests/fixtures/running_config.conf")
generated_config_text = read_text_from_file("./tests/fixtures/generated_config.conf")Specify the device platform (e.g., Platform.CISCO_IOS):
running_config = get_hconfig(Platform.CISCO_IOS, running_config_text)
generated_config = get_hconfig(Platform.CISCO_IOS, generated_config_text)Compare configurations and generate remediation steps:
workflow = WorkflowRemediation(running_config, generated_config)
print("Remediation Configuration:")
print(workflow.remediation_config)This guide gets you started with Hier Config in minutes! For more details, visit Hier Config Documentation Site.