CreateNodeProxyConfigWithLogger creates a proxy configuration for a node VNC shell connection with shared logger.
(client *api.Client, nodeName string, sharedLogger *logger.Logger)
| 484 | |
| 485 | // CreateNodeProxyConfigWithLogger creates a proxy configuration for a node VNC shell connection with shared logger. |
| 486 | func CreateNodeProxyConfigWithLogger(client *api.Client, nodeName string, sharedLogger *logger.Logger) (*ProxyConfig, error) { |
| 487 | var configLogger *logger.Logger |
| 488 | |
| 489 | if sharedLogger != nil { |
| 490 | configLogger = sharedLogger |
| 491 | } else { |
| 492 | // Create a logger for proxy configuration |
| 493 | var err error |
| 494 | |
| 495 | configLogger, err = logger.NewInternalLogger(logger.LevelDebug, "") |
| 496 | if err != nil { |
| 497 | configLogger = logger.NewSimpleLogger(logger.LevelInfo) |
| 498 | } |
| 499 | } |
| 500 | |
| 501 | configLogger.Info("Creating VNC proxy configuration for node: %s", nodeName) |
| 502 | |
| 503 | // Get VNC shell proxy details from Proxmox API |
| 504 | configLogger.Debug("Requesting VNC shell proxy from Proxmox API for node %s", nodeName) |
| 505 | |
| 506 | proxy, err := client.GetNodeVNCShellWithWebSocket(nodeName) |
| 507 | if err != nil { |
| 508 | configLogger.Error("Failed to get VNC shell proxy from API for node %s: %v", nodeName, err) |
| 509 | |
| 510 | return nil, fmt.Errorf("failed to create node VNC shell: %w", err) |
| 511 | } |
| 512 | |
| 513 | configLogger.Debug("VNC shell proxy response for node %s - Port: %s, Ticket length: %d, Password length: %d", |
| 514 | nodeName, proxy.Port, len(proxy.Ticket), len(proxy.Password)) |
| 515 | |
| 516 | // Extract hostname from client base URL |
| 517 | baseURL := client.GetBaseURL() |
| 518 | |
| 519 | u, err := url.Parse(baseURL) |
| 520 | if err != nil { |
| 521 | configLogger.Error("Failed to parse client base URL for node %s: %v", nodeName, err) |
| 522 | |
| 523 | return nil, fmt.Errorf("failed to parse base URL: %w", err) |
| 524 | } |
| 525 | |
| 526 | configLogger.Debug("Extracted Proxmox host for node %s: %s", nodeName, u.Host) |
| 527 | |
| 528 | // Get authentication token |
| 529 | authToken := client.GetAuthToken() |
| 530 | configLogger.Debug("Authentication token type for node %s: %s", nodeName, getAuthTokenType(authToken)) |
| 531 | |
| 532 | // For node shells, use the ticket as password if no password is generated |
| 533 | password := proxy.Password |
| 534 | if password == "" { |
| 535 | password = proxy.Ticket |
| 536 | |
| 537 | configLogger.Debug("Using ticket as password for node shell %s", nodeName) |
| 538 | } |
| 539 | |
| 540 | config := &ProxyConfig{ |
| 541 | Port: proxy.Port, |
| 542 | Ticket: proxy.Ticket, |
| 543 | Password: password, |
no test coverage detected