Move to config file

This commit is contained in:
2025-07-05 23:23:57 +00:00
parent 1f9b637fb5
commit 144031bdf6
2 changed files with 87 additions and 31 deletions

34
config.yaml Normal file
View File

@ -0,0 +1,34 @@
types:
srlinux:
commands:
- show version
- show platform fan-tray
- show platform linecard
- show platform power-supply
- info flat from running
devices:
asw100:
user: pim
commands:
- show version
- show platform fan-tray
- show platform linecard
- show platform power-supply
- info flat from running
asw120:
user: pim
commands:
- show version
- show platform fan-tray
- show platform linecard
- show platform power-supply
- info flat from running
asw121:
user: pim
commands:
- show version
- show platform fan-tray
- show platform linecard
- show platform power-supply
- info flat from running

View File

@ -10,6 +10,7 @@ import os
from datetime import datetime
import argparse
import json
import yaml
class RouterBackup:
@ -136,26 +137,21 @@ class RouterBackup:
def main():
parser = argparse.ArgumentParser(description='SSH Router Backup Tool')
parser.add_argument('--host', required=True, help='Router hostname or IP address')
parser.add_argument('--user', required=True, help='SSH username')
parser.add_argument('--config', required=True, help='YAML configuration file path')
parser.add_argument('--password', help='SSH password')
parser.add_argument('--key-file', help='SSH private key file path')
parser.add_argument('--port', type=int, default=22, help='SSH port (default: 22)')
parser.add_argument('--output-dir', default='/tmp', help='Output directory for command output files (default: /tmp)')
parser.add_argument('--commands', nargs='+', help='Commands to run on the router')
args = parser.parse_args()
# Default commands for SR Linux routers
default_commands = [
"show version",
"show system information",
"show interface",
"show network-instance",
"show route-table"
]
commands = args.commands if args.commands else default_commands
# Load configuration
try:
with open(args.config, 'r') as f:
config = yaml.safe_load(f)
except Exception as e:
print(f"Failed to load config file {args.config}: {e}")
sys.exit(1)
# Use SSH key by default, fall back to password
if not args.password and not args.key_file:
@ -181,25 +177,51 @@ def main():
import getpass
args.password = getpass.getpass("No SSH key found. Enter SSH password: ")
# Create backup instance
backup = RouterBackup(
hostname=args.host,
username=args.user,
password=args.password,
key_file=args.key_file,
port=args.port
)
# Connect and backup
if backup.connect():
try:
backup_info = backup.backup_commands(commands, args.output_dir)
print(f"\nBackup completed. Files saved to '{args.output_dir}' directory")
print(f"Summary: {sum(1 for cmd in backup_info['commands'].values() if cmd['success'])}/{len(commands)} commands successful")
finally:
backup.disconnect()
else:
# Process each device in config
devices = config.get('devices', {})
if not devices:
print("No devices found in config file")
sys.exit(1)
success_count = 0
total_count = len(devices)
for hostname, device_config in devices.items():
print(f"\nProcessing device: {hostname}")
user = device_config.get('user')
commands = device_config.get('commands', [])
if not user:
print(f"No user specified for {hostname}, skipping")
continue
if not commands:
print(f"No commands specified for {hostname}, skipping")
continue
# Create backup instance
backup = RouterBackup(
hostname=hostname,
username=user,
password=args.password,
key_file=args.key_file,
port=args.port
)
# Connect and backup
if backup.connect():
try:
backup_info = backup.backup_commands(commands, args.output_dir)
print(f"Backup completed for {hostname}")
print(f"Summary: {sum(1 for cmd in backup_info['commands'].values() if cmd['success'])}/{len(commands)} commands successful")
success_count += 1
finally:
backup.disconnect()
else:
print(f"Failed to connect to {hostname}")
print(f"\nOverall summary: {success_count}/{total_count} devices processed successfully")
if __name__ == "__main__":