feat: support configuring node name on deployment to 1panel site

This commit is contained in:
Fu Diwei
2025-07-28 13:35:55 +08:00
committed by RHQYZ
parent b8c19eaddf
commit 8cbde49393
6 changed files with 51 additions and 6 deletions
+1
View File
@@ -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"),
@@ -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 {
+14
View File
@@ -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
@@ -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}
>
<Form.Item
name="nodeName"
label={t("workflow_node.deploy.form.1panel_site_node_name.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_site_node_name.tooltip") }}></span>}
>
<Input allowClear placeholder={t("workflow_node.deploy.form.1panel_site_node_name.placeholder")} />
</Form.Item>
<Form.Item name="resourceType" label={t("workflow_node.deploy.form.1panel_site_resource_type.label")} rules={[formRule]}>
<Select placeholder={t("workflow_node.deploy.form.1panel_site_resource_type.placeholder")}>
<Select.Option key={RESOURCE_TYPE_WEBSITE} value={RESOURCE_TYPE_WEBSITE}>
@@ -127,6 +127,10 @@
"workflow_node.deploy.form.certificate.tooltip": "The certificate to be deployed comes from the previous nodes of application or upload.",
"workflow_node.deploy.form.params_config.label": "Parameter settings",
"workflow_node.deploy.form.1panel_console_auto_restart.label": "Auto restart 1Panel after deployment",
"workflow_node.deploy.form.1panel_site_node_name.label": "1Panel node name (Optional)",
"workflow_node.deploy.form.1panel_site_node_name.placeholder": "Please enter 1Panel node name",
"workflow_node.deploy.form.1panel_site_node_name.tooltip": "You can find it on 1Panel dashboard. Only used for 1Panel v2+.",
"workflow_node.deploy.form.aliyun_alb_region.label": "Alibaba Cloud ALB region",
"workflow_node.deploy.form.1panel_site_resource_type.label": "Resource type",
"workflow_node.deploy.form.1panel_site_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.1panel_site_resource_type.option.website.label": "Website",
@@ -137,7 +141,6 @@
"workflow_node.deploy.form.1panel_site_certificate_id.label": "1Panel certificate ID",
"workflow_node.deploy.form.1panel_site_certificate_id.placeholder": "Please enter 1Panel certificate ID",
"workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "You can find it on 1Panel dashboard.",
"workflow_node.deploy.form.aliyun_alb_region.label": "Alibaba Cloud ALB region",
"workflow_node.deploy.form.aliyun_alb_region.placeholder": "Please enter Alibaba Cloud ALB region (e.g. cn-hangzhou)",
"workflow_node.deploy.form.aliyun_alb_region.tooltip": "For more information, see <a href=\"https://www.alibabacloud.com/help/en/slb/application-load-balancer/product-overview/supported-regions-and-zones\" target=\"_blank\">https://www.alibabacloud.com/help/en/slb/application-load-balancer/product-overview/supported-regions-and-zones</a>",
"workflow_node.deploy.form.aliyun_alb_resource_type.label": "Resource type",
@@ -126,6 +126,9 @@
"workflow_node.deploy.form.certificate.tooltip": "待部署证书来自之前的申请或上传节点。如果选项为空请先确保前序节点配置正确。",
"workflow_node.deploy.form.params_config.label": "参数设置",
"workflow_node.deploy.form.1panel_console_auto_restart.label": "部署后自动重启 1Panel 服务",
"workflow_node.deploy.form.1panel_site_node_name.label": "1Panel 子节点名称(可选)",
"workflow_node.deploy.form.1panel_site_node_name.placeholder": "请输入 1Panel 子节点名称",
"workflow_node.deploy.form.1panel_site_node_name.tooltip": "请登录 1Panel 面板查看。仅 1Panel v2+ 需要。<br><br>不填写时,将替换主控节点证书;否则,将替换被控节点证书。",
"workflow_node.deploy.form.1panel_site_resource_type.label": "证书部署方式",
"workflow_node.deploy.form.1panel_site_resource_type.placeholder": "请选择证书部署方式",
"workflow_node.deploy.form.1panel_site_resource_type.option.website.label": "替换指定网站的证书",