Move to config file
This commit is contained in:
34
config.yaml
Normal file
34
config.yaml
Normal 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
|
@ -10,6 +10,7 @@ import os
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
class RouterBackup:
|
class RouterBackup:
|
||||||
@ -136,26 +137,21 @@ class RouterBackup:
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description='SSH Router Backup Tool')
|
parser = argparse.ArgumentParser(description='SSH Router Backup Tool')
|
||||||
parser.add_argument('--host', required=True, help='Router hostname or IP address')
|
parser.add_argument('--config', required=True, help='YAML configuration file path')
|
||||||
parser.add_argument('--user', required=True, help='SSH username')
|
|
||||||
parser.add_argument('--password', help='SSH password')
|
parser.add_argument('--password', help='SSH password')
|
||||||
parser.add_argument('--key-file', help='SSH private key file path')
|
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('--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('--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()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Default commands for SR Linux routers
|
# Load configuration
|
||||||
default_commands = [
|
try:
|
||||||
"show version",
|
with open(args.config, 'r') as f:
|
||||||
"show system information",
|
config = yaml.safe_load(f)
|
||||||
"show interface",
|
except Exception as e:
|
||||||
"show network-instance",
|
print(f"Failed to load config file {args.config}: {e}")
|
||||||
"show route-table"
|
sys.exit(1)
|
||||||
]
|
|
||||||
|
|
||||||
commands = args.commands if args.commands else default_commands
|
|
||||||
|
|
||||||
# Use SSH key by default, fall back to password
|
# Use SSH key by default, fall back to password
|
||||||
if not args.password and not args.key_file:
|
if not args.password and not args.key_file:
|
||||||
@ -181,25 +177,51 @@ def main():
|
|||||||
import getpass
|
import getpass
|
||||||
args.password = getpass.getpass("No SSH key found. Enter SSH password: ")
|
args.password = getpass.getpass("No SSH key found. Enter SSH password: ")
|
||||||
|
|
||||||
# Create backup instance
|
# Process each device in config
|
||||||
backup = RouterBackup(
|
devices = config.get('devices', {})
|
||||||
hostname=args.host,
|
if not devices:
|
||||||
username=args.user,
|
print("No devices found in config file")
|
||||||
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:
|
|
||||||
sys.exit(1)
|
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__":
|
if __name__ == "__main__":
|
||||||
|
Reference in New Issue
Block a user