# lucas-linzl/netbackup architecture

> Architecture diagram of the GitHub repository lucas-linzl/netbackup, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lucas-linzl/netbackup
- Repository: https://github.com/lucas-linzl/netbackup

## Overview

netbackup is a command-line tool for bulk network-device configuration backups and health inspections. The user supplies a CSV, YAML, or JSON device inventory and selects backup, inspection, or both. The main entry point validates options, parses devices, and dispatches per-device work concurrently. Backup and inspection engines connect over SSH, run device-specific commands with retries, and save results; inspection additionally loads built-in or custom command templates and generates Markdown or HTML reports. The README documents these capabilities; sampled excerpts do not establish every internal call, so uncertain links are omitted.

Main entry points: [`netbackup/main.py`](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/main.py) (Workflow), [`netbackup/inspect_engine.py`](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/inspect_engine.py) (Inspection engine), [`netbackup/backup_engine.py`](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/backup_engine.py) (Backup engine), [`netbackup/file_manager.py`](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/file_manager.py) (File manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and orchestration"]
  node_cli["CLI config<br/>[cli.py]"]
  node_main["Workflow<br/>[main.py]"]
  node_parser["Inventory parser<br/>[config_parser.py]"]
  node_concurrency["Task concurrency<br/>[concurrency.py]"]
end

subgraph group_work["Device operations"]
  node_backup["Backup engine<br/>[backup_engine.py]"]
  node_inspect["Inspection engine<br/>[inspect_engine.py]"]
  node_templates["Command templates"]
  node_connector["SSH connector<br/>[connector.py]"]
end

subgraph group_outputs["Results and reporting"]
  node_files["File manager<br/>[file_manager.py]"]
  node_reports["Report generator"]
end

subgraph group_support["Shared infrastructure"]
  node_logger["Logging<br/>[logger.py]"]
end

node_user(("Operator"))
node_netmiko{{"Netmiko SSH"}}
node_filesystem[("Output files")]

node_user -->|"provides options"| node_cli
node_cli -->|"builds config"| node_main
node_main -->|"parses inventory"| node_parser
node_main -->|"dispatches tasks"| node_concurrency
node_concurrency -->|"runs backup"| node_backup
node_concurrency -->|"runs inspection"| node_inspect
node_main -->|"initializes engine"| node_backup
node_main -->|"initializes engine"| node_inspect
node_main -->|"loads templates"| node_templates
node_backup -->|"connects and commands"| node_connector
node_inspect -->|"connects and commands"| node_connector
node_connector -->|"SSH transport"| node_netmiko
node_inspect -->|"gets commands"| node_templates
node_backup -->|"saves configs"| node_files
node_inspect -->|"saves results"| node_files
node_main -->|"generates report"| node_reports
node_reports -->|"saves report"| node_files
node_files -->|"writes outputs"| node_filesystem
node_main -->|"sets up logging"| node_logger

click node_cli "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/cli.py"
click node_main "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/main.py"
click node_parser "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/config_parser.py"
click node_concurrency "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/concurrency.py"
click node_backup "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/backup_engine.py"
click node_inspect "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/inspect_engine.py"
click node_templates "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/inspect_templates.py"
click node_connector "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/connector.py"
click node_files "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/file_manager.py"
click node_reports "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/report_generator.py"
click node_logger "https://github.com/lucas-linzl/netbackup/blob/main/netbackup/logger.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_main,node_parser,node_concurrency toneBlue
class node_backup,node_inspect,node_templates,node_connector,node_filesystem toneAmber
class node_files,node_reports toneMint
class node_logger toneRose
class node_user,node_netmiko toneIndigo
```

## Components

### CLI and orchestration

- [CLI config](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/cli.py): `netbackup/cli.py`
- [Workflow](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/main.py): `netbackup/main.py`
- [Inventory parser](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/config_parser.py): `netbackup/config_parser.py`
- [Task concurrency](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/concurrency.py): `netbackup/concurrency.py`

### Device operations

- [Backup engine](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/backup_engine.py): `netbackup/backup_engine.py`
- [Inspection engine](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/inspect_engine.py): `netbackup/inspect_engine.py`
- [Command templates](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/inspect_templates.py): `netbackup/inspect_templates.py`
- [SSH connector](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/connector.py): `netbackup/connector.py`

### Results and reporting

- [File manager](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/file_manager.py): `netbackup/file_manager.py`
- [Report generator](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/report_generator.py): `netbackup/report_generator.py`

### Shared infrastructure

- [Logging](https://github.com/lucas-linzl/netbackup/blob/main/netbackup/logger.py): `netbackup/logger.py`

### Other components

- **Operator**
- **Netmiko SSH**
- **Output files**

## Connections

- Operator → CLI config: provides options
- CLI config → Workflow: builds config
- Workflow → Inventory parser: parses inventory
- Workflow → Task concurrency: dispatches tasks
- Task concurrency → Backup engine: runs backup
- Task concurrency → Inspection engine: runs inspection
- Workflow → Backup engine: initializes engine
- Workflow → Inspection engine: initializes engine
- Workflow → Command templates: loads templates
- Backup engine → SSH connector: connects and commands
- Inspection engine → SSH connector: connects and commands
- SSH connector → Netmiko SSH: SSH transport
- Inspection engine → Command templates: gets commands
- Backup engine → File manager: saves configs
- Inspection engine → File manager: saves results
- Workflow → Report generator: generates report
- Report generator → File manager: saves report
- File manager → Output files: writes outputs
- Workflow → Logging: sets up logging
