From 8cbde49393fee57a5c236362b315b148c49c2edd Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 28 Jul 2025 13:28:45 +0800 Subject: [PATCH] feat: support configuring node name on deployment to 1panel site --- internal/deployer/providers.go | 1 + .../providers/1panel-site/1panel_site.go | 23 +++++++++++++++---- pkg/sdk3rd/1panel/v2/client.go | 14 +++++++++++ .../DeployNodeConfigForm1PanelSiteConfig.tsx | 11 +++++++++ .../i18n/locales/en/nls.workflow.nodes.json | 5 +++- .../i18n/locales/zh/nls.workflow.nodes.json | 3 +++ 6 files changed, 51 insertions(+), 6 deletions(-) diff --git a/internal/deployer/providers.go b/internal/deployer/providers.go index 61ae8785..88a36ca2 100644 --- a/internal/deployer/providers.go +++ b/internal/deployer/providers.go @@ -146,6 +146,7 @@ func createSSLDeployerProvider(options *deployerProviderOptions) (core.SSLDeploy ApiVersion: access.ApiVersion, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, + NodeName: xmaps.GetString(options.ProviderServiceConfig, "nodeName"), ResourceType: p1PanelSite.ResourceType(xmaps.GetOrDefaultString(options.ProviderServiceConfig, "resourceType", string(p1PanelSite.RESOURCE_TYPE_WEBSITE))), WebsiteId: xmaps.GetInt64(options.ProviderServiceConfig, "websiteId"), CertificateId: xmaps.GetInt64(options.ProviderServiceConfig, "certificateId"), diff --git a/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go b/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go index 985809d7..ffce4d26 100644 --- a/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go +++ b/pkg/core/ssl-deployer/providers/1panel-site/1panel_site.go @@ -24,6 +24,9 @@ type SSLDeployerProviderConfig struct { ApiKey string `json:"apiKey"` // 是否允许不安全的连接。 AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"` + // 子节点名称。 + // 选填。 + NodeName string `json:"nodeName,omitempty"` // 部署资源类型。 ResourceType ResourceType `json:"resourceType"` // 网站 ID。 @@ -48,7 +51,7 @@ func NewSSLDeployerProvider(config *SSLDeployerProviderConfig) (*SSLDeployerProv return nil, errors.New("the configuration of the ssl deployer provider is nil") } - client, err := createSDKClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections) + client, err := createSDKClient(config.ServerUrl, config.ApiVersion, config.ApiKey, config.AllowInsecureConnections, config.NodeName) if err != nil { return nil, fmt.Errorf("could not create sdk client: %w", err) } @@ -244,7 +247,7 @@ const ( sdkVersionV2 = "v2" ) -func createSDKClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) (any, error) { +func createSDKClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool, nodeName string) (any, error) { if apiVersion == sdkVersionV1 { client, err := onepanelsdk.NewClient(serverUrl, apiKey) if err != nil { @@ -257,9 +260,19 @@ func createSDKClient(serverUrl, apiVersion, apiKey string, skipTlsVerify bool) ( return client, nil } else if apiVersion == sdkVersionV2 { - client, err := onepanelsdkv2.NewClient(serverUrl, apiKey) - if err != nil { - return nil, err + var client *onepanelsdkv2.Client + if nodeName == "" { + temp, err := onepanelsdkv2.NewClient(serverUrl, apiKey) + if err != nil { + return nil, err + } + client = temp + } else { + temp, err := onepanelsdkv2.NewClientWithNode(serverUrl, apiKey, nodeName) + if err != nil { + return nil, err + } + client = temp } if skipTlsVerify { diff --git a/pkg/sdk3rd/1panel/v2/client.go b/pkg/sdk3rd/1panel/v2/client.go index 3a74c5bf..64b604bf 100644 --- a/pkg/sdk3rd/1panel/v2/client.go +++ b/pkg/sdk3rd/1panel/v2/client.go @@ -47,6 +47,20 @@ func NewClient(serverUrl, apiKey string) (*Client, error) { return &Client{client}, nil } +func NewClientWithNode(serverUrl, apiKey, node string) (*Client, error) { + client, err := NewClient(serverUrl, apiKey) + if err != nil { + return nil, err + } + + if node == "" { + node = "local" + } + client.client.SetHeader("CurrentNode", node) + + return client, nil +} + func (c *Client) SetTimeout(timeout time.Duration) *Client { c.client.SetTimeout(timeout) return c diff --git a/ui/src/components/workflow/node/DeployNodeConfigForm1PanelSiteConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigForm1PanelSiteConfig.tsx index e0e7e037..cd672dcd 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigForm1PanelSiteConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigForm1PanelSiteConfig.tsx @@ -6,6 +6,7 @@ import { z } from "zod/v4"; import Show from "@/components/Show"; type DeployNodeConfigForm1PanelSiteConfigFieldValues = Nullish<{ + nodeName?: string; resourceType: string; websiteId?: string | number; certificateId?: string | number; @@ -38,6 +39,7 @@ const DeployNodeConfigForm1PanelSiteConfig = ({ const { t } = useTranslation(); const formSchema = z.object({ + nodeName: z.string().nullish(), resourceType: z.literal([RESOURCE_TYPE_WEBSITE, RESOURCE_TYPE_CERTIFICATE], t("workflow_node.deploy.form.1panel_site_resource_type.placeholder")), websiteId: z .union([z.string(), z.number().int()]) @@ -71,6 +73,15 @@ const DeployNodeConfigForm1PanelSiteConfig = ({ name={formName} onValuesChange={handleFormChange} > + } + > + + +