diff --git a/src/pages/cluster-management/clusters.tsx b/src/pages/cluster-management/clusters.tsx index dc74cb31..3d6579a2 100644 --- a/src/pages/cluster-management/clusters.tsx +++ b/src/pages/cluster-management/clusters.tsx @@ -37,11 +37,7 @@ import { K8sStepsFromCluter } from './components/add-worker/config'; import PoolRows from './components/pool-rows'; -import { - ClusterStatusValueMap, - ProviderType, - ProviderValueMap -} from './config'; +import { ProviderType, ProviderValueMap } from './config'; import { ClusterListItem, CredentialListItem, @@ -79,7 +75,8 @@ const Clusters: React.FC = () => { useExpandedRowKeys(expandAtom); const navigate = useNavigate(); const intl = useIntl(); - const { handleAddWorker, AddWorkerModal, setStepList } = useAddWorker({}); + const { handleAddWorker, checkDefaultCluster, AddWorkerModal, setStepList } = + useAddWorker({}); const [openAddModal, setOpenAddModal] = useState<{ open: boolean; @@ -265,12 +262,12 @@ const Clusters: React.FC = () => { dataSource.loadend && dataSource.dataList?.length > 0 ) { - const targetCluster = dataSource.dataList.find( - (cluster) => - cluster.state === ClusterStatusValueMap.Ready && - !cluster.workers && - !cluster.worker_pools?.length - ); + const list = dataSource.dataList?.map((item) => ({ + label: item.name, + value: item.id, + ...item + })); + const targetCluster = checkDefaultCluster(list); if (targetCluster) { const actionMap = { @@ -280,7 +277,7 @@ const Clusters: React.FC = () => { }; handleSelect( actionMap[targetCluster.provider as string], - targetCluster + targetCluster as ListItem ); // reset session setClusterSession(null); diff --git a/src/pages/cluster-management/components/add-worker/add-worker-context.ts b/src/pages/cluster-management/components/add-worker/add-worker-context.ts index 98b626fd..20ee6d1b 100644 --- a/src/pages/cluster-management/components/add-worker/add-worker-context.ts +++ b/src/pages/cluster-management/components/add-worker/add-worker-context.ts @@ -17,7 +17,7 @@ interface AddWorkerContextProps { token: string; image: string; server_url: string; - cluster_id: number; + cluster_id: number | null; }; registerField: (key: SummaryDataKey) => () => void; updateField: (key: SummaryDataKey, value: any) => void; diff --git a/src/pages/cluster-management/components/add-worker/add-worker-step.tsx b/src/pages/cluster-management/components/add-worker/add-worker-step.tsx index 5a0af073..4e316902 100644 --- a/src/pages/cluster-management/components/add-worker/add-worker-step.tsx +++ b/src/pages/cluster-management/components/add-worker/add-worker-step.tsx @@ -41,7 +41,7 @@ type AddWorkerProps = { token: string; image: string; server_url: string; - cluster_id: number; + cluster_id: number | null; [key: string]: any; }; }; diff --git a/src/pages/cluster-management/components/add-worker/index.tsx b/src/pages/cluster-management/components/add-worker/index.tsx index 4b5b6f1a..3429f9c8 100644 --- a/src/pages/cluster-management/components/add-worker/index.tsx +++ b/src/pages/cluster-management/components/add-worker/index.tsx @@ -32,12 +32,12 @@ type AddWorkerProps = { stepList: StepName[]; onClusterChange?: (value: number, row?: any) => void; onCancel: () => void; - cluster_id: number; + cluster_id: number | null; registrationInfo?: { token: string; image: string; server_url: string; - cluster_id: number; + cluster_id: number | null; }; }; @@ -64,12 +64,12 @@ const AddWorker: React.FC = (props) => { token: string; image: string; server_url: string; - cluster_id: number; + cluster_id: number | null; }>({ token: '', image: '', server_url: '', - cluster_id: 0 + cluster_id: null }); const handleOnClusterChange = async (value: number, row?: any) => { diff --git a/src/pages/cluster-management/hooks/use-add-worker.tsx b/src/pages/cluster-management/hooks/use-add-worker.tsx index 7edc1a4f..33b63ba9 100644 --- a/src/pages/cluster-management/hooks/use-add-worker.tsx +++ b/src/pages/cluster-management/hooks/use-add-worker.tsx @@ -21,12 +21,12 @@ const useAddWorker = (props: { open: boolean; provider: ProviderType; title: string; - cluster_id: number; + cluster_id: number | null; }>({ open: false, provider: null, title: '', - cluster_id: 0 + cluster_id: null }); const handleAddWorker = async (row: ClusterListItem) => { @@ -43,7 +43,12 @@ const useAddWorker = (props: { open: true, title: title, provider: row.provider as ProviderType, - cluster_id: row.id + cluster_id: [ + ProviderValueMap.Docker, + ProviderValueMap.Kubernetes + ].includes(row.provider as string) + ? row.id + : null }); } catch (error: any) { message.error(error?.message || 'Failed to fetch cluster token'); @@ -67,6 +72,38 @@ const useAddWorker = (props: { .filter((item) => item.state === ClusterStatusValueMap.Ready); }, [clusterList]); + const checkDefaultCluster = ( + clusterList: Global.BaseOption[] + ) => { + // select default and ready cluster first, digitalocean no READY state + let currentData = clusterList.find( + (item) => item.is_default && item.state === ClusterStatusValueMap.Ready + ); + + if (!currentData) { + // select docker ready cluster + currentData = clusterList.find( + (item) => + item.provider === ProviderValueMap.Docker && + item.state === ClusterStatusValueMap.Ready + ); + } + + if (!currentData) { + // select any ready cluster + currentData = clusterList.find( + (item) => item.state === ClusterStatusValueMap.Ready + ); + } + + if (!currentData) { + // maybe no ready a digitalocean cluster + currentData = clusterList[0]; + } + + return currentData || null; + }; + const AddWorkerModal = ( @@ -90,6 +127,7 @@ const useAddWorker = (props: { return { handleAddWorker, + checkDefaultCluster, AddWorkerModal, setStepList }; diff --git a/src/pages/resources/components/workers.tsx b/src/pages/resources/components/workers.tsx index add491b7..fb5c7616 100644 --- a/src/pages/resources/components/workers.tsx +++ b/src/pages/resources/components/workers.tsx @@ -5,10 +5,6 @@ import useTableFetch from '@/hooks/use-table-fetch'; import PageBox from '@/pages/_components/page-box'; import { queryClusterList } from '@/pages/cluster-management/apis'; import { DockerStepsFromWorker } from '@/pages/cluster-management/components/add-worker/config'; -import { - ClusterStatusValueMap, - ProviderValueMap -} from '@/pages/cluster-management/config'; import { ClusterListItem } from '@/pages/cluster-management/config/types'; import useAddWorker from '@/pages/cluster-management/hooks/use-add-worker'; import useNoResourceResult from '@/pages/llmodels/hooks/use-no-resource-result'; @@ -82,10 +78,11 @@ const Workers: React.FC = () => { open: false, currentData: null }); - const { handleAddWorker, AddWorkerModal, setStepList } = useAddWorker({ - clusterList: clusterData.list, - clusterLoading: clusterData.loading - }); + const { handleAddWorker, checkDefaultCluster, AddWorkerModal, setStepList } = + useAddWorker({ + clusterList: clusterData.list, + clusterLoading: clusterData.loading + }); const getClusterList = async () => { try { @@ -105,6 +102,7 @@ const Workers: React.FC = () => { value: item.id, id: item.id, state: item.state, + is_default: item.is_default, provider: item.provider })); setClusterData({ @@ -193,16 +191,9 @@ const Workers: React.FC = () => { }); const handleOnAddWorker = () => { - let currentData = clusterData.list.find( - (item) => - item.provider === ProviderValueMap.Docker && - item.state === ClusterStatusValueMap.Ready - ); - if (!currentData) { - currentData = clusterData.list[0]; - } - if (currentData) { - handleAddWorker(currentData as ClusterListItem); + const targetCluster = checkDefaultCluster(clusterData.list); + if (targetCluster) { + handleAddWorker(targetCluster as ClusterListItem); } else { message.info(intl.formatMessage({ id: 'noresult.resources.cluster' })); }