mirror of
https://github.com/TheGrandWazoo/freenas-proxmox.git
synced 2026-09-30 03:51:27 +02:00
Adds _api_ws/_ws_connect/_ws_call and a _transport() auto-detector so _api() dispatches to REST or WebSocket per host based on the detected TrueNAS version -- storage.cfg is unchanged either way. Follows ADR-012's decided design: AnyEvent::WebSocket::Client for the transport, auth.login_with_api_key (not auth.login_ex, which needs a username this plugin has no way to know), and the JSON-RPC envelope hand-built with the existing JSON module rather than a dedicated RPC library. Live-verified end-to-end against .92 (TrueNAS-25.04.2.6, real SCALE box) through the actual plugin module, not just the diagnostic script: transport auto-detection, _api_global, portal/target queries, and the single-ID lookup mapping used by path()/qemu_blockdev_options() all confirmed working. This exercises every *read* (query) call the plugin makes. Caught and fixed one real bug during integration testing: /system/product_type returns the license tier (e.g. "COMMUNITY_EDITION"), not the product family -- CORE vs SCALE detection uses the /system/version string's major-version magnitude instead (SCALE's calendar versioning vs CORE's legacy 11.x-13.x range). Scope note (see file header): the *write* path (create/delete/update param shapes) follows TrueNAS's documented CRUDService conventions but has not yet been independently live-tested -- verify against .91/.92 before trusting alloc_image/free_image/snapshot operations in production on SCALE 25.04+. $VERSION bumped to 4.0.0. Adds libanyevent-perl and libanyevent-websocket-client-perl as package + CI lint dependencies. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>