refactor(proxmox): consolidate NodeConfig and add service field

Centralize Proxmox node configuration by moving `ProxmoxConfig` from `internal/types/idlewatcher.go` to a new `NodeConfig` struct in `internal/proxmox/node.go`.

- Add `proxmox` field to route; allowing `proxy.app.proxmox` labels and corresponding route file config
- Added `service` optional field to NodeConfig for service identification
- Integrated Proxmox config directly into Route struct with proper validation
- Propagate Proxmox settings to Idlewatcher during route validation
- Updated swagger documentation to reflect schema changes
This commit is contained in:
yusing
2026-01-24 21:33:47 +08:00
parent 95a72930b5
commit 9a96f3cc53
5 changed files with 48 additions and 10 deletions

View File

@@ -3750,7 +3750,7 @@
"x-omitempty": false
},
"proxmox": {
"$ref": "#/definitions/ProxmoxConfig",
"$ref": "#/definitions/ProxmoxNodeConfig",
"x-nullable": false,
"x-omitempty": false
},
@@ -4369,7 +4369,7 @@
"x-nullable": false,
"x-omitempty": false
},
"ProxmoxConfig": {
"ProxmoxNodeConfig": {
"type": "object",
"required": [
"node",
@@ -4381,6 +4381,9 @@
"x-nullable": false,
"x-omitempty": false
},
"service": {
"type": "string"
},
"vmid": {
"type": "integer",
"x-nullable": false,
@@ -4600,6 +4603,14 @@
"type": "string",
"x-nullable": true
},
"proxmox": {
"allOf": [
{
"$ref": "#/definitions/ProxmoxNodeConfig"
}
],
"x-nullable": true
},
"purl": {
"type": "string",
"x-nullable": false,
@@ -6069,6 +6080,14 @@
"type": "string",
"x-nullable": true
},
"proxmox": {
"allOf": [
{
"$ref": "#/definitions/ProxmoxNodeConfig"
}
],
"x-nullable": true
},
"purl": {
"type": "string",
"x-nullable": false,

View File

@@ -641,7 +641,7 @@ definitions:
no_loading_page:
type: boolean
proxmox:
$ref: '#/definitions/ProxmoxConfig'
$ref: '#/definitions/ProxmoxNodeConfig'
start_endpoint:
description: Optional path that must be hit to start container
type: string
@@ -933,10 +933,12 @@ definitions:
- ProviderTypeDocker
- ProviderTypeFile
- ProviderTypeAgent
ProxmoxConfig:
ProxmoxNodeConfig:
properties:
node:
type: string
service:
type: string
vmid:
type: integer
required:
@@ -1050,6 +1052,10 @@ definitions:
description: for backward compatibility
type: string
x-nullable: true
proxmox:
allOf:
- $ref: '#/definitions/ProxmoxNodeConfig'
x-nullable: true
purl:
type: string
response_header_timeout:
@@ -1849,6 +1855,10 @@ definitions:
description: for backward compatibility
type: string
x-nullable: true
proxmox:
allOf:
- $ref: '#/definitions/ProxmoxNodeConfig'
x-nullable: true
purl:
type: string
response_header_timeout:

View File

@@ -10,6 +10,12 @@ import (
"github.com/yusing/goutils/pool"
)
type NodeConfig struct {
Node string `json:"node" validate:"required"`
VMID int `json:"vmid" validate:"required"`
Service string `json:"service,omitempty"`
} // @name ProxmoxNodeConfig
type Node struct {
name string
id string // likely node/<name>

View File

@@ -64,6 +64,8 @@ type (
AccessLog *accesslog.RequestLoggerConfig `json:"access_log,omitempty" extensions:"x-nullable"`
Agent string `json:"agent,omitempty"`
Proxmox *proxmox.NodeConfig `json:"proxmox,omitempty" extensions:"x-nullable"`
Idlewatcher *types.IdlewatcherConfig `json:"idlewatcher,omitempty" extensions:"x-nullable"`
Metadata `deserialize:"-"`
@@ -176,6 +178,10 @@ func (r *Route) validate() gperr.Error {
}
}, r.started)
if r.Proxmox != nil && r.Idlewatcher != nil {
r.Idlewatcher.Proxmox = r.Proxmox
}
if r.Idlewatcher != nil && r.Idlewatcher.Proxmox != nil {
node := r.Idlewatcher.Proxmox.Node
vmid := r.Idlewatcher.Proxmox.VMID

View File

@@ -6,13 +6,14 @@ import (
"strings"
"time"
"github.com/yusing/godoxy/internal/proxmox"
gperr "github.com/yusing/goutils/errs"
)
type (
IdlewatcherProviderConfig struct {
Proxmox *ProxmoxConfig `json:"proxmox,omitempty"`
Docker *DockerConfig `json:"docker,omitempty"`
Proxmox *proxmox.NodeConfig `json:"proxmox,omitempty"`
Docker *DockerConfig `json:"docker,omitempty"`
} // @name IdlewatcherProviderConfig
IdlewatcherConfigBase struct {
// 0: no idle watcher.
@@ -42,10 +43,6 @@ type (
ContainerID string `json:"container_id" validate:"required"`
ContainerName string `json:"container_name" validate:"required"`
} // @name DockerConfig
ProxmoxConfig struct {
Node string `json:"node" validate:"required"`
VMID int `json:"vmid" validate:"required"`
} // @name ProxmoxConfig
)
const (