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

Function CreateVMProxyConfigWithLogger

internal/vnc/proxy.go:408–478  ·  view source on GitHub ↗

CreateVMProxyConfigWithLogger creates a proxy configuration for a VM VNC connection with shared logger.

(client *api.Client, vm *api.VM, sharedLogger *logger.Logger)

Source from the content-addressed store, hash-verified

406
407// CreateVMProxyConfigWithLogger creates a proxy configuration for a VM VNC connection with shared logger.
408func CreateVMProxyConfigWithLogger(client *api.Client, vm *api.VM, sharedLogger *logger.Logger) (*ProxyConfig, error) {
409 var configLogger *logger.Logger
410
411 if sharedLogger != nil {
412 configLogger = sharedLogger
413 } else {
414 // Create a logger for proxy configuration
415 var err error
416
417 configLogger, err = logger.NewInternalLogger(logger.LevelDebug, "")
418 if err != nil {
419 configLogger = logger.NewSimpleLogger(logger.LevelInfo)
420 }
421 }
422
423 configLogger.Info("Creating VNC proxy configuration for VM: %s (ID: %d, Type: %s, Node: %s)",
424 vm.Name, vm.ID, vm.Type, vm.Node)
425
426 // Get VNC proxy details from Proxmox API
427 configLogger.Debug("Requesting VNC proxy from Proxmox API for VM %s", vm.Name)
428
429 proxy, err := client.GetVNCProxyWithWebSocket(vm)
430 if err != nil {
431 configLogger.Error("Failed to get VNC proxy from API for VM %s: %v", vm.Name, err)
432
433 return nil, fmt.Errorf("failed to create VNC proxy: %w", err)
434 }
435
436 configLogger.Debug("VNC proxy response for VM %s - Port: %s, Ticket length: %d, Password length: %d",
437 vm.Name, proxy.Port, len(proxy.Ticket), len(proxy.Password))
438
439 // Extract hostname from client base URL
440 baseURL := client.GetBaseURL()
441
442 u, err := url.Parse(baseURL)
443 if err != nil {
444 configLogger.Error("Failed to parse client base URL for VM %s: %v", vm.Name, err)
445
446 return nil, fmt.Errorf("failed to parse base URL: %w", err)
447 }
448
449 configLogger.Debug("Extracted Proxmox host for VM %s: %s", vm.Name, u.Host)
450
451 // Get authentication token
452 authToken := client.GetAuthToken()
453 configLogger.Debug("Authentication token type for VM %s: %s", vm.Name, getAuthTokenType(authToken))
454
455 // For LXC containers, use the ticket as password if no password is generated
456 password := proxy.Password
457 if password == "" && vm.Type == api.VMTypeLXC {
458 password = proxy.Ticket
459
460 configLogger.Debug("Using ticket as password for LXC container %s", vm.Name)
461 }
462
463 config := &ProxyConfig{
464 Port: proxy.Port,
465 Ticket: proxy.Ticket,

Callers 2

CreateVMProxyConfigFunction · 0.85

Calls 9

InfoMethod · 0.95
DebugMethod · 0.95
ErrorMethod · 0.95
NewInternalLoggerFunction · 0.92
NewSimpleLoggerFunction · 0.92
getAuthTokenTypeFunction · 0.85
GetBaseURLMethod · 0.80
GetAuthTokenMethod · 0.80

Tested by

no test coverage detected