diff --git a/internal/api/v1/docs/swagger.json b/internal/api/v1/docs/swagger.json index 39401166..880c7fed 100644 --- a/internal/api/v1/docs/swagger.json +++ b/internal/api/v1/docs/swagger.json @@ -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, diff --git a/internal/api/v1/docs/swagger.yaml b/internal/api/v1/docs/swagger.yaml index 7ea31f27..f446c56f 100644 --- a/internal/api/v1/docs/swagger.yaml +++ b/internal/api/v1/docs/swagger.yaml @@ -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: diff --git a/internal/proxmox/node.go b/internal/proxmox/node.go index 1772c836..57f78a0f 100644 --- a/internal/proxmox/node.go +++ b/internal/proxmox/node.go @@ -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/ diff --git a/internal/route/route.go b/internal/route/route.go index 7b3870bb..c75f6483 100644 --- a/internal/route/route.go +++ b/internal/route/route.go @@ -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 diff --git a/internal/types/idlewatcher.go b/internal/types/idlewatcher.go index 478d7d6f..c58a1c1b 100644 --- a/internal/types/idlewatcher.go +++ b/internal/types/idlewatcher.go @@ -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 (