diff --git a/internal/deployer/deployer.go b/internal/deployer/deployer.go index 6efc001c..c023a236 100644 --- a/internal/deployer/deployer.go +++ b/internal/deployer/deployer.go @@ -32,18 +32,23 @@ func NewWithDeployNode(node *domain.WorkflowNode, certdata struct { } nodeConfig := node.GetConfigForDeploy() - - accessRepo := repository.NewAccessRepository() - access, err := accessRepo.GetById(context.Background(), nodeConfig.ProviderAccessId) - if err != nil { - return nil, fmt.Errorf("failed to get access #%s record: %w", nodeConfig.ProviderAccessId, err) + options := &deployerOptions{ + Provider: domain.DeployProviderType(nodeConfig.Provider), + ProviderAccessConfig: make(map[string]any), + ProviderDeployConfig: nodeConfig.ProviderConfig, } - deployer, err := createDeployer(&deployerOptions{ - Provider: domain.DeployProviderType(nodeConfig.Provider), - ProviderAccessConfig: access.Config, - ProviderDeployConfig: nodeConfig.ProviderConfig, - }) + accessRepo := repository.NewAccessRepository() + if nodeConfig.ProviderAccessId != "" { + access, err := accessRepo.GetById(context.Background(), nodeConfig.ProviderAccessId) + if err != nil { + return nil, fmt.Errorf("failed to get access #%s record: %w", nodeConfig.ProviderAccessId, err) + } else { + options.ProviderAccessConfig = access.Config + } + } + + deployer, err := createDeployer(options) if err != nil { return nil, err } diff --git a/internal/domain/access.go b/internal/domain/access.go index e88a3906..ccc33592 100644 --- a/internal/domain/access.go +++ b/internal/domain/access.go @@ -144,8 +144,6 @@ type AccessConfigForKubernetes struct { KubeConfig string `json:"kubeConfig,omitempty"` } -type AccessConfigForLocal struct{} - type AccessConfigForNamecheap struct { Username string `json:"username"` ApiKey string `json:"apiKey"` diff --git a/internal/domain/workflow.go b/internal/domain/workflow.go index 068920ae..841a041d 100644 --- a/internal/domain/workflow.go +++ b/internal/domain/workflow.go @@ -87,11 +87,11 @@ type WorkflowNodeConfigForUpload struct { } type WorkflowNodeConfigForDeploy struct { - Certificate string `json:"certificate"` // 前序节点输出的证书,形如“${NodeId}#certificate” - Provider string `json:"provider"` // 主机提供商 - ProviderAccessId string `json:"providerAccessId"` // 主机提供商授权记录 ID - ProviderConfig map[string]any `json:"providerConfig"` // 主机提供商额外配置 - SkipOnLastSucceeded bool `json:"skipOnLastSucceeded"` // 上次部署成功时是否跳过 + Certificate string `json:"certificate"` // 前序节点输出的证书,形如“${NodeId}#certificate” + Provider string `json:"provider"` // 主机提供商 + ProviderAccessId string `json:"providerAccessId,omitempty"` // 主机提供商授权记录 ID + ProviderConfig map[string]any `json:"providerConfig,omitempty"` // 主机提供商额外配置 + SkipOnLastSucceeded bool `json:"skipOnLastSucceeded"` // 上次部署成功时是否跳过 } type WorkflowNodeConfigForNotify struct { diff --git a/ui/src/components/access/AccessForm.tsx b/ui/src/components/access/AccessForm.tsx index 75660cb2..7b1a8101 100644 --- a/ui/src/components/access/AccessForm.tsx +++ b/ui/src/components/access/AccessForm.tsx @@ -35,7 +35,6 @@ import AccessFormGoogleTrustServicesConfig from "./AccessFormGoogleTrustServices import AccessFormHuaweiCloudConfig from "./AccessFormHuaweiCloudConfig"; import AccessFormJDCloudConfig from "./AccessFormJDCloudConfig"; import AccessFormKubernetesConfig from "./AccessFormKubernetesConfig"; -import AccessFormLocalConfig from "./AccessFormLocalConfig"; import AccessFormNamecheapConfig from "./AccessFormNamecheapConfig"; import AccessFormNameDotComConfig from "./AccessFormNameDotComConfig"; import AccessFormNameSiloConfig from "./AccessFormNameSiloConfig"; @@ -159,8 +158,6 @@ const AccessForm = forwardRef(({ className, return ; case ACCESS_PROVIDERS.KUBERNETES: return ; - case ACCESS_PROVIDERS.LOCAL: - return ; case ACCESS_PROVIDERS.NAMECHEAP: return ; case ACCESS_PROVIDERS.NAMEDOTCOM: diff --git a/ui/src/components/access/AccessFormLocalConfig.tsx b/ui/src/components/access/AccessFormLocalConfig.tsx deleted file mode 100644 index cde72374..00000000 --- a/ui/src/components/access/AccessFormLocalConfig.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Form, type FormInstance } from "antd"; - -import { type AccessConfigForLocal } from "@/domain/access"; - -type AccessFormLocalConfigFieldValues = Nullish; - -export type AccessFormLocalConfigProps = { - form: FormInstance; - formName: string; - disabled?: boolean; - initialValues?: AccessFormLocalConfigFieldValues; - onValuesChange?: (values: AccessFormLocalConfigFieldValues) => void; -}; - -const initFormModel = (): AccessFormLocalConfigFieldValues => { - return {}; -}; - -const AccessFormLocalConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormLocalConfigProps) => { - const handleFormChange = (_: unknown, values: any) => { - onValuesChange?.(values); - }; - - return ( -
- ); -}; - -export default AccessFormLocalConfig; diff --git a/ui/src/components/provider/AccessProviderSelect.tsx b/ui/src/components/provider/AccessProviderSelect.tsx index fb38419e..bd68227c 100644 --- a/ui/src/components/provider/AccessProviderSelect.tsx +++ b/ui/src/components/provider/AccessProviderSelect.tsx @@ -24,6 +24,7 @@ const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProvid key: item.type, value: item.type, label: t(item.name), + disabled: item.builtin, data: item, })) ); @@ -35,7 +36,7 @@ const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProvid
- + {t(provider?.name ?? "")} diff --git a/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx b/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx index 9b88a65c..5bb4fb0c 100644 --- a/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx +++ b/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx @@ -97,7 +97,9 @@ const ApplyNodeConfigForm = forwardRef { if (!fieldCAProvider) return true; - return !!v; + + const provider = applyCAProvidersMap.get(fieldCAProvider); + return !!provider?.builtin || !!v; }, t("workflow_node.apply.form.ca_provider_access.placeholder")), caProviderConfig: z.any().nullish(), keyAlgorithm: z @@ -158,8 +160,10 @@ const ApplyNodeConfigForm = forwardRef { + // 内置的 CA 提供商(如 Let's Encrypt)无需显示授权信息字段 if (fieldCAProvider) { - setShowCAProviderAccess(true); + const provider = applyCAProvidersMap.get(fieldCAProvider); + setShowCAProviderAccess(!provider?.builtin); } else { setShowCAProviderAccess(false); } diff --git a/ui/src/components/workflow/node/DeployNodeConfigForm.tsx b/ui/src/components/workflow/node/DeployNodeConfigForm.tsx index c0ced71b..9b905f87 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigForm.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigForm.tsx @@ -125,8 +125,14 @@ const DeployNodeConfigForm = forwardRef { + if (!fieldProvider) return true; + + const provider = deployProvidersMap.get(fieldProvider); + return !!provider?.builtin || !!v; + }, t("workflow_node.deploy.form.provider_access.placeholder")), + providerConfig: z.any().nullish(), skipOnLastSucceeded: z.boolean().nullish(), }); const formRule = createSchemaFieldRule(formSchema); @@ -137,6 +143,17 @@ const DeployNodeConfigForm = forwardRef { + // 内置的部署提供商(如本地部署)无需显示授权信息字段 + if (fieldProvider) { + const provider = deployProvidersMap.get(fieldProvider); + setShowProviderAccess(!provider?.builtin); + } else { + setShowProviderAccess(false); + } + }, [fieldProvider]); + const [nestedFormInst] = Form.useForm(); const nestedFormName = useAntdFormName({ form: nestedFormInst, name: "workflowNodeDeployConfigFormProviderConfigForm" }); const nestedFormEl = useMemo(() => { @@ -368,7 +385,7 @@ const DeployNodeConfigForm = forwardRef - +