WIP - script works but needs tidy up and tweaking (not all APs are shown)
This commit is contained in:
parent
7c86a03528
commit
8cc574b24a
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,3 @@
|
||||
venv
|
||||
venv
|
||||
.env
|
||||
*.xlsx
|
75
script.py
75
script.py
@ -1,3 +1,76 @@
|
||||
import os
|
||||
import re
|
||||
from dotenv import load_dotenv
|
||||
from netmiko.cisco.cisco_wlc_ssh import CiscoWlcSSH
|
||||
import pandas as pd
|
||||
|
||||
print("Hello world!")
|
||||
load_dotenv()
|
||||
|
||||
ip = input("Please input the WLC IP: ")
|
||||
user = os.environ.get("USER")
|
||||
password = os.environ.get("PASS")
|
||||
|
||||
wlc = CiscoWlcSSH(
|
||||
ip=ip,
|
||||
username=user,
|
||||
password=password
|
||||
)
|
||||
|
||||
wlc.send_command("config paging disable")
|
||||
ap_summary = wlc.send_command("show ap summary", read_timeout=30)
|
||||
|
||||
pattern = re.compile(r"""
|
||||
(?P<AP_Name>\S+)\s+ # AP Name (non-space characters followed by spaces)
|
||||
(?P<Slots>\d+)\s+ # Slots (digits followed by spaces)
|
||||
(?P<AP_Model>[\w\-]+)\s+ # AP Model (alphanumeric or hyphen)
|
||||
(?P<Ethernet_MAC>[0-9a-fA-F:]+)\s+ # Ethernet MAC address (hexadecimal, colon-separated)
|
||||
(?P<Location>[\w\s\-]+)\s+ # Location (alphanumeric, space, or hyphen)
|
||||
(?P<Country>\w+)\s+ # Country (two uppercase letters)
|
||||
(?P<IP_Address>\d+\.\d+\.\d+\.\d+)\s+ # IP Address (IPv4 format)
|
||||
(?P<Clients>\d+)\s+ # Clients (digits)
|
||||
(?P<DSE_Location>\[.*\]) # DSE Location (list format)
|
||||
""", re.VERBOSE)
|
||||
|
||||
# List to store parsed dictionaries
|
||||
parsed_data = []
|
||||
|
||||
# Process each row in the text (excluding the header and separator)
|
||||
for line in ap_summary.strip().splitlines()[2:]:
|
||||
match = pattern.match(line)
|
||||
if match:
|
||||
parsed_data.append(match.groupdict())
|
||||
|
||||
# Create a DataFrame from the parsed data
|
||||
df = pd.DataFrame(parsed_data)
|
||||
|
||||
# Define the Excel file name
|
||||
file_name = 'ap_data.xlsx'
|
||||
|
||||
with pd.ExcelWriter(file_name, engine='openpyxl') as writer:
|
||||
# Write the dataframe to the first sheet without the header row
|
||||
df.to_excel(writer, index=False, header=False, sheet_name='AP Data')
|
||||
|
||||
# Access the workbook and the sheet
|
||||
workbook = writer.book
|
||||
worksheet = workbook['AP Data']
|
||||
from openpyxl.utils import get_column_letter
|
||||
# Set the column headers to letters (A, B, C, D, etc.)
|
||||
for idx in range(len(df.columns)):
|
||||
# Convert the column index (starting from 0) to Excel letters (A, B, C, ...)
|
||||
worksheet[get_column_letter(idx + 1) + '1'].value = get_column_letter(idx + 1)
|
||||
|
||||
# Set the column width for better readability
|
||||
column_widths = {}
|
||||
for col in df.columns:
|
||||
max_length = max(df[col].astype(str).map(len).max(), len(col)) + 2 # Add a bit of padding
|
||||
column_widths[col] = max_length
|
||||
|
||||
for idx, width in enumerate(column_widths.values()):
|
||||
worksheet.column_dimensions[get_column_letter(idx + 1)].width = width
|
||||
|
||||
# Add a bold header row (A, B, C, D, etc.)
|
||||
for cell in worksheet[1]:
|
||||
cell.font = cell.font.copy(bold=True)
|
||||
|
||||
# Let the user know the file has been saved
|
||||
print(f"Excel file '{file_name}' has been created successfully.")
|
Loading…
Reference in New Issue
Block a user