init: workspace opencode sync
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
||||
import paramiko
|
||||
import re
|
||||
|
||||
client = paramiko.SSHClient()
|
||||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
client.connect('192.168.100.2', username='mi4', password='m14', look_for_keys=False, allow_agent=False)
|
||||
|
||||
chan = client.invoke_shell()
|
||||
chan.settimeout(30)
|
||||
|
||||
def send_cmd(cmd, wait=2):
|
||||
import time
|
||||
chan.send(cmd + '\n')
|
||||
time.sleep(wait)
|
||||
output = b''
|
||||
while chan.recv_ready():
|
||||
output += chan.recv(65535)
|
||||
return output.decode('utf-8', errors='replace')
|
||||
|
||||
# Get current scheduler on-event scripts
|
||||
schedulers = ["Bulanan2", "Bulanan4", "vc-2K3J", "vc-5K10J"]
|
||||
|
||||
for s in schedulers:
|
||||
print(f"\n=== Fixing scheduler: {s} ===")
|
||||
# Get current on-event
|
||||
stdin, stdout, stderr = client.exec_command(f'/system scheduler get {s} on-event')
|
||||
on_event = stdout.read().decode().strip()
|
||||
err = stderr.read().decode().strip()
|
||||
if err:
|
||||
print(f" ERROR reading {s}: {err}")
|
||||
continue
|
||||
|
||||
# Fix :pic to :pick
|
||||
fixed = on_event.replace(':pic', ':pick')
|
||||
if fixed == on_event:
|
||||
print(f" No :pic found - skipping")
|
||||
continue
|
||||
|
||||
# How many :pic -> :pick replacements?
|
||||
count = on_event.count(':pic')
|
||||
print(f" Fixed {count} occurrences of :pic")
|
||||
|
||||
# Set via API - need careful quoting
|
||||
# Use a temporary script approach to avoid quoting hell
|
||||
stdin, stdout, stderr = client.exec_command(f'/system scheduler set {s} disabled=no on-event="{fixed}"')
|
||||
result = stdout.read().decode().strip()
|
||||
err = stderr.read().decode().strip()
|
||||
if result: print(f" Result: {result}")
|
||||
if err: print(f" ERROR: {err}")
|
||||
|
||||
# Verify
|
||||
stdin, stdout, stderr = client.exec_command(f'/system scheduler get {s} on-event')
|
||||
verify = stdout.read().decode().strip()
|
||||
verr = stderr.read().decode().strip()
|
||||
if verr:
|
||||
print(f" Verify error: {verr}")
|
||||
elif ':pic' in verify:
|
||||
print(f" WARNING: :pic still present!")
|
||||
elif ':pick' in verify:
|
||||
print(f" VERIFIED: :pick present, script fixed!")
|
||||
else:
|
||||
print(f" UNEXPECTED: neither :pic nor :pick found")
|
||||
print(f" First 100 chars: {verify[:100]}")
|
||||
|
||||
# Now fix the on-login scripts in the hotspot profiles
|
||||
print(f"\n\n=== Fixing hotspot profile on-login scripts ===")
|
||||
profiles_to_fix = ["Bulanan2", "Bulanan4", "vc-2K3J", "vc-5K10J", "Family", "DevB2"]
|
||||
|
||||
for p in profiles_to_fix:
|
||||
print(f"\n--- Profile: {p} ---")
|
||||
stdin, stdout, stderr = client.exec_command(f'/ip hotspot user/profile get {p} on-login')
|
||||
on_login = stdout.read().decode().strip()
|
||||
err = stderr.read().decode().strip()
|
||||
if err:
|
||||
print(f" ERROR reading: {err}")
|
||||
continue
|
||||
|
||||
if ':pic' not in on_login:
|
||||
print(f" No :pic found (already fixed)")
|
||||
continue
|
||||
|
||||
count = on_login.count(':pic')
|
||||
fixed = on_login.replace(':pic', ':pick')
|
||||
print(f" Fixed {count} occurrences")
|
||||
|
||||
# It might be easier to just use the set command
|
||||
import time
|
||||
chan.send(f'/ip hotspot user/profile set {p} on-login="{fixed}"\n')
|
||||
time.sleep(1)
|
||||
while chan.recv_ready():
|
||||
time.sleep(0.5)
|
||||
|
||||
# Verify
|
||||
stdin, stdout, stderr = client.exec_command(f'/ip hotspot user/profile get {p} on-login')
|
||||
verify = stdout.read().decode().strip()
|
||||
verr = stderr.read().decode().strip()
|
||||
if verr:
|
||||
print(f" Verify error: {verr}")
|
||||
elif ':pic' in verify:
|
||||
print(f" WARNING: :pic still present in on-login!")
|
||||
elif ':pick' in verify:
|
||||
print(f" VERIFIED: on-login fixed!")
|
||||
else:
|
||||
print(f" First 100: {verify[:100]}")
|
||||
|
||||
client.close()
|
||||
print("\n\nDONE")
|
||||
Reference in New Issue
Block a user