2024-11-17 15:02:37 +01:00

76 lines
2.6 KiB
Python

#!/usr/bin/env python3
import paramiko
from git import Repo
import csv
import time
from config import * #config variables from config.py
#Check entries in the devices.csv document and import them into the dictionary
devices = [] #dictionary
with open(devicescsv_path,'r') as devicelist:
list = csv.DictReader(devicelist)
for row in list:
devices.append(row)
#for each entry do an export and download it
for device in devices:
file_path = repository_path + "/" + device["Location"] + "/" + device["Location"] + "_" + device["DeviceName"] + ".rsc"
# Create an SSH client instance
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# Connect to the server
ssh_client.connect(hostname = device["HostName"], port = device["Port"], username = device["User"], pkey = paramiko.RSAKey.from_private_key_file(key_path))
except Exception as e:
print(f"An error occurred: {e}")
else:
print("Connected to " + device["HostName"])
#Export config
ssh_client.exec_command("export file=" + device["Location"] + "_" + device["DeviceName"] + ".rsc show-sensitive")
print("Export commanded")
time.sleep(10) #Wait for ten seconds to make sure latest export is prepared before download
#Download Config
ssh_client.open_sftp().get(device["Location"] + "_" + device["DeviceName"] + ".rsc", file_path)
print("File downloaded successfully!")
finally:
# Close the SSH connection
ssh_client.close()
print("Connection closed")
# Open exported document, remove date and time of export
with open(file_path, 'r') as file:
lines = file.readlines()
if lines: # Check if the file is not empty
lines[0] = lines[0][:2] + lines[0][25:] #remove date and time of export
with open(file_path, 'w') as file:
file.writelines(lines)
repository = Repo(repository_path)
if repository.bare:
print("The repository is bare")
exit()
if repository.is_dirty(untracked_files=True): #Check if there are any differences
print("Changes detected in the repository.")
repository.git.add(all=True) #Stage all changes
print("Staged all changes.")
commit_message = time.strftime("%Y.%m.%d %H:%M:%S", time.localtime()) #commit changes
repository.index.commit(commit_message)
print("Committed changes with message:" + commit_message)
origin = repository.remote(name='origin') #push
origin.push()
print("Pushed changes to the remote repository.")
else:
print("No changes to commit.")