- New k8s_pod_spec form sections (image credentials, node selector, gpu vendor overrides) under k8s_options, replacing the legacy flat k8s_volume_mounts list. UI keys aligned to the backend wire shape (snake_case k8s_options + camelCase inside). - System default container registry is pre-filled into the first image credential when creating a new cluster; empty username/password are coerced to null on submit to match the Optional[str] backend schema. - Register cluster flow supports multi-runtime selection gated by the cluster's gpuVendorOverrides: non-override vendors stay single-select with an inline hint; multi-add only opens once an override vendor is picked, and non-override cards become disabled in that state. - Manifest URL emits multiple ?runtime= params; check-env step combines per-vendor commands; downstream steps are disabled when no vendor is selected. - Pre-validate gpuVendorOverrides at save time (non-empty selector, no duplicates across vendors, no key clash with base nodeSelector) so the user sees the error before hitting the manifest endpoint. - Misc: dark-mode background of the k8s_pod_spec / volume mount titles no longer clashes with the drawer; cluster Steps no longer leaks the internal showModules/showForms props to the DOM.
292 lines
22 KiB
TypeScript
292 lines
22 KiB
TypeScript
export default {
|
||
'clusters.title': 'Cluster',
|
||
'clusters.table.provider': 'Provider',
|
||
'clusters.table.deployments': 'Deployments',
|
||
'clusters.button.add': 'Add Cluster',
|
||
'clusters.button.addCredential': 'Add Cloud Credential',
|
||
'clusters.button.editCredential': 'Edit Cloud Credential',
|
||
'clusters.filterBy.cluster': 'Filter by cluster',
|
||
'clusters.add.cluster': 'Add {cluster} Cluster',
|
||
'clusters.edit.cluster': 'Edit {cluster}',
|
||
'clusters.provider.custom': 'Custom',
|
||
'clusters.button.register': 'Register Cluster',
|
||
'clusters.button.addNodePool': 'Add Worker Pool',
|
||
'clusters.button.add.credential': 'Add {provider} Credential',
|
||
'clusters.credential.title': 'Cloud Credential',
|
||
'clusters.credential.token': 'Access Token',
|
||
'clusters.workerpool.region': 'Region',
|
||
'clusters.workerpool.zone': 'Zone',
|
||
'clusters.workerpool.instanceType': 'Instance Type',
|
||
'clusters.workerpool.replicas': 'Replicas',
|
||
'clusters.workerpool.batchSize': 'Batch Size',
|
||
'clusters.workerpool.osImage': 'OS Image',
|
||
'clusters.workerpool.volumes': 'Volumes',
|
||
'clusters.workerpool.format': 'Format',
|
||
'clusters.workerpool.size': 'Size (GiB)',
|
||
'clusters.workerpool.title': 'Worker Pools',
|
||
'clusters.workerpool.cloudOptions': 'Add Cloud Options',
|
||
'clusters.workerpool.volumes.add': 'Add Volume',
|
||
'clusters.create.provider.self': 'Self-Hosted',
|
||
'clusters.create.provider.cloud': 'Cloud Provider',
|
||
'clusters.create.steps.selectProvider': 'Select Provider',
|
||
'clusters.create.configBasic': 'Basic Configuration',
|
||
'clusters.create.execCommand': 'Execute Command',
|
||
'clusters.create.supportedGpu': 'Supported GPUs',
|
||
'clusters.create.skipfornow': 'Skip for Now',
|
||
'clusters.create.noImages': 'No images available',
|
||
'clusters.create.noInstanceTypes': 'No instance types available',
|
||
'clusters.create.noRegions': 'No regions available',
|
||
'clusters.workerpool.batchSize.desc':
|
||
'Number of workers created simultaneously in the Worker pool',
|
||
'clusters.create.addworker.tips':
|
||
'Please make sure the <a href={link} target="_blank">prerequisites</a> for {label} are met before executing the following command.',
|
||
'clusters.create.addCommand.tips':
|
||
'On the Worker that needs to be added, run the following command to join it to the cluster.',
|
||
'clusters.create.addCommand.k8s.tips':
|
||
'登録する Kubernetes クラスターで以下のコマンドを実行し、Kubernetes リソースを作成してクラスターを登録します。',
|
||
'cluster.create.checkEnv.tips':
|
||
'Use the following command to check if the environment is ready.',
|
||
'clusters.create.register.tips':
|
||
' On the Kubernetes cluster that needs to be added, run the following command to join its nodes to the cluster.',
|
||
'cluster.provider.comingsoon': 'Coming soon',
|
||
'clusters.addworker.nvidiaNotes-01':
|
||
'If multiple outbound IPs exist, specify the one you want the worker to use. Please double-check with <span class="bold-text">hostname -I | xargs -n1</span>.',
|
||
'clusters.addworker.nvidiaNotes-02':
|
||
'If a model directory already exists on the worker, you can specify the path to mount it.',
|
||
'clusters.addworker.hygonNotes': `If <span class="bold-text">/opt/hyhal</span> or <span class="bold-text">/opt/dtk</span> does not exist, create symbolic links pointing to the corresponding Hygon installation paths, for example:
|
||
<span class="desc-fill">ln -s /path/to/hyhal /opt/hyhal</span>
|
||
<span class="desc-fill">ln -s /path/to/dtk /opt/dtk</span>.`,
|
||
'clusters.addworker.corexNotes': `If the <span class="bold-text">/usr/local/corex</span> directory does not exist, create a symbolic link to the Iluvatar SDK installation path:
|
||
<span class="bold-text">ln -s /path/to/corex /usr/local/corex</span>.`,
|
||
'clusters.addworker.metaxNotes': `If the <span class="bold-text">/opt/mxdriver</span> or <span class="bold-text">/opt/maca</span> directory does not exist, create a symbolic link to the MetaX driver and SDK installation path:
|
||
<span class="desc-fill">ln -s /path/to/mxdriver /opt/mxdriver</span>
|
||
<span class="desc-fill">ln -s /path/to/maca /opt/maca</span>.`,
|
||
'clusters.addworker.cambriconNotes': `If the <span class="bold-text">/usr/local/neuware</span> directory does not exist, create a symbolic link to the Cambricon installation path:
|
||
<span class="bold-text">ln -s /path/to/neuware /usr/local/neuware</span>.`,
|
||
'clusters.addworker.hygonNotes-02':
|
||
'If device detection fails, try removing <span class="bold-text">--env ROCM_SMI_LIB_PATH=/opt/hyhal/lib</span>.',
|
||
'clusters.addworker.selectCluster': 'Select Cluster',
|
||
'clusters.addworker.selectCluster.tips':
|
||
'For <span class="bold-text">non-Docker</span> clusters, please register clusters or manage worker pools from the Clusters page.',
|
||
'clusters.addworker.selectGPU': 'Select GPU Vendor',
|
||
'clusters.addworker.selectGPU.multiTag': 'Multi-select',
|
||
'clusters.addworker.selectGPU.singleOnly':
|
||
'The selected vendor is not in this cluster’s GPU vendor overrides — single-select only. Pick a vendor configured in the overrides to enable multi-select.',
|
||
'clusters.addworker.checkEnv': 'Check Environment',
|
||
'clusters.addworker.specifyArgs': 'Specify Arguments',
|
||
'clusters.addworker.runCommand': 'Run Command',
|
||
'clusters.addworker.specifyWorkerIP': 'Worker IP',
|
||
'clusters.addworker.detectWorkerIP': 'Worker IP を自動検出',
|
||
'clusters.addworker.specifyWorkerAddress': 'Worker 外部アドレス',
|
||
'clusters.addworker.detectWorkerAddress': 'Worker 外部アドレス',
|
||
'clusters.addworker.detectWorkerAddress.tips':
|
||
'指定がない場合、デフォルトで Worker IP が使用されます。',
|
||
'clusters.addworker.externalIP.tips':
|
||
'VPCやプライベートネットワークで動作している場合は、サーバーから到達可能なWorkerの外部アドレスを指定してください。',
|
||
'clusters.addworker.enterWorkerIP': 'Enter worker IP',
|
||
'clusters.addworker.enterWorkerIP.error': 'Please enter the worker IP.',
|
||
'clusters.addworker.enterWorkerAddress': 'Enter worker external address',
|
||
'clusters.addworker.enterWorkerAddress.error':
|
||
'Please enter the worker external address.',
|
||
'clusters.addworker.extraVolume': 'Additional Volume Mount',
|
||
'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
|
||
'clusters.addworker.cacheVolume.tips':
|
||
'If you want to customize the model cache directory, you can specify the path to mount it.',
|
||
'clusters.addworker.configSummary': 'Configuration Summary',
|
||
'clusters.addworker.gpuVendor': 'GPU Vendor',
|
||
'clusters.addworker.workerIP': 'Worker IP',
|
||
'clusters.addworker.workerExternalIP': 'Worker External Address',
|
||
'clusters.addworker.notSpecified': 'Not Specified',
|
||
'clusters.addworker.autoDetect': 'Auto',
|
||
'clusters.addworker.extraVolume.holder':
|
||
'e.g. /data/models (path must start with /). Use commas to separate multiple paths.',
|
||
'clusters.addworker.cacheVolume.holder':
|
||
'e.g. /data/cache (path must start with /)',
|
||
'clusters.addworker.vendorNotes.title': 'Notes for {vendor} Device',
|
||
'clusters.button.genToken':
|
||
'Need to create a new token? Click <a href="{link}" target="_blank">here</a>.',
|
||
'clusters.addworker.amdNotes-01': `If the <span class="bold-text">/opt/rocm</span> directory does not exist, please create a symbolic link pointing to the ROCm installed path: <span class="bold-text">ln -s /path/to/rocm /opt/rocm</span>.`,
|
||
'clusters.addworker.message.success_single':
|
||
'{count} new worker has been added to the cluster.',
|
||
'clusters.addworker.message.success_multiple':
|
||
'{count} new workers have been added to the cluster.',
|
||
'clusters.create.serverUrl': 'GPUStack Server URL',
|
||
'clusters.create.workerConfig': 'Worker Configuration',
|
||
'clusters.addworker.containerName': 'Worker Container Name',
|
||
'clusters.addworker.containerName.tips':
|
||
'Specify a name for the worker container.',
|
||
'clusters.addworker.dataVolume': 'GPUStack Data Volume',
|
||
'clusters.addworker.dataVolume.tips':
|
||
'Specify a data storage path for GPUStack.',
|
||
'clusters.table.ip.internal': 'Internal',
|
||
'clusters.table.ip.external': 'External',
|
||
'clusters.form.serverUrl.tips':
|
||
'Specify an externally accessible GPUStack service URL if the worker cannot access GPUStack Server directly.',
|
||
'clusters.form.setDefault': 'Set as Default',
|
||
'clusters.form.setDefault.tips': 'Default for deployment.',
|
||
'clusters.addworker.noClusters': 'No available Docker clusters found',
|
||
'clusters.create.steps.complete.tips': 'Cluster created successfully!',
|
||
'clusters.create.steps.complete': 'Complete',
|
||
'clusters.create.steps.configure': 'Configure',
|
||
'clusters.create.dockerTips1': 'Next, add worker to this cluster.',
|
||
'clusters.create.dockerTips2':
|
||
'You can also skip this step and add them later from the cluster list.',
|
||
'clusters.create.k8sTips1': 'Next, register existing Kubernetes cluster.',
|
||
'clusters.create.k8sTips2':
|
||
'You can also skip this step and register it later from the cluster list.',
|
||
'clusters.addworker.theadNotes':
|
||
'If the <span class="bold-text>/usr/local/PPU_SDK</span> directory does not exist, please create a symbolic link pointing to the T-Head PPU SDK installed path: <span class="bold-text>ln -s /path/to/PPU_SDK /usr/local/PPU_SDK</span>',
|
||
'clusters.addworker.theadNotes-02':
|
||
'T-Head PPU uses the Container Device Interface (CDI) for device injection and requires the <span class="bold-text">/var/run/cdi</span> directory to be available for CDI generation.',
|
||
'clusters.addworker.nvidiaNotes':
|
||
'The built-in inference backends in GPUStack v2.1 require <span class="bold-text">CUDA 12.6+</span>. Please ensure your NVIDIA driver version is <span class="bold-text">560</span> or newer.',
|
||
'clusters.volume.title': 'Volume Mounts',
|
||
'clusters.volume.name': 'Volume Name',
|
||
'clusters.volume.mountPath': 'Container Path',
|
||
'clusters.volume.mountPath.format': 'Path must start with /',
|
||
'clusters.volume.readOnly': 'Read Only',
|
||
'clusters.volume.sourceType': 'Source Type',
|
||
'clusters.volume.sourceType.hostPath': 'Host Path',
|
||
'clusters.volume.sourceType.pvc': 'Persistent Volume Claim (PVC)',
|
||
'clusters.volume.sourceType.configMap': 'ConfigMap',
|
||
'clusters.volume.hostPath.path': 'Host Path',
|
||
'clusters.volume.hostPath.type': 'Path Type',
|
||
'clusters.volume.hostPath.type.directory': 'Directory',
|
||
'clusters.volume.hostPath.type.directoryOrCreate':
|
||
'Directory (create if not exists)',
|
||
'clusters.volume.hostPath.type.file': 'File',
|
||
'clusters.volume.hostPath.type.fileOrCreate': 'File (create if not exists)',
|
||
'clusters.volume.hostPath.type.socket': 'Socket',
|
||
'clusters.volume.hostPath.type.charDevice': 'Character Device',
|
||
'clusters.volume.hostPath.type.blockDevice': 'Block Device',
|
||
'clusters.volume.pvc.claimName': 'PVC Name',
|
||
'clusters.volume.pvc.readOnly': 'Read Only',
|
||
'clusters.volume.configMap.name': 'ConfigMap Name',
|
||
'clusters.volume.configMap.optional': 'Optional',
|
||
'clusters.volume.add': 'Add Volume Mount',
|
||
'clusters.imageCredentials.title': 'Image Credentials',
|
||
'clusters.imageCredentials.add': 'Add Credential',
|
||
'clusters.imageCredentials.registry': 'Registry',
|
||
'clusters.imageCredentials.username': 'Username',
|
||
'clusters.imageCredentials.password': 'Password',
|
||
'clusters.nodeSelector.title': 'Node Selector',
|
||
'clusters.nodeSelector.tip':
|
||
'Pod nodeSelector applied to every worker DaemonSet — only nodes whose labels match are eligible to run the worker.',
|
||
'clusters.gpuVendorOverrides.title': 'GPU Vendor Overrides',
|
||
'clusters.gpuVendorOverrides.validate.emptySelector':
|
||
'The override for {vendor} needs at least one nodeSelector entry — an empty override would leave the multi-vendor manifest unable to target nodes for this runtime.',
|
||
'clusters.gpuVendorOverrides.validate.duplicate':
|
||
'Overrides for {v1} and {v2} use the same nodeSelector. Each vendor must scope to a distinct node set, otherwise their worker DaemonSets would compete for the same nodes.',
|
||
'clusters.gpuVendorOverrides.validate.keyConflict':
|
||
'Override for {vendor} reuses key(s) {keys} from the base Node Selector — the CPU worker would simultaneously require and forbid the key and never schedule.',
|
||
'clusters.gpuVendorOverrides.tip':
|
||
'Required when running multiple GPU vendors in one cluster. Each entry pins that vendor’s worker DaemonSet to nodes matching its nodeSelector, and the CPU worker is steered away from those nodes via a DoesNotExist node-affinity.',
|
||
'clusters.gpuVendorOverrides.add': 'Add Override',
|
||
'clusters.gpuVendorOverrides.vendor': 'GPU Vendor',
|
||
'clusters.gpuVendorOverrides.nodeSelector': 'Node Selector'
|
||
};
|
||
|
||
// ========== To-Do: Translate Keys (Remove After Translation) ==========
|
||
// 1. 'clusters.title': 'Cluster',
|
||
// 2. 'clusters.table.provider': 'Provider',
|
||
// 3. 'clusters.table.deployments': 'Deployments',
|
||
// 4. 'clusters.button.add': 'Add Cluster',
|
||
// 5. 'clusters.button.addCredential': 'Add Cloud Credential',
|
||
// 6. 'clusters.button.editCredential': 'Edit Cloud Credential',
|
||
// 7. 'clusters.filterBy.cluster': 'Filter by cluster',
|
||
// 8. 'clusters.add.cluster': 'Add {cluster} Cluster',
|
||
// 9. 'clusters.edit.cluster': 'Edit {cluster}',
|
||
// 10. 'clusters.provider.custom': 'Custom',
|
||
// 11. 'clusters.button.register': 'Register Cluster',
|
||
// 12. 'clusters.button.addNodePool': 'Add Worker Pool',
|
||
// 13. 'clusters.button.add.credential': 'Add {provider} Credential',
|
||
// 14. 'clusters.credential.token': 'Access Token',
|
||
// 15. 'clusters.workerpool.region': 'Region',
|
||
// 16. 'clusters.workerpool.zone': 'Zone',
|
||
// 17. 'clusters.workerpool.instanceType': 'Instance Type',
|
||
// 18. 'clusters.workerpool.replicas': 'Replicas',
|
||
// 19. 'clusters.workerpool.batchSize': 'Batch Size',
|
||
// 20. 'clusters.workerpool.osImage': 'OS Image',
|
||
// 21. 'clusters.workerpool.volumes': 'Volumes',
|
||
// 22. 'clusters.workerpool.format': 'Format',
|
||
// 23. 'clusters.workerpool.size': 'Size (GiB)',
|
||
// 24. 'clusters.credential.title': 'Cloud Credential',
|
||
// 25. 'clusters.workerpool.title': 'Worker Pools',
|
||
// 26. 'clusters.workerpool.cloudOptions': 'Add Cloud Options',
|
||
// 27. 'clusters.workerpool.volumes.add': 'Add Volume'
|
||
// 28. 'clusters.create.provider.self': 'Self-Hosted',
|
||
// 29. 'clusters.create.provider.cloud': 'Cloud Provider',
|
||
// 30. 'clusters.create.steps.selectProvider': 'Select Provider',
|
||
// 31. 'clusters.create.configBasic': 'Basic Configuration',
|
||
// 32. 'clusters.create.execCommand': 'Execute Command',
|
||
// 33. 'clusters.create.supportedGpu': 'Supported GPUs',
|
||
// 34. 'clusters.create.skipfornow': 'Skip for Now',
|
||
// 35. 'clusters.create.noImages': 'No images available',
|
||
// 36. 'clusters.create.noInstanceTypes': 'No instance types available',
|
||
// 37. 'clusters.create.noRegions': 'No regions available',
|
||
// 38. 'clusters.workerpool.batchSize.desc': 'Number of workers created simultaneously in the Worker pool',
|
||
// 39. 'clusters.create.addworker.tips': 'Please make sure the <a href={link} target="_blank">prerequisites</a> for {label} are met before executing the following command.',
|
||
// 40. 'clusters.create.addCommand.tips': 'On the Worker that needs to be added, run the following command to join it to the cluster.',
|
||
// 41. 'cluster.create.checkEnv.tips': 'Use the following command to check if the environment is ready.',
|
||
// 42. 'clusters.create.register.tips': ' On the Kubernetes cluster that needs to be added, run the following command to join its nodes to the cluster.',
|
||
// 43. 'cluster.provider.comingsoon': 'Coming soon',
|
||
// 44. 'clusters.addworker.nvidiaNotes-01': 'If multiple outbound IPs exist, specify the one you want the worker to use. Please double-check with <span class="bold-text">hostname -I | xargs -n1</span>.',
|
||
// 45. 'clusters.addworker.nvidiaNotes-02': 'If a model directory already exists on the worker, you can specify the path to mount it.',
|
||
// 46. 'clusters.addworker.hygonNotes': `If <span class="bold-text">/opt/hyhal</span> or <span class="bold-text">/opt/dtk</span> does not exist, create symbolic links pointing to the corresponding Hygon installation paths, for example: <span class="desc-fill">ln -s /path/to/hyhal /opt/hyhal</span> <span class="desc-fill">ln -s /path/to/dtk /opt/dtk</span>.`,
|
||
// 47. 'clusters.addworker.corexNotes': `If the <span class="bold-text">/usr/local/corex</span> directory does not exist, create a symbolic link to the Iluvatar SDK installation path: <span class="bold-text">ln -s /path/to/corex /usr/local/corex</span>.`,
|
||
// 47. 'clusters.addworker.metaxNotes': `If the <span class="bold-text">/opt/mxdriver</span> or <span class="bold-text">/opt/maca</span> directory does not exist, create a symbolic link to the MetaX driver and SDK installation path: <span class="desc-fill">ln -s /path/to/mxdriver /opt/mxdriver</span><span class="desc-fill">ln -s /path/to/maca /opt/maca</span>.`,
|
||
// 49. 'clusters.addworker.cambriconNotes': 'If the <span class="bold-text">/usr/local/neuware</span> directory does not exist, create a symbolic link to the Cambricon installation path: <span class="bold-text">ln -s /path/to/neuware /usr/local/neuware</span>.'
|
||
// 50. 'clusters.addworker.hygonNotes-02': 'If device detection fails, try removing <span class="bold-text">--env ROCM_SMI_LIB_PATH=/opt/hyhal/lib</span>.',
|
||
// 51. 'clusters.addworker.selectCluster': 'Select Cluster',
|
||
// 52. 'clusters.addworker.selectCluster.tips': 'For <span class="bold-text">non-Docker</span> clusters, please register clusters or manage worker pools from the Clusters page.',
|
||
// 53. 'clusters.addworker.selectGPU': 'Select GPU Vendor',
|
||
// 54. 'clusters.addworker.checkEnv': 'Check Environment',
|
||
// 55. 'clusters.addworker.specifyArgs': 'Specify Arguments',
|
||
// 56. 'clusters.addworker.runCommand': 'Run Command',
|
||
// 57. 'clusters.addworker.specifyWorkerIP': 'Worker IP',
|
||
// 58. 'clusters.addworker.detectWorkerIP': 'Auto-detect Worker IP',
|
||
// 59. 'clusters.addworker.enterWorkerIP': 'Enter worker IP',
|
||
// 60. 'clusters.addworker.enterWorkerIP.error': 'Please enter the worker IP.',
|
||
// 61. 'clusters.addworker.extraVolume': 'Additional Volume Mount',
|
||
// 62. 'clusters.addworker.configSummary': 'Configuration Summary',
|
||
// 63. 'clusters.addworker.gpuVendor': 'GPU Vendor',
|
||
// 64. 'clusters.addworker.workerIP': 'Worker IP',
|
||
// 65. 'clusters.addworker.workerExternalIP': 'Worker External Address',
|
||
// 65. 'clusters.addworker.notSpecified': 'Not Specified',
|
||
// 66. 'clusters.addworker.autoDetect': 'Auto',
|
||
// 67. 'clusters.addworker.extraVolume.holder': 'e.g. /data/models (path must start with /). Use commas to separate multiple paths.',
|
||
// 68. 'clusters.addworker.vendorNotes.title': 'Notes for {vendor} Device',
|
||
// 69. 'clusters.button.genToken': 'Need to create a new token? Click <a href="{link}" target="_blank">here</a>.',
|
||
// 70. 'clusters.addworker.amdNotes-01': `If the <span class="bold-text">/opt/rocm</span> directory does not exist, please create a symbolic link pointing to the ROCm installed path: <span class="bold-text">ln -s /path/to/rocm /opt/rocm</span>.`,
|
||
// 71. 'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
|
||
// 72. 'clusters.addworker.cacheVolume.tips': 'If you want to customize the model cache directory, you can specify the path to mount it.',
|
||
// 73. 'clusters.addworker.cacheVolume.holder': 'e.g. /data/cache (path must start with /)',
|
||
// 74. 'clusters.addworker.message.success_single': '{count} new worker has been added to the cluster.',
|
||
// 75. 'clusters.addworker.message.success_multiple': '{count} new workers have been added to the cluster.',
|
||
// 76. 'clusters.create.serverUrl': 'GPUStack Server URL',
|
||
// 77. 'clusters.create.workerConfig': 'Worker Configuration'
|
||
// 78. 'clusters.addworker.containerName': 'Worker Container Name',
|
||
// 79. 'clusters.addworker.containerName.tips':'Specify a name for the worker container.',
|
||
// 77. 'clusters.addworker.dataVolume': 'GPUStack Data Volume',
|
||
// 78. 'clusters.addworker.dataVolume.tips': 'Specify a data storage path for GPUStack.',
|
||
// 79. 'clusters.table.ip.internal': 'Internal',
|
||
// 80. 'clusters.table.ip.external': 'External',
|
||
// 81. 'clusters.form.serverUrl.tips': 'Specify an externally accessible GPUStack service URL if the worker cannot access GPUStack Server directly.',
|
||
// 82. 'clusters.addworker.externalIP.tips': 'Specify an external IP if the worker is in a VPC or private network.',
|
||
// 83. 'clusters.form.setDefault': 'Set as Default',
|
||
// 84. 'clusters.form.setDefault.tips': 'Default for deployment',
|
||
// 85. 'clusters.addworker.enterWorkerAddress': 'Enter worker external address',
|
||
// 86. 'clusters.addworker.enterWorkerAddress.error': 'Please enter the worker external address.',
|
||
// 87. 'clusters.addworker.noClusters': 'No available Docker clusters found',
|
||
// 88. 'clusters.create.steps.complete.tips': 'Cluster created successfully!',
|
||
// 89. 'clusters.create.steps.complete': 'Complete',
|
||
// 90. 'clusters.create.dockerTips1': 'Next, add worker to this cluster.',
|
||
// 91. 'clusters.create.dockerTips2': 'You can also skip this step and add them later from the cluster list.',
|
||
// 92. 'clusters.create.k8sTips1': 'Next, register existing Kubernetes cluster.',
|
||
// 93. 'clusters.create.k8sTips2': 'You can also skip this step and register it later from the cluster list.',
|
||
// 94. 'clusters.create.steps.configure': 'Configure',
|
||
// 99. 'clusters.addworker.theadNotes': 'If the <span class="bold-text>/usr/local/PPU_SDK</span> directory does not exist, please create a symbolic link pointing to the T-Head PPU SDK installed path: <span class="bold-text>ln -s /path/to/PPU_SDK /usr/local/PPU_SDK</span>',
|
||
// 100. 'clusters.addworker.theadNotes-02': 'T-Head PPU uses the Container Device Interface (CDI) for device injection and requires the <span class="bold-text">/var/run/cdi</span> directory to be available for CDI generation.',
|
||
// 101. 'clusters.addworker.nvidiaNotes': 'The built-in inference backends in GPUStack v2.1 require <span class="bold-text">CUDA 12.6+</span>. Please ensure your NVIDIA driver version is <span class="bold-text">560</span> or newer.'
|
||
// ========== End of To-Do List ==========
|