MCPcopy Create free account
hub / github.com/devnullvoid/pvetui / GetVNCProxyWithWebSocket

Method GetVNCProxyWithWebSocket

pkg/api/vm_vnc.go:87–178  ·  view source on GitHub ↗

GetVNCProxyWithWebSocket creates a VNC proxy for a VM with WebSocket support and one-time password.

(vm *VM)

Source from the content-addressed store, hash-verified

85
86// GetVNCProxyWithWebSocket creates a VNC proxy for a VM with WebSocket support and one-time password.
87func (c *Client) GetVNCProxyWithWebSocket(vm *VM) (*VNCProxyResponse, error) {
88 c.logger.Info("Creating VNC proxy with WebSocket for VM: %s (ID: %d, Type: %s, Node: %s)", vm.Name, vm.ID, vm.Type, vm.Node)
89
90 if vm.Type != VMTypeQemu && vm.Type != VMTypeLXC {
91 c.logger.Error("VNC proxy with WebSocket not supported for VM type: %s", vm.Type)
92
93 return nil, fmt.Errorf("VNC proxy only available for QEMU VMs and LXC containers")
94 }
95
96 var res map[string]interface{}
97
98 path := fmt.Sprintf("/nodes/%s/%s/%d/vncproxy", vm.Node, vm.Type, vm.ID)
99
100 c.logger.Debug("VNC proxy WebSocket API path for VM %s: %s", vm.Name, path)
101
102 // Different parameters based on VM type
103 // LXC containers don't support generate-password parameter
104 var data map[string]interface{}
105 if vm.Type == VMTypeLXC {
106 // LXC containers only support websocket parameter
107 data = map[string]interface{}{
108 "websocket": 1,
109 }
110
111 c.logger.Debug("Using LXC-compatible parameters for VM %s (no generate-password)", vm.Name)
112 } else {
113 // QEMU VMs support both websocket and generate-password
114 data = map[string]interface{}{
115 "websocket": 1,
116 "generate-password": 1,
117 }
118
119 c.logger.Debug("Using QEMU parameters for VM %s (with generate-password)", vm.Name)
120 }
121
122 c.logger.Debug("VNC proxy WebSocket request data for VM %s: %+v", vm.Name, data)
123
124 if err := c.PostWithResponse(path, data, &res); err != nil {
125 c.logger.Error("Failed to create VNC proxy with WebSocket for VM %s: %v", vm.Name, err)
126
127 return nil, fmt.Errorf("failed to create VNC proxy with WebSocket: %w", err)
128 }
129
130 c.logger.Debug("VNC proxy WebSocket API response for VM %s: %+v", vm.Name, res)
131
132 responseData, ok := res["data"].(map[string]interface{})
133 if !ok {
134 c.logger.Error("Unexpected VNC proxy WebSocket response format for VM %s", vm.Name)
135
136 return nil, fmt.Errorf("unexpected VNC proxy response format")
137 }
138
139 response := &VNCProxyResponse{}
140
141 if ticket, ok := responseData["ticket"].(string); ok {
142 response.Ticket = ticket
143 c.logger.Debug("VNC proxy WebSocket ticket obtained for VM %s (length: %d)", vm.Name, len(ticket))
144 }

Callers 1

Calls 4

PostWithResponseMethod · 0.95
InfoMethod · 0.65
ErrorMethod · 0.65
DebugMethod · 0.65

Tested by

no test coverage detected