""" MikrotikSetNTPAction — configures NTP server on RouterOS via SSH. """ from app.models.device import Device from app.models.object import Object from app.plugins.base import ActionResult, BaseAction, Emitter from app.services import ssh as ssh_service class MikrotikSetNTPAction(BaseAction): name = "mikrotik_set_ntp" display_name = "Mikrotik: Set NTP Server" compatible_categories = ["mikrotik"] params_schema = [ { "name": "server", "type": "string", "label": "NTP Server", "required": True, "placeholder": "pool.ntp.org", }, ] async def execute( self, device: Device, obj: Object, params: dict, emit: Emitter ) -> ActionResult: server = params.get("server", "").strip() if not server: return ActionResult(success=False, error="No NTP server specified") # Enable NTP client and set server commands = [ "/system ntp client set enabled=yes", f"/system ntp client set servers={server}", ] for cmd in commands: await emit(f"[{device.ip}] {cmd}", "info") result = await ssh_service.run_command(device, obj, cmd) if result.error: await emit(f"[{device.ip}] Error: {result.error}", "error") return ActionResult( success=False, stdout=result.stdout, stderr=result.stderr, exit_code=result.exit_code, error=result.error, ) # Verify verify = await ssh_service.run_command(device, obj, "/system ntp client print") await emit(f"[{device.ip}] Verify: {verify.stdout[:200]}", "info") return ActionResult( success=True, stdout=verify.stdout, exit_code=0, data={"server": server}, )