diff --git a/assets/harvester/harvester-1.9.0-rc1.tgz b/assets/harvester/harvester-1.9.0-rc1.tgz
index 2ca68c61..947c5c6b 100644
Binary files a/assets/harvester/harvester-1.9.0-rc1.tgz and b/assets/harvester/harvester-1.9.0-rc1.tgz differ
diff --git a/assets/index.yaml b/assets/index.yaml
index 60ef1c61..dace72b6 100644
--- a/assets/index.yaml
+++ b/assets/index.yaml
@@ -14,9 +14,9 @@ entries:
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.9.0-rc1
- created: "2026-07-14T04:10:33.324531286Z"
+ created: "2026-07-14T06:31:12.415570671Z"
description: Rancher UI Extension for Harvester
- digest: 678024f9c5293d4ab05229247010f7678197ec1b7652dd850bf6525365304537
+ digest: eb301a036d70e24d2df4d79b07d0b8318ac361cdfe056245f692cd4dc7c5700a
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
name: harvester
type: application
@@ -397,4 +397,4 @@ entries:
urls:
- assets/harvester/harvester-1.0.0.tgz
version: 1.0.0
-generated: "2026-07-14T04:10:33.324041869Z"
+generated: "2026-07-14T06:31:12.415164504Z"
diff --git a/extensions/harvester/1.9.0-rc1.tgz b/extensions/harvester/1.9.0-rc1.tgz
index 890e5d98..e8c66128 100644
Binary files a/extensions/harvester/1.9.0-rc1.tgz and b/extensions/harvester/1.9.0-rc1.tgz differ
diff --git a/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js b/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js
index 9e24fade..cf80c31a 100644
--- a/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js
+++ b/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js
@@ -1,2 +1,2 @@
-(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_9_0_rc1"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_9_0_rc1"]||[]).push([[37],{49037:function(e){const t=[{wizard:{create:"Create",next:"Proceed",previous:"Back"},generic:{tip:"Tip",resourceExternalLinkTips:"External Link",namespace:"Namespace",notReady:"Not Ready",labels:"Labels",inProgress:"In Progress",basic:"Basic",loading:"Loading...",none:"None",duration:{infinite:"Infinite","1s":"1 second","5s":"5 seconds","10s":"10 seconds","30s":"30 seconds","1m":"1 minute","3m":"3 minutes","5m":"5 minutes"}},unsupported:{serverVersion:"Current version: {serverVersion}",description:"Harvester ui only supports Harvester cluster version greater or equal to 1.3.0.",learnMore:'Learn more about Harvester from the Harvester Web Site or read the Harvester Docs'},nav:{group:{networks:"Networks",backupAndSnapshot:"Backup and Snapshots",Monitoring:"Monitoring",Logging:"Logging","Monitoring and Logging":"Monitoring and Logging",vmimport:"Virtual Machine Imports",vmMigration:"Virtual Machine Migration",Configurations:"Configurations"}},resourceTable:{groupBy:{device:"Group by Device"}},validation:{arrayCountRequired:"At least {count} {key} {count, plural, =1 {is} other {are}} required, and {key} can not be empty."},members:{clusterMemebership:"Cluster Membership",projectMembership:"Project Membership"},asyncButton:{createAndStart:{action:"Create and Start"},restart:{action:"Save and Restart",success:"Restarted",waiting:"Restarting…"}},dialog:{confirmExecution:{title:"Are you sure?",andOthers:"{count, plural,\n=0 {}\n=1 { and one other }\nother { and {count} other }\n}",protip:"Tip: Hold the {alternateLabel} key while clicking action to bypass this confirmation",stop:{message:"Are you sure you want to stop the {type} {names}?"},pause:{message:"Are you sure you want to pause the {type} {names}?"},restart:{message:"Are you sure you want to restart the {type} {names}?"},softreboot:{message:"Are you sure you want to soft reboot the {type} {names}?"}},promptRemove:{title:"Delete {type}",warningMessage:"Deleting the selected {type} permanently removes all resources on {thisOrThese} {type}. This action is irreversible. Do you want to continue?",confirmName:"Type {nameToMatch} to delete the {type}:",protip:"Tip: Hold the {alternateLabel} key while clicking Delete to bypass the confirmation step."}},harvester:{branding:{logos:{tip:"Upload a logo to replace the Harvester logo in the top-level navigation header. Image height should be 21 pixels with a max width of 200 pixels. Max file size is 20KB. Accepted formats: JPEG, PNG, SVG."},favicon:{tip:"Upload an icon to replace the Harvester favicon in the browser tab. Max file size is 20KB"}},productLabel:"Harvester",modal:{backup:{success:"Backup { backUpName } has been initiated.",addBackup:"Add Backup",fileSystemFreezeDeadline:{label:"File System Freeze Deadline"}},quota:{editVMQuota:"Edit VM Quota",editQuota:"Edit Quota",bannerMessage:"Set to empty string or 0 to remove total snapshot size quota."},restore:{success:"Restore { name } created successfully.",title:"Backup and Restore",selectBackup:"Select Backup",message:{backup:"Please select the backup that needs to be restored."}},createTemplate:{title:"Generate Template",name:"Name",description:"Description",message:{tip:"Please enter a template name!",success:"Template { templateName } created successfully.",failed:"Failed generated template!"}},schedule:{title:"Create Schedule",message:{tip:"Please enter a schedule name!",success:"Schedule { name } created successfully.",failed:"Failed create schedule!"}},cloneVM:{title:"Clone Virtual Machine",name:"New Virtual Machine Name",type:"Clone volume data",action:{create:"Create",clone:"Clone"},message:{tip:"Please enter a virtual machine name!",success:"Virtual machine { name } cloned successfully.",failed:"Failed clone virtual machine!"}},osImage:{title:"Delete Image",message:"Are you sure you want to delete the image { name } ?"},downloadImage:{title:"Download Image",banner:"This action takes a while depending on the image size ({ size }). Please be patient.",startMessage:"The download process will auto start once the conversion is complete.",download:"Download"},exportImage:{title:"Export to Image",name:"Name",namespace:"Namespace",message:{success:"Image { name } created successfully."}},storageMigration:{title:"Storage Migration",fields:{sourceVolume:{label:"Source Volume",placeholder:"Select a source volume"},targetVolume:{label:"Target Volume",placeholder:"Select a target volume"}}},dataMigration:{title:"Data Migration",fields:{targetVolumeName:{label:"Target Volume Name",placeholder:"Enter a target volume name"},targetStorageClassName:{label:"Target Storage Class",placeholder:"Select a storage class"}}},migration:{failedMessage:"Latest migration failed!",title:"Migration",vmMigrationTitle:"{count, plural, one {Migrating # VM} other {Migrating # VMs}}",selectedVMs:"The following virtual machine(s) will be migrated to the target node",unknownNode:"(unknown node)",alreadyOnTarget:"Already on Target",fields:{nodeName:{label:"Target Node",placeholder:"Choose Target Node"}}},ejectCDROM:{title:"Eject CD-ROM",warnTip:"Eject volume will restart the virtual machine.",operationTip:"Select the volume you want to delete:",delete:"Delete"},bundle:{title:"Generate a Support Bundle",titleDescription:"Collect system-related logs in Harvester to assist with troubleshooting and support.",tip:'Each field below specifies an aspect of the support bundle. For detailed explanations, please refer to the documentation.',url:"Issue URL",description:"Description",namespaces:{label:"Namespaces",tooltip:"Select additional namespaces to include in the support bundle. See docs support-bundle-namespaces for detail.",selectAll:"Select All",unselectAll:"Unselect All"},timeout:{label:"Timeout",tooltip:"Minutes allows for completion of the support bundle generation process. See docs support-bundle-timeout for detail."},expiration:{label:"Expiration",tooltip:"Minutes before deleting packaged but not downloaded support bundle. See docs support-bundle-expiration for detail."},nodeTimeout:{label:"Node Collection Timeout",tooltip:"Minutes allowed for collecting logs/configurations on nodes. See docs support-bundle-node-collection-timeout for detail."}},hotplugVolume:{success:"Volume { diskName } is mounted to the virtual machine { vm }.",title:"Add Volume"},hotplugNic:{success:"The settings have been saved, but the network interface {interfaceName} will be attached only after the virtual machine is migrated.",title:"Add Network Interface",vmNetwork:"Virtual Machine Network",macAddress:"MAC Address",macAddressTooltip:"If left blank, the MAC address will be automatically generated."},insertCdRomVolume:{success:"{ imageName } is inserted into device { deviceName }.",title:"Insert Image",image:"Image",actionLabel:"Insert Image"},cpuMemoryHotplug:{success:"CPU and Memory are updated to the virtual machine { vm }.",title:"Edit CPU and Memory",maxResourcesMessage:"You can increase the CPU to maximum { maxCpu }C and memory to maximum { maxMemory }."},snapshot:{title:"Take Snapshot",name:"Name",message:{success:"Take Snapshot { name } successfully."}},volumeClone:{title:"Clone Volume",name:"Name",message:{success:"New Volume { name } cloned successfully."}},restoreSnapshot:{title:"Restore Snapshot",name:"New Volume Name",success:"New Volume { name } restored successfully."},vmSnapshot:{title:"Take Virtual Machine Snapshot",name:"Name",success:"Take virtual machine Snapshot { name } successfully.",fileSystemFreezeDeadline:{label:"File System Freeze Deadline"}},restart:{title:"Restart Virtual Machine",tip:"Restart the virtual machine for configuration changes to take effect.",cancel:"Save"}},notification:{title:{succeed:"Succeed",info:"Info",warning:"Warning",error:"Error"},restartRequired:{title:"{count} {count, plural, =1 {Virtual Machine is} other {Virtual Machines are}} Pending Restart",message:"Please restart { vmNames } to apply updated configurations"}},action:{createVM:"Create Virtual Machine",start:"Start",restart:"Restart",softreboot:"Soft Reboot",stop:"Stop",pause:"Pause",deepClone:"Clone",shallowClone:"Clone Template",unpause:"Unpause",encryptImage:"Encrypt Image",decryptImage:"Decrypt Image",ejectCDROM:"Eject CD-ROM",editVMQuota:"Edit Virtual Machine Quota",launchFormTemplate:"Launch instance from template",modifyTemplate:"Modify template (Create new version)",setDefaultVersion:"Set default version",addTemplateVersion:"Add template version",backup:"Take Backup",createSchedule:"Create Schedule",restore:"Restore",restoreNewVM:"Restore New",resumeSchedule:"Resume",suspendSchedule:"Suspend",restoreExistingVM:"Replace Existing",migrate:"Migrate",vmMigrate:"Virtual Machine Migration",cpuAndMemoryHotplug:"Edit CPU and Memory",abortMigration:"Abort Migration",storageMigration:"Storage Migration",cancelStorageMigration:"Cancel Storage Migration",dataMigration:"Data Migration",createTemplate:"Generate Template",enableMaintenance:"Enable Maintenance Mode",disableMaintenance:"Disable Maintenance Mode",enableCPUManager:"Enable CPU Manager",disableCPUManager:"Disable CPU Manager",cordon:"Cordon",uncordon:"Uncordon",addHotplugVolume:"Add Volume",addHotplugNic:"Hotplug Network Interface",exportImage:"Export Image",viewlogs:"View Logs",cancelExpand:"Cancel Expand",snapshot:"Take Snapshot",pvcClone:"Clone Volume",vmSnapshot:"Take Virtual Machine Snapshot",shutdown:"Shut Down",powerOn:"Power On",reboot:"Reboot",reconnect:"Reconnect",forceStop:"Force Stop"},formatters:{hardwareResourceGauge:{allocated:"Allocated",consumption:"{useful} of {total} {units} {suffix}",cores:"CPU",pods:"Pods",ram:"Memory",used:"Used",reserved:"Reserved",units:{cores:"{count, plural,\n=1 {core}\nother {cores}}"}},harvesterIpAddress:{customIpTooltip:"Custom IP (set via annotation)"}},tableHeaders:{hostNetworkConfig:{underlay:"Underlay",underlayTooltip:"Allow this interface to act as the underlay for VM overlay networks.",vlanID:"VLAN ID",mode:"Mode",clusterNetwork:"Cluster Network"},imageEncryption:"Encryption",size:"Size",virtualSize:"Virtual Size",progress:"Progress",message:"Message",phase:"Phase",attachedVM:"Attached Virtual Machine",cpuManager:"CPU Manager",routeConnectivityTooltip:"Connectivity between the VM network and the management network, which the Harvester nodes are connected to.",fingerprint:"Fingerprint",value:"Value",actions:"Actions",readyToUse:"Ready To Use",backupTarget:"Backup Target",targetVm:"Target Virtual Machine",cronExpression:"Cron Expression",retain:"Retain",scheduleType:"Type",configuredProfiles:"Configured Profiles",maxFailure:"Max Failure",sourceVm:"Source Virtual Machine",vmSchedule:"Virtual Machine Schedule",hostIp:"Host IP",vm:{ipAddress:"IP Address",node:"Node",defaultVersion:"Default Version"},network:{type:"Type",vlan:"VLAN ID"},snapshotTargetVolume:"Original Volume",volumeSnapshotCounts:"Snapshot Counts",networkState:"Network State",totalSnapshotQuota:"Total Snapshot Quota",storageClass:"Storage Class",restore:"Restore",vmImportSourceVm:"Source VM",vmImportSourceCluster:"Source Cluster",vmImportStatus:"Import Status",vmImportSourceVDatacenter:"Datacenter",vmImportSourceVEndpoint:"Endpoint",vmImportSourceVClusterStatus:"Cluster Status",vmImportSourceORegion:"Region",vmImportSourceOEndpoint:"Endpoint",vmImportSourceOClusterStatus:"Cluster Status",vmImportSourceOVAUrl:"URL",vmImportSourceOVAStatus:"Status",v4ip:"V4 IP",v6ip:"V6 IP",eipName:"EIP Name",vmMigrationProviderType:"Type",vmMigrationProviderUrl:"URL",vmMigrationMapSourceProvider:"Source Provider",vmMigrationMapDestProvider:"Destination Provider",vmMigrationPlanTargetNs:"Target Namespace",vmMigrationPlanVmCount:"VM Count",vmMigrationMigrationPlan:"Plan"},tab:{volume:"Volumes",network:"Networks",advanced:"Advanced Options",accessCredentials:"Access Credentials",pciDevices:"PCI Devices",vGpuDevices:"vGPU Devices",usbDevices:"USB Devices",vmScheduling:"Virtual Machine Scheduling",quotas:"Quotas",snapshots:"Snapshots",instanceLabel:"Instance Labels",annotations:"Annotations",filesystem:"Filesystem Volume"},fields:{version:"Version",name:"Name",type:"Type",image:"Image",size:"Size",volume:"Volume",network:"Network",model:"Model",macAddress:"MAC address",staticIp:"Static IP",port:"Port",protocol:"Protocol",remove:"Remove",PhysicalNic:"Physical NIC",cpu:"CPU",memory:"Memory",virtualName:"Virtual machine name",promiscuous:"Promiscuous",ipv4Address:"IPv4 address",filterLabels:"Filter labels",filterSchedule:"Filter schedule",storageClass:"Storage class",dockerImage:"Docker image"},pci:{available:"Available Devices",compatibleNodes:"Compatible Nodes",impossibleSelection:"There are no hosts with all of the selected devices.",howToUseDeviceInVMCreation:{prefix:"Use the table below to enable PCI passthrough on each device you want to use in this virtual machine. For vGPU devices, please enable them on the",middle:"vGPU Devices",suffix:"page first."},howToUseDevice:{prefix:"Select the device in the table to enable PCI passthrough. For vGPU devices, please enable them on the",middle:"vGPU Devices",suffix:"page."},deviceInTheSameHost:"You can only select devices on the same host.",showCompatibility:"Show device compatibility matrix",hideCompatibility:"Hide device compatibility matrix",claimError:"Error enabling passthrough on {name}",unclaimError:"Error disabling passthrough on {name}",cantUnclaim:"You cannot disable passthrough on a device claimed by another user.",detachWarning:{title:"Cannot Disable Passthrough",message:"Please detach the device from the VM and save it first before disabling passthrough."},enableGroup:"Enable Group",disableGroup:"Disable Group",labelRequired:"This rule should not be manually altered: it ensures that the PCI devices selected for this virtual machine are available on the virtual machine's host.",goSetting:{prefix:"The pcidevices-controller add-on is not enabled, click",middle:"here",suffix:"to enable the add-on to successfully manage your PCI devices."},noPCIPermission:"Please contact your system administrator to enable the PCI devices first.",enablePassthroughWarning:"Please be careful not to use host-owned PCI devices (e.g., management and VLAN NICs). Incorrect device allocation may cause damage to your cluster, including node failure.",disableResourcePooling:"Disable Resource Pooling",disableResourcePoolingDescription:"Assigns this device a unique resource name so it can be pinned to a specific VM, instead of sharing the pool with other identical devices."},devices:{matrixHostName:"Host Name",matrixDeviceClaimName:"Device Claim Name"},generic:{close:"Close",open:"Open",showMore:"Show More",hideMore:"Hide More",memory:"Memory",cpu:"CPU",storage:"Storage",noFileChosen:"No file chosen",noSchema:"Can not find the custom resource definition: {schema}."},validation:{custom:{tooLongName:'"Name" cannot be more than {max} characters.'},generic:{hasDelete:'{type} "{name}" has been deleted.',maxLength:'"{key}" cannot be more than {max} characters',tabError:"{prefix}: {message}",maximumSize:"Exceed maximum size {max}!",regex:'Invalid {lowerType} "{name}": {upperType} must match the regex "{regex}"'},vm:{name:"name is required!",memory:'"Memory" is required!',duplicatedName:'duplicate {type} name: "{name}"',network:{macFormat:"Invalid MAC address format.",upperType:"Network name",lowerType:"network name"},volume:{upperType:"Volume name",lowerType:"volume name",needAtLeastOneBootable:"At least one bootable volume is required!"}},image:{ruleTip:"The URL you have entered ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw.",ruleFileTip:"The file you have chosen ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw."},hash:{sha512:"Invalid SHA512 checksum."},subnet:{excludeIps:"Exclude IPs cannot be empty. Please remove or fill in the exclude IPs.",aclEmptyError:"The fields in subnet access control list rule can not be empty."}},dashboard:{label:"Dashboard",header:"Harvester Cluster: {cluster}",hardwareResourceGauge:{cpu:"CPU",memory:"Memory",storage:"Storage",allocated:"Allocated"},sections:{events:{label:"Events"},vmMetrics:{label:"Virtual Machine Metrics"}},version:"Version"},host:{console:"Console",label:"Hosts",inconsistentIP:"Host IP is inconsistent, current IP: { currentIP }, initial IP: { initIP }",noConsoleUrl:"Console URL not specified",promote:{none:" ",running:"Promoting",failed:"Promote failed",unknown:"Promote halted",promoteRestart:"Restarting",promoteSucceed:"Promote completed"},tabs:{network:"Network",overview:"Overview",basics:"Basics",instance:"Virtual Machines",monitor:"Monitor Data",storage:"Storage",labels:"Labels",ksmtuned:"Ksmtuned",hugepages:"Hugepages",seeder:"Out-of-band Access"},detail:{kvm:{disableMessage:"Hardware-based virtualization is disabled or not supported. Hardware-based virtualization must be enabled before creating any virtual machines."},title:{network:"Network Configuration"},hostIP:"Host IP",role:"Role",os:"Operating System",create:"Creation Time",update:"Last Update Time",customName:"Custom Name",consoleUrl:"Console URL",more:"More Information",uuid:"UUID",containerRuntime:"Container Runtime",kernel:"Kernel",management:"Management Node",compute:"Compute Node",storage:"Storage",nic:"Physical NIC",notRecommended:"Not recommended",networkType:"Type",manufacturer:"Manufacturer",serialNumber:"Serial Number",model:"Model",etcd:"Witness Node",cpuManager:"CPU Manager"},enableMaintenance:{title:"Enable Maintenance Mode",protip:"The operation will migrate all virtual machines on this node to other nodes.",shutDownVMs:"Check Force option to shutdown virtual machines which cannot be migrated in live mode.",force:"Force"},cordon:{title:"Cordon",protip:"This operation will mark the node { node } as unschedulable."},ksmtuned:{run:"Run Strategy",configure:"Configure",mode:"Mode",modeLink:'Mode ',thresCoef:"Threshold Coefficient",enableMergeNodes:"Enable merging across nodes",enable:"Enable",disable:"Disable",ksmStatus:"KSM Status",modeOption:{standard:"Standard",high:"High-performance",customized:"Customized"},parameters:{title:"Ksmtuned Parameters",boost:"Boost",decay:"Decay",sleepMsec:"Sleep Time (Millisecond)",minPages:"Minimum Pages",maxPages:"Maximum Pages",description:{boost:"The number of scanned pages is incremented each time if the available memory is less than the threshold coefficient.",decay:"The number of scanned pages is decremented each time if the available memory is greater than the threshold coefficient.",sleepMsec:"The interval between two scans (the minimum value is 10ms), which is calculated by the formula (Sleep Milliseconds * 16 * 1024 * 1024/Total Memory).",minPages:"The minimum number of pages per scan, also the configuration for the first run.",maxPages:"Maximum number of pages per scan."}},statistics:{title:'Statistics ',sharing:"Sharing",shared:"Shared",unshared:"Unshared",volatile:"Volatile",fullScans:"Full Scans",stableNodeChains:"Stable Node Chains",stableNodeDups:"Stable Node Dups"}},hugepages:{meminfo:"Meminfo",transparent:{title:'Transparent Hugepages ',enabled:"Enabled",shmemEnabled:"Shared Memory Enabled",defrag:"Defragmentation"},status:{anon:"Anonymous Hugepages (bytes)",size:"Default Hugepage Size (bytes)",total:"Total Hugepages",free:"Free Hugepages",rsvd:"Reserved Hugepages",surp:"Surplus Hugepages"}},disk:{add:"Add Disk",path:{label:"Path"},storageReserved:{label:"Storage Reserved"},allowScheduling:{label:"Scheduling",tooltip:"Disk {name} ({path}) scheduling is disabled"},evictionRequested:{label:"Eviction Requested"},forceFormatted:{label:"Force Formatted",toolTip:"Force formatted will clean up disk data, make sure you backup all available data to prevent data loss.",yes:"Yes (Ext4 File System)"},description:{label:"Description"},lastFormattedAt:{info:"The disk has already been force-formatted."},notification:{success:'Update host "{name}" storage configurations successfully.'},error:"Host has unready or unschedulable disks.",mounted:"Already Mounted",fileSystem:{info:"Current file system is {system}, You can format it manually.",formatting:"Disk is formatting, please wait."},tags:{label:"Disk Tags",addLabel:"Add Disk Tag"},conditions:"Conditions",storageAvailable:{label:"Storage Available"},storageScheduled:{label:"Storage Scheduled"},storageMaximum:{label:"Storage Maximum"},provisioner:"Provisioner",lvmVolumeGroup:{label:"Volume Group",create:"Create New..."},storage:{longhorn:{LonghornV1:{label:"Longhorn V1 (CSI)"},LonghornV2:{label:"Longhorn V2 (CSI)"}},lvm:{label:"LVM"}}},tags:{label:"Host Tags",addLabel:"Add Host Tag"},powerAction:{message:{success:"Perform host { name } { operation } successfully."}},ntp:{label:"NTP Server Addresses",tips:"You can configure multiple IPv4 addresses or host addresses.",placeholder:"e.g. IPv4",ntpSyncStatus:{isDisabled:"NTP is disabled. Please check the NTP service is active.",isUnsynced:"NTP is not synchronized with the NTP server {current}."}}},virtualMachine:{label:"Virtual Machines",osType:"OS Type",cpuModel:{label:"CPU Model",fetchError:"Failed to load CPU model configuration: {error}",optionLabel:"{modelName} ({count} {count, plural, one {node} other {nodes}})"},hotplug:{title:"Enable CPU and memory hotplug",tooltip:"The default maximum CPU and maximum memory are {hotPlugTimes} times based on CPU and memory.",restartVMMessage:"Restart action is required for the virtual machine configuration change to take effect"},hotUnplug:{actionLabel:"Detach",detachVolume:{title:"Are you sure that you want to detach volume {name}?",actionLabel:"Detach Volume",success:"Volume { name } is detached successfully."},ejectCdRomVolume:{title:"Are you sure that you want to eject image from device {name}?",actionLabel:"Eject Image",success:"Image from device { name } is ejected successfully."},detachNIC:{title:"Are you sure that you want to detach network interface {name}?",actionLabel:"Detach Network Interface",success:"The settings have been saved, but the network interface {name} will be detached only after the virtual machine is migrated."}},instance:{singleInstance:null,multipleInstance:null,single:{label:"Single Instance",nameLabel:"Name",host:{label:"Hostname",placeholder:"Default to the virtual machine name."}},multiple:{label:"Multiple Instance",nameNsDescription:"Name prefix for each instance",count:"Count",countTip:"Count should be between 1 and 10",nameLabel:"Name Prefix",host:{label:"Host Prefix Name",placeholder:"Default to the virtual machine name."}}},useTemplate:{label:"Use the virtual machine template:",template:{label:"Template"},version:{label:"Version"}},console:{novnc:"Open in WebVNC",serial:"Open in Serial Console"},promptRemove:{title:"Select the volume you want to delete:",deleteAll:"Delete All",tips:"Warn: The snapshots of the virtual machine will be deleted with virtual machine and the snapshots of volume will be deleted with volume."},restartTip:"{restart, select,\n true {Restart}\n other {Start}\n} the virtual machine now to take effect of the configuration changes.",runStrategy:"Run Strategy",maintenanceStrategy:{label:"Maintenance Strategy",options:{Migrate:"Migrate",ShutdownAndRestartAfterEnable:"Shutdown and Restart After Enable",ShutdownAndRestartAfterDisable:"Shutdown and Restart After Disable",Shutdown:"Shutdown"}},cpuPinning:{label:"Enable CPU Pinning",tooltip:"Enable CPU Pinning brings better performance and reduce latency for the virtual machine",restartVMMessage:"Changing the CPU Pinning setting requires a virtual machine reboot for the change to take effect",migrationMessage:"This virtual machine can only be migrated to a target node that has CPU Manager enabled, as CPU Pinning is configured."},restartNow:"{restart, select,\n true {Restart}\n other {Start}\n} Now",createSSHKey:"Create a New...",genericLoginError:"Authentication failed. Please re-log in and try again.",installAgent:"Install guest agent",enableUsb:"Enable USB Tablet",advancedOptions:{tpm:"Enable TPM",tpmPersistentState:"TPM Persistent State",cpuManager:{prefix:"You must enable CPU Manager for at least one node in",middle:"host page",suffix:"to enable CPU Pinning for VM"},efiEnabled:"Booting in EFI mode",efiPersistentState:"EFI Persistent State",secureBoot:"Secure Boot"},usbTip:"Provides an absolute pointer device which often helps with getting a consistent mouse cursor position in VNC.",sshTitle:"Add Public SSH Key",imageTip:"An external URL to the .iso, .img, .qcow2 or .raw that the virtual machine should be created from.",volume:{dragTip:"Drag and drop volumes, or use the volume's arrows, to change the boot order.",volumeTip:"The virtual machine only contains a CD-ROM volume. You may want to add additional disk volumes.",macTip:"MAC address as seen inside the guest system.",staticIpTip:"Static IP that will be stored to annotation static-ip.harvesterhci.io/{nic_name}.",volumeUpdate:"Set volume { name } successfully",type:"Type",size:"Size",edit:"Edit",bus:"Bus",readyToUse:"Ready To Use",bootOrder:"Boot Order",volume:"Volume",dockerImage:"Docker Image",addVolume:"Add Volume",addExistingVolume:"Add Existing Volume",addVmImage:"Add a Virtual Machine Image",addContainer:"Add Container",setFirst:"Set as root volume",saveVolume:"Update Volume",encryption:"Encryption",vmImageVolumeTip:"Disk size ({diskSize}) should greater than selected image virtual size ({imageVirtualSize})",lockTooltip:{all:"All volumes are encrypted.",partial:"Some volumes are encrypted."},title:{vmImage:"Image Volume",existingVolume:"Existing Volume",volume:"Volume",container:"Container"},unmount:{title:"Are you sure?",message:"Are you sure you want to unmount this volume?"},emptyImage:"No media"},network:{title:"Network",addNetwork:"Add Network",addPort:"Add Port"},cloudConfig:{title:"Cloud Configuration",createTemplateTitle:"Create {name}",createNew:"Create new...",cloudInit:{label:"Cloud Init",placeholder:"Select a template"},user:{label:"User Data Template",title:"User Data:",tip:"You can specify user data to configure an instance or run a configuration script during launch. If you launch more than one instance at a time, the user data is available to all the instances in that reservation. Learn more"},network:{label:"Network Data Template",title:"Network Data:",tip:"The network-data configuration allows you to customize the instance's networking interfaces by assigning subnet configuration, virtual device creation (bonds, bridges, VLANs) routes and DNS configuration. Learn more"}},sysprep:{title:"Windows Sysprep Configuration",description:"Configure Windows automated installation using autounattend.xml. The configuration will be stored in a Kubernetes Secret and mounted as a CD-ROM during installation. Learn more",createNew:"Create new...",createNewTitle:"Create Windows Sysprep Template",xmlContent:"autounattend.xml content",secret:{label:"Windows Sysprep Template"},validation:{invalidXml:"Invalid XML syntax",invalidNamespace:"Invalid unattend.xml namespace. Expected 'urn:schemas-microsoft-com:unattend'"}},scheduling:{affinity:{anyNode:"Run virtual machine on any available node",schedulingRules:"Run virtual machine on node(s) matching scheduling rules",specificNode:"Run virtual machine on specific node - (Live migration is not supported)"},networkNotSupport:"Network not support schedule"},accessCredentials:{resetPwd:{label:"Add Basic Auth"},injectSSH:{label:"Add SSH Key",users:"Select Users",addUser:"Add User"},tips:"qemu-guest-agent must be installed to enable the accessing of credentials. The virtual machine needs to be restarted after credentials added. You need to be in the virtual machine to edit your password or remove an SSH-Key after deleting the credentials.",userTips:"The user to be added must already exist; otherwise, the credentials will not take effect.",duplicatedUser:"User already exists.",invalidUser:"Invalid Username."},input:{name:"Name",cpu:"CPU",maxCpu:"Maximum CPU",maxMemory:"Maximum Memory",memory:"Memory",image:"Image",sshKey:"SSHKey",sshKeyValue:"SSH-Key",MachineType:"Machine Type",username:"Username",password:"Password",reservedMemory:"Reserved Memory",customizeDisplayName:"Customize virtual machine display name",displayNamePlaceholder:"Virtual machine alias name",displayName:"Display Name"},filesystem:{description:"Harvester supports filesystem volumes for VM via virtiofs.",type:"Filesystem Type",volume:"Volume",resource:"Resource",add:"Add",mountBannerHint:"Please update the mount path (e.g. /mnt/appconfigfs) to your preferred location, then add the corresponding commands to the",mountBannerHintLink:"runcmd",mountBannerHintSuffix:"in Advanced tab User Data."},machineTypeTip:"Specify a processor architecture to emulate. To see a list of supported architectures, run: qemu-system-x86_64 -cpu ?",detail:{tabs:{overview:"Overview",details:"Details",environment:"Environment",events:"Events",migration:"Migration",console:"Console",networkInterfaces:"Network Interfaces",disks:"Disks",networks:"Networks",basics:"Basics",configurations:"Configurations",inventory:"Inventory",hostBasic:"Basic Attributes",instance:"Virtual Machines",monitor:"Monitor Data",keypairs:"SSH Keys",cloudConfig:"Cloud Configuration",metrics:"Virtual Machine Metrics"},details:{title:{vmDetails:"Virtual Machine Details",requirements:"Scheduling and resources requirements",services:"Services",users:"Logged in users"},name:"Name",totalSnapshotQuota:"Total Snapshot Quota",namespace:"Namespace",created:"Created",hostname:"Hostname",node:"Node",ipAddress:"IP Address",status:"Status",pod:"Pod",labels:"Labels",bootOrder:"Boot Order",annotations:"Annotations",CDROMs:"CD-ROMs",description:"Description",operatingSystem:"Operating System",template:"Template",kernelRelease:"Kernel Release",owner:"Owner",workloadProfile:"Workload Profile",nodeSelector:"Node Selector",flavor:"Flavor",tolerations:"Tolerations",dedicatedResources:"Dedicated Resources",down:"Virtual machine not running",affinityRules:"Affinity Rules",phase:"Phase",sourceNode:"Source Node",targetNode:"Target Node",started:"Started",ended:"Ended"},notAvailable:"Not available",GuestAgentNotInstalled:"Guest agent required",noOwner:"No Owner",events:{from:"Generated from",down:"No events in the past hour"},console:{down:"This virtual machine is down. Please start it to access its console.",shortcutKeys:"Shortcut Keys",customShortcutKeys:"Custom Shortcut Keys",management:"Management Shortcut Keys",record:{start:"Record",recording:"Recording",stop:"Stop Recording",tips:"Press the record button to capture your keyboard inputs.",send:"Send",preferredKeys:"Preferred Custom Shortcut Keys"}}},terminationGracePeriodSeconds:{label:"Termination Grace Period"},affinity:{addLabel:"Add Workload Selector",topologyKey:{placeholder:"topology.kubernetes.io/zone"},thisPodNamespace:"This virtual machine's namespace",matchExpressions:{inNamespaces:"Workloads in these namespaces"},namespaces:{label:"Namespaces"}},instanceLabels:{banner:"These labels are automatically synchronized to the virtual machine instance."},labels:{banner:"These key values are added as labels to the virtual machine."},annotations:{banner:"These key values are added as annotations to the virtual machine."}},volume:{label:"Volumes",tabs:{basics:"Basics",snapshots:"Snapshots",datasource:"Data Source",details:"Details",conditions:"Conditions"},size:"Size",volumeMode:"Volume Mode",accessModes:"Access Modes",createWithDataVolume:"Create with DataVolume",createWithDataVolumeTooltip:"Create Volume with Kubevirt/Containerized Data Importer way. It can fill accessMode/volumeMode automatically.",showAdvanced:"Show Advanced Options",hideAdvanced:"Hide Advanced Options",source:"Source",kind:"Kind",sourceOptions:{new:"New",vmImage:"Virtual Machine Image"},image:"Image",frontend:"Frontend",blockdev:"Block Device",attachedNode:"Attached Node",endpoint:"Endpoint",diskTags:"Disk Tags",nodeTags:"Node Tags",lastBackup:"Last Backup",lastBackupAt:"Last Backup At",replicasNumber:"Replicas Number",promptRemove:{tips:"Warn: The volume's snapshots will be deleted with this volume."},externalLink:{tips:"Check volume details"},rebuildingMessage:"Rebuilding: {percentage}%",longhorn:{disableResize:"Longhorn V2 volumes cannot be resized."}},image:{label:"Images",tabs:{basics:"Basics"},url:"URL",size:"Size",isEncryption:"Encryption",encryptionSecret:"Encryption Secret",virtualSize:"Virtual Size",urlTip:'Supports the raw and qcow2 image formats which are supported by qemu. Bootable ISO images can also be used and are treated like raw images.',fileName:"File Name",uploadFile:"Upload File",source:"Source Type",sourceType:{download:"URL",upload:"File",clone:"Clone",encrypt:"Encrypt",decrypt:"Decrypt"},sourceImage:"Source Image",cryptoOperation:"Crypto Operation",warning:{uploading:"{count, plural,\n=1 {1 image is uploading, please do not refresh or close the page.}\nother {{count} images are uploading, please do not refresh or close the page.}\n}",osUpgrade:{uploading:"{name} is uploading, please do not refresh or close the page."}},checksum:"Checksum",checksumTip:"Validate the image using the SHA512 checksum, if specified.",tooltip:{imported:"Created automatically by the vm-import-controller"},errors:{unsupportedBackend:"Unsupported backend type: {backend}"}},vmTemplate:{label:"Templates",tabs:{basics:"Basics"},nameNsDescription:{name:"Template Name"},tips:{notExistImage:{title:"Image {name} does not exist!",message:"Please select a new image."},notExistNode:{title:"Node {name} does not exist!",message:"Please select a new node."}}},upgradePage:{upgradeApp:"Upgrade Software",upgrade:"Upgrade",upgradeTip:"Please select the version you want to upgrade to",currentVersion:"CURRENT VERSION",versionLabel:"AVAILABLE COMPATIBLE VERSIONS",enableLogging:"Enable Logging",skipSingleReplicaDetachedVol:"Skip checking single-replica detached volumes",upgradeNode:"Upgrading Node",upgradeSysService:"Upgrading System Service",upgradeImage:"Download Upgrade Image",osUpgrade:"Cluster Upgrade",uploadNew:"Upload New Image",deleteHeader:"Please select an image to delete.",deleteExisting:"Delete Existing Image",selectExisting:"Select Existing Image",createRepository:"Creating Upgrade Repository",succeeded:"Succeeded",releaseTip:'Please read the upgrade documentation carefully. You can view details on the Harvester Release Notes.',checkReady:"I have read and understood the upgrade instructions related to this Harvester version.",pending:"Pending",upload:{duplicatedFile:"The file you are trying to upload already exists."},repoInfo:{upgradeStatus:"Upgrade Status",os:"OS",kubernetes:"Kubernetes",monitoringChart:"Monitoring Chart",harvesterChart:"Harvester Chart",success:"Success",fail:"Fail",ongoing:"On-going",downloadLog:"Download Log",logStatus:"Log Download Status"},dismissMessage:"Dismiss it",upgradeInfo:{warning:"WARNING",doc:'Read the documentation before starting the upgrade process. Ensure that you complete procedures that are relevant to your environment and the version you are upgrading to.',tip:"Unmet system requirements and incorrectly performed procedures may cause complete upgrade failure and other issues that require manual workarounds.",moreNotes:"For more details about the release notes, please visit -"}},schedule:{label:"Virtual Machine Schedules",createTitle:"Create Schedule",createButtonText:"Create Schedule",scheduleType:"Virtual Machine Schedule Type",cron:{label:"Cron Schedule",editButton:"Edit"},detail:{namespace:"Namespace",sourceVM:"Source Virtual Machine"},tabs:{basic:"Basic",backups:"Backups",snapshots:"Snapshots"},message:{noSetting:{suffix:"before creating a backup schedule"}},retain:{label:"Retain",count:"Count",tooltip:"Number of up-to-date VM backups to retain. Maximum to 250, minimum to 2."},maxFailure:{label:"Max Failure",count:"Count",tooltip:"Max number of consecutive failed backups that could be tolerated. If reach this threshold, Harvester controller will suspend the schedule job. This value should less than retain count"},virtualMachine:{title:"Virtual Machine Name",placeholder:"Select a virtual machine"},type:{snapshot:"Snapshot",backup:"Backup"}},backup:{label:"Virtual Machine Backups",createText:"Restore Backup",title:"Restore Virtual Machine",refreshInterval:{label:"Refresh Interval",tip:"The interval for the backup target to sync data to harvester cluster. Set to 0 to disable refresh mechanism."},backupTargetTip:"The endpoint used to access the backupstore. NFS and S3 are supported.",message:{noSetting:{prefix:"You must configure the backup target",middle:"setting",suffix:"before creating a new backup."},errorTip:{prefix:"Backup target value in",middle:"setting",suffix:"is invalid, error: "},viewSetting:{prefix:"Click",middle:"here",suffix:"to view the backup configuration."},testConnect:{actionLabel:"Test connection",waitingLabel:"Testing connection...",successLabel:"Connection tested",successMessage:"Harvester can successfully connect to the endpoint {endpoint}"}},restore:{backup:"Backup",deletePreviousVolumes:"Delete Previous Volumes",createNew:"Create new",replaceExisting:"Replace existing",virtualMachineName:"Virtual Machine Name",keepMacAddress:"Keep MAC Address",haltAfterRestore:"Keep powered off after restore"},matchTarget:"The current backup target does not match the existing one.",progress:{details:"Volume details",tooltip:{starting:"Backup initiating",progress:"Backup in progress",complete:"Backup completed"}}},restore:{progress:{details:"Volume details",tooltip:{starting:"Restore initiating",progress:"Restore in progress",complete:"Restore completed"}}},subnet:{cidrBlock:{tooltip:"The subnet range in CIDR notation. Note that the CIDR blocks of different Subnets' within the same VPC cannot overlap.",label:"CIDR Block",placeholder:"e.g. 172.20.0.0/16"},protocol:{label:"Protocol"},provider:{tooltip:"Network provider for this Subnet. Must be one of the Virtual Machine Networks in OverlayNetwork type.",label:"Provider"},vpc:{label:"Virtual Private Cloud"},gateway:{label:"Gateway IP",placeholder:"e.g. 172.20.0.1"},vlan:{label:"VLAN",placeholder:"Select a VLAN"},dhcp:{label:"Dynamic Host Configuration Protocol (DHCP)",v4Options:"DHCPV4Options",v6Options:"DHCPV6Options",placeholder:"key1=value1, key2=value2",dhcpOptionBanner:'DHCP options is a key/value string concatenate with comma. For more detail, please refer to KubOVN document',tooltip:"Enable DHCP server for this subnet. When enabled, VMs can automatically obtain IP addresses from this subnet."},externalConnectivity:{label:"NAT Outgoing",tooltip:"Enable NAT for VMs using this subnet to access external networks."},private:{label:"Private Subnet",tooltip:"Enable network isolation for this Subnet. When enabled, VMs can only communicate within this subnet, even if other subnets exist under the same VPC."},allowSubnet:{label:"Allow Subnets",tooltip:"You can specify certain subnets which can communicate with this subnet.",addSubnet:"Add Allow Subnet",placeholder:"e.g. 172.16.0.0/16"},excludeIPs:{tooltip:"The IP address list to reserve from automatic assignment. The gateway IP address is always excluded and will be automatically added to the list.",placeholder:"single IP or 192.168.0.100..192.168.0.200"},acl:{label:"Access Control List",tooltip:"The ACL to apply to this Subnet. Must be one of the ACLs in the same namespace.",action:{label:"Action",placeholder:"Please select an action"},direction:{label:"Direction",placeholder:"Please select a direction"},addRule:"Add Rule",priority:{label:"Priority",placeholder:"Please select a priority"},match:{label:"Match",placeholder:"e.g. ip4.dst == 10.10.0.2"},banner:'The supported field in ACL match can refer to KubeOvn Subnet ACL document'}},vpc:{viewTopology:"Topology",topology:{loading:"Loading topology...",empty:"No resources found",visibility:{vpc:"VPC",subnets:"Subnets",overlayNetworks:"Overlay Networks",vms:"VMs"},labels:{cidr:"CIDR",provider:"Provider",type:"Type",clusterNetwork:"Cluster Network",network:"Network",subnet:"Subnet",ip:"IP",mac:"MAC",peering:"Peering"}},noAddonEnabled:{prefix:"The kubeovn-operator add-on is not enabled, click",middle:"here",suffix:"to enable the add-on to successfully create VPC and subnet."},label:"Virtual Private Cloud",noChild:"There is no subnet defined in this Virtual Private Cloud.",createSubnet:"Create Subnet",staticRoutes:{label:"Static Routes",cidr:{label:"CIDR",placeholder:"e.g. 172.16.0.0/16"},nextHopIP:{tooltip:"The localConnectIP on the other end of the peering VPC.",label:"Next Hop IP",placeholder:"e.g. 169.254.0.2"}},vpcPeerings:{label:"VPC Peerings",localConnectIP:{tooltip:"The designated IP address in CIDR notation of the VPC peering endpoint. Note that both IP addresses (for the VPC and the other VPC) should belong to the same subnet range and should not conflict with the cidrBlock in any existing subnets.",label:"Local Connect IP",placeholder:"e.g. 169.254.0.1/16"},remoteVpc:{label:"Remote VPC"},infoBanner:'The static route destination CIDR must cover all subnets CIDR from remote VPC Peer. Read VPC Peering Configuration Examples for more information.'}},natGateway:{label:"Gateways",internalTenantNetwork:{label:"Internal Tenant Network",placeholder:"Select a Virtual Machine Network"},vpc:{label:"VPC",placeholder:"Select a VPC"},subnet:{label:"Subnet",placeholder:"Select a subnet"},lanIp:{label:"LAN IP",placeholder:"Enter LAN IP"},externalSubnets:{label:"External Subnets",addLabel:"Add",placeholder:"Select a subnet"}},externalIP:{label:"External IPs",natGateway:{label:"VpcNatGateway",placeholder:"Select a VpcNatGateway"},externalSubnet:{label:"External Subnet",placeholder:"Select an external subnet"},v4ip:{label:"V4 IP",placeholder:"public ip from external subnet"}},snat:{label:"Source Rules",eip:{label:"EIP",placeholder:"Select an external IP"},internalCIDR:{label:"Internal CIDR",placeholder:"internal subnet CIDR"}},dnat:{label:"Destination Rules",eip:{label:"EIP",placeholder:"Select an external IP"},externalPort:{label:"External Port",placeholder:"port number"},internalIp:{label:"Internal IP",placeholder:"internal IP address"},internalPort:{label:"Internal Port",placeholder:"port number"},protocol:{label:"Protocol",placeholder:"Select protocol (tcp or udp)"}},providerNetwork:{label:"Provider Networks",defaultInterface:{label:"Default Interface",placeholder:"Select the interface the same as master interface of external overlay network"},customInterfaces:{label:"Custom Interfaces",addLabel:"Add Custom Interface",interface:{label:"Network Interface",placeholder:"e.g. eth2"},nodes:{label:"Nodes",addLabel:"Add Node",placeholder:"Select a node"}},excludedNodes:{label:"Excluded Nodes",addLabel:"Add Excluded Node",placeholder:"Select node to exclude from this provider network"}},vlanNetwork:{label:"VLANs"},vlan:{id:{label:"VLAN ID",placeholder:"e.g. 1-4094"},provider:{label:"Provider Network",placeholder:"Select a provider network"}},networkPolicy:{label:"Policies",banner:'The network policies must be used for VMs attached to overlay networks. Please read the harvester document how the network policy works.'},network:{label:"Virtual Machine Networks",tabs:{basics:"Basics",layer3Network:"Route",nic:"Network Interface Card"},clusterNetwork:{label:"Cluster Network",create:"Create a new cluster network",toolTip:"Define your custom cluster scope network name",createPlaceholder:"Input a new cluster network name",selectOrCreatePlaceholder:"Select or create a new cluster network",selectPlaceholder:"Select a cluster network"},layer3Network:{mode:{label:"Mode",auto:"Auto (DHCP)",manual:"Manual"},serverIPAddr:{label:"DHCP Server IP"},gateway:{label:"Gateway",placeholder:"e.g. 172.16.0.1"},cidr:{label:"CIDR",placeholder:"e.g. 172.16.0.1/24"}}},sshKey:{label:"SSH Keys",keypair:"SSH Key",tabs:{basics:"Basics"}},setting:{label:"Settings",tabs:{advanced:"Advanced",ui:"UI"},validation:{physicalNIC:"DefaultPhysicalNIC"},placeholder:{accessKeyId:"Specify your access key ID",secretAccessKey:"Specify your secret access key",cert:"Upload a self-signed SSL certificate"},noSearchMatch:"No settings match your search.",vlanChangeTip:"The newly modified default network interface only applies to newly added nodes, not existing ones.",defaultPhysicalNIC:"Default Network Interface",modifiedMessage:"Settings that have been customized from default settings are tagged with 'Modified'.",percentTip:"The value in parentheses represents the distribution percentage of the network interface on all hosts. If an interface less than 100% is selected, the user needs to manually specify the network interface on the host where the vlan network configuration fails.",message:{ca:{prefix:"Click",middle:"here",suffix:"to add a custom certificate."}},sslCertificates:{publicCertificate:"Public Certificate",privateKey:"Private Key",ca:"CA"},rancherCluster:{kubeConfig:"Rancher KubeConfig",removeUpstreamClusterWhenNamespaceIsDeleted:"Remove Upstream Cluster When Namespace Is Deleted"},clusterPodSecurityStandard:{whitelistedNamespaces:{label:"Whitelisted Namespaces"},privilegedNamespaces:{label:"Privileged Namespaces"},restrictedNamespaces:{label:"Restricted Namespaces"}},storageNetwork:{range:{placeholder:"e.g. 172.16.0.0/24",label:"IP Range",invalid:'"Range" is invalid.'},clusterNetwork:"Cluster Network",vlan:"VLAN ID",exclusiveVlan:"Exclusive VLAN",exclude:{label:"Exclude IPs",placeholder:"CIDR format, e.g. 172.16.0.10/32",invalid:'"Exclude list" is invalid.',addIp:"Add Exclude IP"},warning:"WARNING: Any change to storage-network requires shutting down all virtual machines before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.",tip:'Specify an IP range in the IPv4 CIDR format. Number of IPs Required = Number of Nodes * 2 + Number of Disks * 2 + Number of Images to Download/Upload . For more information about storage network settings, see the documentation.'},rwxNetwork:{warning:"WARNING: Any change to rwx-network requires longhorn RWX volumes detached before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.",shareStorageNetwork:"Share Storage Network",dedicatedRwxNetwork:"Dedicated RWX Network",shareStorageNetworkWarning:"The rwx-network is governed by storage-network, and changes here won't take effect until share-storage-network is set to false."},vmForceDeletionPolicy:{period:"Period",vmMigrationTimeout:"VM Migration Timeout"},vmMigrationNetwork:{parseError:"Failed to parse existing configuration.",fetchError:"Failed to load required network resources: {error}. Please refresh the page or try again later.",clusterNetwork:"Cluster Network",vlan:"VLAN ID",range:{placeholder:"e.g. 172.16.0.0/24",label:"IP Range",invalid:'"Range" is invalid.'},exclude:{label:"Excluded IPs",placeholder:"e.g. 172.16.0.1/32",invalid:'"Exclude list" is invalid.',addButton:"Add Exclude IP"}},ratio:"Ratio",autoRotateRKE2Certs:{expiringInHours:"Expiring in"},httpProxy:{warning:'WARNING: If you configure "http-proxy" and "https-proxy", you must also put Harvester node's CIDR into "no-proxy", otherwise the Harvester cluster will be broken.'},supportBundleImage:{imagePullPolicy:"Pull Policy",repo:"Repository",tag:"Tag"},csiDriverConfig:{provisioner:"Provisioner",volumeSnapshotClassName:"Volume Snapshot Class Name",backupVolumeSnapshotClassName:"Backup Volume Snapshot Class Name"},csiOnlineExpandValidation:{provisioner:"Provisioner",value:"Value",invalidJsonFormat:"Configuration value is not a valid JSON format: {error}",failedToLoadDrivers:"Failed to load CSI drivers. Error: {error}"},containerdRegistry:{mirrors:{mirrors:"Mirrors",registryName:"Registry Name",endpoints:"Endpoints",rewrite:{rewrite:"Rewrite",addRewrite:"Add Rewrite"},addMirror:"Add Mirror"},configs:{configs:"Configurations",registryEDQNorIP:"Registry FDQN or IP",registryPlaceholder:"myregistry.local:5000",username:"Username",password:"Password",auth:"Auth",identityToken:"Identity Token",insecureSkipVerify:"InsecureSkipVerify",addConfig:"Add Configuration"}},upgrade:{unknownImageName:"Image name is not found.",imageUrl:"Please input a valid image URL.",chooseFile:"Please select to upload an image.",checksum:"Checksum",networkError:"Unable to upload the image. Resolve network issues that may have occurred and try again.",cancelUpload:"Cancelled the image upload.",uploadSuccess:"{name} uploaded successfully. Press Upgrade button to start the cluster upgrade process.",deleteImage:"Please select an image to delete.",deleteSuccess:"{name} deleted successfully.",imagePreloadStrategy:"Image Preload Strategy",nodeUpgradeOption:"Node Upgrade Option",restoreVM:"Restore VM",strategy:"Strategy",pauseNodes:"Pause Nodes",strategyType:"Strategy Type",concurrency:"Concurrency"},harvesterMonitoring:{label:"Harvester Monitoring",section:{prometheus:"Prometheus",prometheusNodeExporter:"Prometheus Node Exporter",grafana:"Grafana",alertmanager:"Alertmanager"},tips:{scrape:"Interval between consecutive scrapes",evaluation:"Interval between consecutive evaluations",retention:"How long to retain metrics",retentionSize:"Maximum size of metrics"}},clusterRegistrationUrl:{url:"URL",insecureSkipTLSVerify:"Insecure Skip TLS Verify",tip:{prefix:'Harvester secures cluster registration via TLS by default. If opt out "Insecure Skip TLS Verify", you must provide custom CA certificates using the',middle:"additional-ca",suffix:"setting."},message:"To completely unset the imported Harvester cluster, please also remove it on the Rancher Dashboard UI via the Virtualization Management page."},ntpServers:{isNotIPV4:"The address you entered is not IPv4 or host. Please enter a valid IPv4 address or a host address.",isDuplicate:"There are duplicate NTP server configurations."},instanceManagerResources:{parseError:"Failed to parse configuration: {error}",v1:"V1 Data Engine",v2:"V2 Data Engine"},kubevirtMigration:{parseError:"Failed to parse configuration: {error}",parallelMigrationsPerCluster:"Parallel Migrations Per Cluster",parallelOutboundMigrationsPerNode:"Parallel Outbound Migrations Per Node",bandwidthPerMigration:"Bandwidth Per Migration",bandwidthPerMigrationTooltip:"0 is KubeVirt default, representing unlimited bandwidth",completionTimeoutPerGiB:"Completion Timeout Per GiB",progressTimeout:"Progress Timeout",allowAutoConverge:"Allow Auto Converge",allowPostCopy:"Allow Post Copy",unsafeMigrationOverride:"Unsafe Migration Override",allowWorkloadDisruption:"Allow Workload Disruption",disableTLS:"Disable TLS",matchSELinuxLevelOnMigration:"Match SELinux Level On Migration"}},cloudTemplate:{label:"Cloud Configuration Templates",templateType:"Template Type",userData:"User Data",networkData:"Network Data"},support:{title:"Harvester Support",kubeconfig:{title:"Download KubeConfig",titleDescription:"Download kubeconfig for debugging."},internal:{rancher:{title:"Access Embedded Rancher UI",titleDescription:'You can only use the embedded Rancher UI for debugging and validation purposes. For more information about how Harvester integrates with Rancher, see the documentation.'},longhorn:{title:"Access Embedded Longhorn UI",titleDescription:"We only support to use the embedded Longhorn UI for debugging and validation purpose."}},community:{learnMore:"Find out more about SUSE Harvester support",pricing:"Contact us for pricing"}},namespace:{label:"Namespaces"},projectNamespace:{label:"Projects/Namespaces"},vip:{namespace:{label:"Namespace"},cidr:{label:"CIDR/IP Range",invalid:'"CIDR/IP Range" is invalid.',toolTip:"We can apply multiple pools or ranges by separating them with commas. For example: 192.168.0.200/30,192.168.0.200/29 or 192.168.0.10-192.168.0.11"},add:{label:"Add IP Pools"}},sslParameters:{protocols:{label:"Protocols"},ciphers:{label:"Ciphers"}},monitoring:{configuration:{label:"Configuration"},alertmanagerConfig:{label:"Alertmanager Configurations",diabledMonitoringTips:{prefix:"Enable the",middle:"monitoring",suffix:"add-on first."},diabledAlertingTips:{prefix:"Enable",middle:"Alertmanager",suffix:"for configuration to take effect."},disabledAddon:{prefix:"The monitoring add-on is disabled, click",middle:"here",suffix:"to enable it."}}},logging:{configuration:{section:{fluentbit:"Fluentbit",fluentd:"Fluentd"}},clusterFlow:{label:"Cluster Flows"},clusterOutput:{label:"Cluster Outputs"},flow:{label:"Flows"},output:{label:"Outputs"},diabledTips:{prefix:"Enable",middle:"logging",suffix:"for configuration to take effect."}},snapshot:{totalSnapshotSize:"Total Snapshot Size",label:"Volume Snapshots",targetVolume:"Original Volume",size:"Size",image:"Image"},vmSnapshot:{label:"Virtual Machine Snapshots",createText:"Restore Snapshot",title:"Restore Virtual Machine",snapshot:"Snapshot"},storage:{label:"Storage",useDefault:"Use the default storage",volumeEncryption:"Volume Encryption",secret:"Secret",volumeExpansionCheckbox:"Enable Expansion",migratable:{label:"Migratable"},numberOfReplicas:{label:"Number Of Replicas"},staleReplicaTimeout:{label:"Stale Replica Timeout"},nodeSelector:{label:"Host Selector"},diskSelector:{label:"Disk Selector"},storageClass:{label:"Storage Class",longhorn:{v1:{label:"Longhorn V1 (CSI)"},v2:{label:"Longhorn V2 (CSI)"},versionTooltip:"Longhorn V2 is disabled for this node."},lvm:{label:"LVM"}},title:"Storage Classes",customize:{volumeBindingMode:{later:"Bind and provision a persistent volume once a virtual machine using the PersistentVolumeClaim is created"}},parameters:{numberOfReplicas:{label:"Number Of Replicas"},staleReplicaTimeout:{label:"Stale Replica Timeout"},diskSelector:{label:"Disk Selector","no-options":"No available tags, please add in the `Host > Storage` page"},nodeSelector:{label:"Node Selector","no-options":"No available tags, please add in the `Host > Storage` page"},migratable:{label:"Migratable"},lvmVolumeGroupType:{label:"Volume Group Type"},lvmVolumeGroup:{label:"Volume Group Name","no-options":"No available Volume Groups, please add in the `Host > Storage` page"},node:{label:"Node"}},allowedTopologies:{title:"Allowed Topologies",tooltip:"Allowed Topologies helps scheduling virtual machines on hosts which match all of below expressions."},internal:{label:"Internal Storage Class",cannotDeleteTooltip:"Internal storage class volumes cannot be deleted",cannotDeleteOrDefaultTooltip:"Internal storage classes cannot be deleted or set as default"},cdiSettings:{label:"CDI Settings",volumeModeAccessModes:{label:"Volume Mode / Access Modes",tooltip:"Specifies the default volume mode and access modes.",add:"Add",volumeMode:"Volume Mode",accessModes:{label:"Access Modes"}},volumeSnapshotClass:{label:"Volume Snapshot Class",tooltip:"Sets the Volume Snapshot Class name to be used when taking snapshots of PVCs under this StorageClass."},cloneStrategy:{label:"Clone Strategy",tooltip:"Defines the clone strategy to use for volumes created with this StorageClass.",copy:"Copy",snapshot:"Snapshot",csiClone:"CSI Clone"},fileSystemOverhead:{label:"File System Overhead",tooltip:"Specifies the percentage of filesystem overhead to consider when calculating PVC size.",placeholder:"e.g. 0.05 (up to 3 decimal places, between 0 and 1)"}}},vlanConfig:{title:"Network Configuration",createNetworkConfig:"Create Network Configuration",action:{migrate:"Migrate"},titles:{nodeSelector:"Node Selector",uplink:"Uplink",bondOptions:"Bond Options",attributes:"Attributes",host:"Selected Hosts"},scheduling:{affinity:{allNodes:"Select all nodes",specificNode:"Select specific node",schedulingRules:"Select node(s) matching rules"}},uplink:{nics:{label:"NIC",addLabel:"Add NIC",overlayWarning:"The NIC selected here must match the NIC provided in the provider network.",placeholder:"Select a NIC that is available on all the selected nodes",validate:{available:'NIC "{nic}" is not available on the selected nodes'}},linkAttributes:{mtu:{label:"MTU"}},bondOptions:{mode:{label:"Mode"},miimon:{label:"Miimon",tooltip:"Miimon specifies the MII link monitoring frequency in milliseconds. -1 means to keep the original value."}}},nodeSelector:{matchingNodes:{matchesSome:'{matched, plural,\n =0 {Matches 0 of {total, number} Nodes.}\n =1 {Matches 1 of {total, number} Nodes: "{sample}"}\n other {Matches {matched, number} of {total, number} existing Nodes, including "{sample}"}\n}'}}},vlanStatus:{vlanConfig:{label:"Network Configuration",l2VlanMode:{access:"Access",trunk:"Trunk",label:"Mode"},vlanTrunk:{minId:"Minimum VLAN ID",maxId:"Maximum VLAN ID",add:"Add VLAN Trunk"}}},clusterNetwork:{title:"Cluster Network Configuration",create:{button:{label:"Create a Cluster Network"}},clusterNetwork:"There are no network configurations defined.",mgmt:"mgmt is a built-in cluster management network and does not support any additional network configurations.",notExist:'Cluster Network "{ clusterNetwork }" does not exist',notReady:'Cluster Network "{ clusterNetwork }" is not ready'},addons:{descriptions:{"harvester-system/vm-import-controller":"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.","harvester-system/pcidevices-controller":"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machine and guest clusters.","cattle-logging-system/rancher-logging":"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.","harvester-system/rancher-vcluster":"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.","cattle-monitoring-system/rancher-monitoring":"rancher-monitoring is an add-on that collects Harvester cluster and virtual machine metrics and allows you to view the metrics on an embedded dashboard and send alert(s) to remote servers.","vm-import-controller":"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.","pcidevices-controller":"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machines and guest clusters.","nvidia-driver-toolkit":"nvidia-driver-toolkit is an add-on to enable vGPU devices and assign them to Harvester virtual machines.","rancher-logging":"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.","rancher-monitoring":"rancher-monitoring is an add-on to collect Harvester cluster and virtual machine metrics, view them on the embedded dashboard, and send alert(s) to remote servers.","rancher-vcluster":"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.","harvester-seeder":"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.","harvester-system/harvester-seeder":"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.","harvester-csi-driver-lvm":"harvester-csi-driver-lvm is an add-on allowing users to create PVC through the LVM with local devices.",descheduler:"The virtual machine auto balance optimizes workload scheduling by evicting pods that are not optimally placed according to administrator-defined policies."},vmMigration:{generic:{unknown:"Unknown",identifier:"Identifier",podNetwork:"Pod Network",usedBy:"Used by:",vlan:"VLAN {id}",vCpu:"{count} vCPU",memoryGb:"{value} GB",memoryTb:"{value} TB",elapsed:{hoursAndMinutes:"{hours} {hours, plural, one {hour} other {hours}} and {minutes} {minutes, plural, one {minute} other {minutes}}",hours:"{hours} {hours, plural, one {hour} other {hours}}",minutes:"{minutes} {minutes, plural, one {minute} other {minutes}}"}},errors:{failedLoadPlans:"Failed to load migration plans",failedLoadVms:"Failed to load virtual machines",failedRefreshVms:"Failed to refresh virtual machines",failedLoadProviders:"Failed to load providers",failedLoadProvider:"Failed to load provider: {error}",failedResolveDetails:"Failed to resolve network and datastore details",failedDecodeCredentials:"Failed to decode provider credentials",connectionFailed:"Connection failed",providerNotReady:"Provider not ready"},labels:{dashboard:"Migration Overview",provider:"Providers",networkMap:"Network Maps",storageMap:"Storage Maps",plan:"Migration Plans",migration:"Migrations"},providerWizard:{title:"Create Provider",editTitle:"Edit Provider"},wizard:{title:"VM Migration",steps:{configureProvider:{label:"Provider",description:"Configure Provider"},selectVms:{label:"VMs",description:"Select VMs"},configureMappings:{label:"Mappings",description:"Define Mappings"},reviewMigration:{label:"Migration Plan",description:"Review Migration Plan"}}},fields:{username:"Username",password:"Password"},configureProvider:{title:"Configure Provider",description:"Connect to your VMware vCenter or ESXi host to discover virtual machines for migration",connectionDetails:"Connection Details",providerSelect:"Provider",createNew:"Create new provider",requirementsTitle:"Requirements",requirementsText:"To migrate virtual machines from VMware, you will need a vCenter Server running version 6.5 or higher with a user account that has at least read permissions, and the source environment must be network-accessible from Rancher.",name:"Name",urlLabel:"vCenter/ESXi URL",urlPlaceholder:"https://vcenter.example.com/sdk",urlHint:"Enter the full URL including https://",skipSsl:"Skip SSL certificate verification",skipSslHint:"Not recommended for production environments",testConnection:{action:"Test Connection",success:"Connection successful",error:"Connection failed",waiting:"Testing connection..."},testSuccess:"Connection test passed",testFailed:"Connection test failed",testMissingFields:"Please fill in all required fields before testing",testTimeout:"Connection test timed out — the provider did not report a status in time",save:"Save Provider and Continue",saveExisting:"Check Provider and Continue"},selectVms:{title:"Select Virtual Machines",description:"Select the virtual machines you want to migrate from the source provider",discovered:"{count} VMs discovered from",lastSynced:"Last synced {time} ago • ",refreshNow:"Refresh now",availableVms:"Available Virtual Machines",selected:"selected",saveSelection:"Save Selection and Continue",selectAllBanner:{pageOnly:"Your current selection includes only VMs currently shown on the page.",selectAll:"Select all {count} VMs from this provider",allSelected:"Your current selection includes all VMs.",clearSelection:"Clear Selection"},manualEntry:{title:"Add Virtual Machines",description:"No VMs were discovered from the provider inventory. Add VMs manually by entering their IDs and names.",vmId:"VM ID",vmIdPlaceholder:"e.g. vm-60527",add:"Add",added:"VMs added"},columns:{vmName:"VM Name",vmId:"VM ID",os:"Operating System",resources:"Resources",powerState:"Power State",network:"Network",datastore:"Datastore"}},dashboard:{title:"Virtual Machine Migration Overview",description:"Migrate virtual machines from VMware vSphere to Harvester using cold migration for data consistency. Create a migration plan to select VMs, map networks and storage, and prepare a migration to Harvester.",createPlan:"Create Migration",tableTitle:"Migrations",columns:{status:"Status",plan:"Migration Plan",progress:"Progress",mappings:"Mappings"},progress:{failed:"Failed",migration:"Migration",initializingMigration:"Initializing migration",finishedSuccessfully:"Finished Successfully",step:"Step {index}",vmCount:"{count} VMs",vmId:"id: {id}"}},configureMappings:{title:"Set Mappings",description:"Map VMware networks and datastores to Harvester and Longhorn target resources",save:"Save Mappings and Continue",noTemplate:"Start from scratch",removeMap:"Remove Map",networkMapping:{title:"Network Mapping",description:"Map VMware port groups to Harvester networks",placeholder:"Choose a Harvester network",template:"Use existing network mapping as template",options:{podNetworking:"Pod Networking",ignored:"Ignored"}},storageMapping:{title:"Storage Mapping",description:"Map VMware datastores to Harvester storage classes",placeholder:"Choose a Longhorn Storage Volume",template:"Use existing storage mapping as template"}},reviewMigration:{title:"Review Migration Plan",description:"Confirm your migration settings before starting the transfer of VMs to the target cluster.",planName:"Name",planNamePlaceholder:"e.g. my-migration-plan",migrationDetails:"Migration Details",totalVms:"Total VMs",vcpu:"vCPU",memory:"Memory",storage:"Storage",source:"Source",targetNamespace:"Target Namespace",migrationMode:"Migration Mode",coldMigration:"Cold Migration",virtualMachines:"Virtual Machines",warningTitle:"Cold Migration Warning",warningMessage:"All source VMs will be powered off, and downtime will occur during migration. Plan your maintenance window accordingly and notify relevant stakeholders",startMigration:"Start Migration Plan"},plan:{states:{error:"Error",canceled:"Canceled",inProgress:"In Progress",active:"Succeeded"},actions:{start:"Start",restart:"Restart",stop:"Stop"}}},vmImport:{titles:{basic:"Basic",auth:"Authentication",pvc:"Volume",networking:"Network Mapping",advanced:"Advanced"},labels:{vmimport:"Virtual Machine Import",vmimportSourceVMWare:"Source VMWare",vmimportSourceOpenStack:"Source OpenStack",vmimportSourceOVA:"Source OVA"},fields:{sourceProvider:"Source Provider Type",sourceCluster:"Source Cluster",vmName:"VM Name",targetStorageClass:"Target Storage Class",sourceNetwork:"Source Network Name",destNetwork:"Destination Network",interfaceModel:"Interface Model",folder:"Folder",diskBus:"Default Disk Bus",defaultInterface:"Default Network Interface",skipPreflight:"Skip Preflight Checks",forcePowerOff:"Force Power Off Source VM",username:"Username",password:"Password",caCert:"CA Certificate (PEM)",selectSecret:"Select Secret",createSecret:"Create New Credentials",useSecret:"Use Existing Secret",none:"None (Public URL)"},placeholders:{selectCluster:"Select a cluster...",selectProviderFirst:"Select a provider type first",matchSource:"Must match the name in the source cluster",folderExample:"e.g. /Datacenters/DC1/vm",caCert:"-----BEGIN CERTIFICATE----- ..."},options:{useDefault:"Use Default"},actions:{addNetwork:"Add Network Mapping",remove:"Remove"},errors:{rfc1123:'Invalid format. Name must be lowercase, alphanumeric, and cannot contain spaces (e.g. "my-vm-1"). If your Source VM name does not match this, you must rename it on the Source cluster first.',networkMappingRequired:"Every Network Mapping row must have a Source and Destination selected."},openstack:{fields:{endpoint:"Identity Service Endpoint",region:"Region",projectName:"Project Name",domainName:"Domain Name",retryCount:"Upload Image Retry Count",retryDelay:"Upload Image Retry Delay"},placeholders:{endpoint:"e.g. https://devstack/identity",region:"e.g. RegionOne",projectName:"e.g. admin",domainName:"e.g. default",retryCount:"Default: 30",retryDelay:"Default: 10"}},vmware:{fields:{endpoint:"vCenter Endpoint",datacenter:"Datacenter"},placeholders:{endpoint:"e.g. https://vscim/sdk",datacenter:"e.g. DC0"},tooltips:{datacenter:"The exact name of the Datacenter object in vCenter"}},ova:{fields:{url:"URL",httpTimeout:"HTTP Timeout"},placeholders:{url:"e.g. https://download.example.com/images/my-vm.ova",httpTimeout:"Default: 600"}}},rancherVcluster:{accessRancher:"Access the Rancher Dashboard",hostname:"Hostname",rancherVersion:"Rancher Version",password:"Bootstrap Password"},switchFailed:"{action} {name} failed!",nvidiaDriverToolkit:{titles:{basic:"Controller",image:"Image",driver:"Driver"},image:{tag:"Image Tag",repository:"Image Repository"},driver:{location:"Driver Location"},enable:{title:"Enable NVIDIA Driver Toolkit"},parsingSpecError:"The field 'spec.valuesContent' has invalid format."},usbController:{titles:{basic:"Basic"}}},loadBalancer:{label:"Load Balancers",tabs:{basic:"Basic",listeners:"Listeners",healthCheck:"Health Check",backendServer:"Backend Server Selector"},workloadType:{label:"Workload Type",options:{cluster:"Guest Kubernetes Cluster",vm:"Virtual Machine"}},ipam:{label:"IPAM",options:{dhcp:"DHCP",pool:"Pool"}},ipPool:{label:"IP Pool",options:{none:"Auto (Select IP Pool automatically)"}},listeners:{name:{label:"Name"},protocol:{label:"Protocol"},port:{label:"Port"},backendPort:{label:"Backend Port",placeholder:"e.g. 80"}},backendServerSelector:{matchingVMs:{matchesSome:'{matched, plural,\n =0 {Matches 0 of {total, number} virtual machines in the namespace where the load balancer is.}\n =1 {Matches 1 of {total, number} virtual machines in the namespace where the load balancer is: "{sample}"}\n other {Matches {matched, number} of {total, number} existing virtual machines in the namespace where the load balancer is, including "{sample}"}\n}'}},backendServers:{label:"Backend Servers"},healthCheck:{warning:{portInUse:"Warning, the Backend Port {port} is in use in Health Check settings. If you need to update the port, update the Health Check settings accordingly."}}},ipPool:{label:"IP Pools",network:{label:"Virtual Machine Network"},tabs:{range:"Range",scope:"Scope",selector:"Selector"},subnet:{label:"Subnet"},startIP:{label:"Start IP"},endIP:{label:"End IP"},gateway:{label:"Gateway"},namespace:{label:"Namespace"},project:{label:"Project"},guestCluster:{label:"Guest Kubernetes Cluster"},availableIP:{label:"Available IP Count"},scope:{label:"Scope",addLabel:"Add Scope"},priority:{label:"Priority"},cidr:{addLabel:"Add CIDR"},range:{addLabel:"Add Range"}},hostNetworkConfig:{label:"Host Networks",mode:{label:"Mode"},tabs:{mode:"Mode",nodeSelector:"Node Selector"},nodeSelector:{addButton:"Add Node Selector"},underlay:{label:"Underlay",tooltip:"Allow this interface to act as the underlay for VM overlay networks.",conflict:"`{name}` host network config already has underlay enabled. Only one underlay is allowed in the cluster.",noKubeovn:{prefix:"The kubeovn-operator add-on is not enabled. Click",middle:"here",suffix:"to enable the add-on for overlay networking."}},vlanID:{label:"VLAN ID"},ipRange:{label:"IP Range ({node})",placeholder:"e.g. 192.168.1.10/24"},ips:{nodeLabel:"Node",label:"IP",placeholder:"e.g. 192.168.1.10/24"}},service:{healthCheckPort:{label:"Health Check Port"},healthCheckSuccessThreshold:{label:"Health Check Success Threshold",description:"If the number of times the probe continuously detects an address successfully reaches the success threshold, then the backend server can start to forward traffic."},healthCheckFailureThreshold:{label:"Health Check Failure Threshold",description:"The backend server will stop forwarding traffic if the number of health check failures reaches the failure threshold."},healthCheckPeriod:{label:"Health Check Period"},healthCheckTimeout:{label:"Health Check Timeout"},healthCheckEnabled:{label:"Health Check"}},secret:{label:"Secrets"},sriov:{label:"SR-IOV Network Devices",nodeName:"Node",numVFs:"Number Of Virtual Functions",vfAddresses:"Virtual Functions Addresses",showMore:"Show More",parentSriov:"Filter By Parent SR-IOV Netork Device",parentSriovGPU:"Filter By Parent SR-IOV GPU Device"},sriovgpu:{label:"SR-IOV GPU Devices",nodeName:"Node",numVFs:"Number of Virtual Functions",vfAddresses:"Virtual Functions Addresses",vGpuDevices:"vGPU Devices",showMore:"Show More",parentSriov:"Filter By Parent SR-IOV GPU",noPermission:"Please contact your system administrator to add Harvester add-ons first.",goSetting:{prefix:"The nvidia-driver-toolkit add-on is not enabled, click",middle:"here",suffix:"to enable it to manage your SR-IOV GPU devices."}},migconfiguration:{label:"vGPU MIG Configurations",status:{outOfSync:"Out of Sync"},infoBanner:"To configure the MIG configuration, please disable it first and re-enable after editing the configuration.",profileSpec:"Profile Specs",profileStatus:"Profile Status",tableHeaders:{profileName:"Profile Name",total:"Total",vGPUID:"vGPU ID",available:"Available",requested:"Requested"},requested:"Requested",available:"Available",total:"Total",vGPUID:"vGPU ID",goSriovGPU:{prefix:"Please enable the supported GPU devices in",middle:"SR-IOV GPU Devices",suffix:"page to manage the vGPU MIG configurations."}},vgpu:{label:"vGPU Devices",noPermission:"Please contact system administrator to add Harvester add-ons first.",detachWarning:{title:"Cannot Disable vGPU",message:"Please detach the device from the VM and save it first before disabling this vGPU device."},goSetting:{prefix:"The nvidia-driver-toolkit add-on is not enabled, click",middle:"here",suffix:"to enable it to manage your vGPU devices."},enableGroup:"Enable Group",disableGroup:"Disable Group",enable:{title:"Select vGPU",type:"Type"},available:"Available Devices",compatibleNodes:"Compatible Nodes",impossibleSelection:"There are no hosts with all of the selected devices.",howToUseDevice:"Use the table below to enable vGPU devices you want to use in this virtual machine.",deviceInTheSameHost:"You can only select devices on the same host."},usb:{label:"USB Devices",noPermission:"Please contact system admin to add Harvester add-ons first",goSetting:{prefix:"The pcidevices-controller add-on is not enabled, click",middle:"here",suffix:"to enable it to manage your USB devices."},enableGroup:"Enable Group",disableGroup:"Disable Group",available:"Available USB Devices",compatibleNodes:"Compatible Nodes",impossibleSelection:"There are no hosts with all of the selected devices.",howToUseDevice:"Use the table below to enable USB passthrough on each device you want to use in this VM.",deviceInTheSameHost:"You can only select devices on the same host.",showCompatibility:"Show device compatibility matrix",hideCompatibility:"Hide device compatibility matrix",claimError:"Error enabling passthrough on {name}",unclaimError:"Error disabling passthrough on {name}",cantUnclaim:"You cannot disable passthrough on a device claimed by another user.",detachWarning:{title:"Cannot Disable Passthrough",message:"Please detach the device from the VM and save it first before disabling passthrough."},enablePassthroughWarning:"Please re-enable the USB device if the device path changes in the following situations:  1) Re-plugging the USB device.  2) Rebooting the node.
An incorrect device path may cause passthrough to fail.",classType:"Class Type"},harvesterVlanConfigMigrateDialog:{targetClusterNetwork:{label:"Target Cluster Network",placeholder:"Choose Target Cluster Network"}},seeder:{banner:{enable:{prefix:'The "harvester-seeder" add-on is disabled.',middle:"Click here",suffix:"to enable it."},noAccess:"Please contact your system administrator to enable the Out-of-Band Access first.",noAddon:'The "harvester-seeder" add-on does not exist, please check if it is installed.',noInventory:'Waiting for "inventories.metal.harvesterhci.io" to be ready.'},inventory:{host:{label:"Host",placeholder:"e.g. 172.16.1.1"},port:{label:"Port",placeholder:"e.g. 623"},insecureTLS:{label:"Insecure TLS"},secret:{label:"Secret",create:{title:"Add Secret"}},event:{label:"Event"},pollingInterval:{label:"Polling Interval"}}}},typeDescription:{harvester:"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos and color scheme."},advancedSettings:{experimental:"Experimental features allow users to test and evaluate early-access functionality prior to official supported releases",descriptions:{"harv-vlan":"Default Network Interface name of the VLAN network.","harv-backup-target":"Custom backup target to store virtual machine backups.",branding:"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos, and color scheme.","harv-csi-driver-config":"Configure additional information for CSI drivers.","harv-csi-online-expand-validation":"Allow online volume expansion for specific CSI drivers.","harv-containerd-registry":"Containerd Registry Configuration to connect private registries.","harv-log-level":"Configure Harvester server log level. Defaults to Info.","harv-server-version":"Harvester server version.","harv-upgrade-checker-enabled":"Specifies whether to enable Harvester upgrade check or not. Default is True.","harv-upgrade-checker-url":"Default Harvester upgrade check url. Only used when the upgrade-checker-enabled is equal to True.","harv-ui-source":"Configure how to load the UI source. The `External` option is used to load the UI from a ui-index URL, while the `Bundled` option loads the UI from the local Harvester server.","harv-ui-index":"HTML index location for the UI.","harv-cluster-registration-url":"Registration URL for multi-cluster management.","harv-http-proxy":"HTTP proxy for Harvester to access external services.","harv-additional-ca":"Custom CA root certificates for TLS validation.","harv-overcommit-config":"Resource overcommit configuration.","harv-support-bundle-timeout":"Support bundle timeout configuration in minutes, use 0 to disable the timeout.","harv-support-bundle-file-name":"Support bundle file name configuration.","harv-support-bundle-expiration":"Support bundle expiration configuration in minutes.","harv-support-bundle-node-collection-timeout":"Support bundle node collection timeout configuration in minutes.","harv-vm-force-reset-policy":"Configuration for the force-reset action when a virtual machine is stuck on a node that is down.","harv-ssl-parameters":"Custom SSL Parameters for TLS validation.","harv-storage-network":"Longhorn storage-network setting.","harv-rwx-network":"Configure RWX network behavior for shared or dedicated storage network usage.","harv-support-bundle-namespaces":"Select additional namespaces to include in the support bundle.","harv-auto-disk-provision-paths":"Specify the disks(using glob pattern) that Harvester will automatically add as virtual machine storage.","harv-support-bundle-image":'Support bundle image configuration. Find different versions in rancher/support-bundle-kit.',"harv-release-download-url":"This setting allows you to configure the upgrade release download URL address. Harvester will get the ISO URL and checksum value from the ($URL/$VERSION/version.yaml) file hosted by the configured URL.","harv-default-vm-termination-grace-period-seconds":"Configure the virtual machine termination grace period for virtual machine stop.","harv-ntp-servers":"Configure NTP server. You can configure multiple IPv4 addresses or host addresses.","harv-auto-rotate-rke2-certs":"The certificate rotation mechanism relies on Rancher. Harvester will automatically update certificates generation to trigger rotation.","harv-kubeconfig-default-token-ttl-minutes":"TTL (in minutes) applied on Harvester administration kubeconfig files. Default is 0, which means to never expire.","harv-longhorn-v2-data-engine-enabled":'Enable the Longhorn V2 data engine. Default is false.
Changing this setting will restart RKE2 on all nodes. This will not affect running VM workloads.
If you see "not enough hugepages-2Mi capacity" errors when enabling this setting, wait a minute for the error to clear. If the error remains, reboot the affected node.
',"harv-longhorn-v2-data-engine-hugepage-enabled":"Enable hugepages when using the Longhorn V2 data engine. Default is true. Disabling hugepages reduces memory pressure on low-spec nodes and increases deployment flexibility. However, performance may be lower compared to running with hugepages.","harv-longhorn-v2-data-engine-memory-size":"Configure the amount of memory allocated to the SPDK target daemon when using the Longhorn V2 data engine. Default is 2048 MiB.","harv-additional-guest-memory-overhead-ratio":"The ratio for kubevirt to adjust the VM overhead memory. The value could be zero, empty value or floating number between 1.0 and 10.0, default to 1.5.","harv-upgrade-config":'Configure image preloading and VM restore options for upgrades. See related fields in settings/upgrade-config',"harv-vm-migration-network":"Segregated network for VM migration traffic.","harv-rancher-cluster":"Configure Rancher cluster integration settings for guest cluster management.","harv-max-hotplug-ratio":"The ratio for kubevirt to limit the maximum CPU and memory that can be hotplugged to a VM. The value could be an integer between 1 and 20, default to 4.","harv-kubevirt-migration":"Configure cluster-wide KubeVirt live migration parameters.","harv-instance-manager-resources":"Configure resource percentage reservations for Longhorn instance manager V1 and V2. Valid instance manager CPU range between 0 - 40.","harv-cluster-pod-security-standard":"Enforce Kubernetes Pod Security Standards (PSS) at the cluster level."}},typeLabel:{"kubevirt.io.virtualmachine":"{count, plural,\n one { Virtual Machine }\n other { Virtual Machines }\n}","harvesterhci.io.virtualmachineimage":"{count, plural,\n one { Image }\n other { Images }\n}","harvesterhci.io.keypair":"{count, plural,\n one { SSH Key }\n other { SSH Keys }\n}","harvesterhci.io.host":"{count, plural,\n one { Host }\n other { Hosts }\n}","harvesterhci.io.networkattachmentdefinition":"{count, plural,\n one { Virtual Machine Network }\n other { Virtual Machine Networks }\n}","harvesterhci.io.volume":"{count, plural,\n one { Volume }\n other { Volumes }\n}","harvesterhci.io.user":"{count, plural,\n one { User }\n other { Users }\n}","harvesterhci.io.setting":"{count, plural,\n one { Setting }\n other { Settings }\n}","harvesterhci.io.virtualmachinetemplateversion":"{count, plural,\n one { Template }\n other { Templates }\n}","harvesterhci.io.schedulevmbackup":"{count, plural,\n one { Virtual Machine Schedule }\n other { Virtual Machine Schedules }\n}","harvesterhci.io.virtualmachinebackup":"{count, plural,\n one { Virtual Machine Backup }\n other { Virtual Machine Backups }\n}","kubeovn.io.vpc":"{count, plural,\n one { Virtual Private Cloud }\n other { Virtual Private Clouds }\n}","kubeovn.io.vlan":"{count, plural,\n one { VLAN Network }\n other { VLAN Networks }\n}","kubeovn.io.providernetwork":"{count, plural,\n one { Provider Network }\n other { Provider Networks }\n}","kubeovn.io.vpcnatgateway":"{count, plural,\n one { NAT Gateway }\n other { NAT Gateways }\n}","kubeovn.io.iptablessnatrule":"{count, plural,\n one { Source Rule }\n other { Source Rules }\n}","kubeovn.io.iptablesdnatrule":"{count, plural,\n one { Destination Rule }\n other { Destination Rules }\n}","kubeovn.io.iptableseip":"{count, plural,\n one { External IP }\n other { External IPs }\n}","networking.k8s.io.networkpolicy":"{count, plural,\n one { Network Policy }\n other { Network Policies }\n}","harvesterhci.io.cloudtemplate":"{count, plural,\n one { Cloud Configuration Template }\n other { Cloud Configuration Templates }\n}","harvesterhci.io.volumesnapshot":"{count, plural,\n one { Volume Snapshot }\n other { Volume Snapshots }\n}","harvesterhci.io.vmsnapshot":"{count, plural,\n one { Virtual Machine Snapshot }\n other { Virtual Machine Snapshots }\n}","network.harvesterhci.io.vlanconfig":"{count, plural,\n one { Network Configuration }\n other { Network Configurations }\n}","harvesterhci.io.monitoring.alertmanagerconfig":"{count, plural,\n one { Alertmanager Configuration }\n other { Alertmanager Configurations }\n}","harvesterhci.io.logging.clusterflow":"{count, plural,\n one { Cluster Flow }\n other { Cluster Flows }\n}","harvesterhci.io.logging.clusteroutput":"{count, plural,\n one { Cluster Output }\n other { Cluster Outputs }\n}","harvesterhci.io.logging.flow":"{count, plural,\n one { Flow }\n other { Flows }\n}","harvesterhci.io.logging.output":"{count, plural,\n one { Output }\n other { Outputs }\n}","harvesterhci.io.storage":"{count, plural,\n one { Storage Class }\n other { Storage Classes }\n}","devices.harvesterhci.io.pcidevice":"{count, plural,\n one { PCI Device }\n other { PCI Devices }\n}","network.harvesterhci.io.clusternetwork":"{count, plural,\n one { Cluster Network }\n other { Cluster Networks }\n}","network.harvesterhci.io.hostnetworkconfig":"{count, plural,\n one { Host Network }\n other { Host Networks }\n}","harvesterhci.io.addon":"{count, plural,\n one { Add-on }\n other { Add-ons }\n}","devices.harvesterhci.io.sriovnetworkdevice":"{count, plural,\n one { SR-IOV Network Device }\n other { SR-IOV Network Devices }\n}","devices.harvesterhci.io.sriovgpudevice":"{count, plural,\n one { SR-IOV GPU Device }\n other { SR-IOV GPU Devices }\n}","devices.harvesterhci.io.vgpudevice":"{count, plural,\n one { vGPU Device }\n other { vGPU Devices }\n}","devices.harvesterhci.io.migconfiguration":"{count, plural,\n one { vGPU MIG Configuration }\n other { vGPU MIG Configurations }\n}","harvesterhci.io.secret":"{count, plural,\n one { Secret }\n other { Secrets }\n}","harvesterhci.io.blockdevice":"{count, plural,\n one { Disk }\n other { Disks }\n}","loadbalancer.harvesterhci.io.loadbalancer":"{count, plural,\n one { Load Balancer }\n other { Load Balancers }\n}","loadbalancer.harvesterhci.io.ippool":"{count, plural,\n one { IP Pool }\n other { IP Pools }\n}","migration.harvesterhci.io.openstacksource":"{count, plural,\n one { OpenStack Source }\n other { OpenStack Sources }\n}","migration.harvesterhci.io.vmwaresource":"{count, plural,\n one { VMware Source }\n other { VMware Sources }\n}","migration.harvesterhci.io.ovasource":"{count, plural,\n one { OVA Source }\n other { OVA Sources }\n}","migration.harvesterhci.io.virtualmachineimport":"{count, plural,\n one { Virtual Machine Import }\n other { Virtual Machine Imports }\n}","forklift.konveyor.io.provider":"{count, plural,\n one { Provider }\n other { Providers }\n}","forklift.konveyor.io.networkmap":"{count, plural,\n one { Network Map }\n other { Network Maps }\n}","forklift.konveyor.io.storagemap":"{count, plural,\n one { Storage Map }\n other { Storage Maps }\n}","forklift.konveyor.io.plan":"{count, plural,\n one { Migration Plan }\n other { Migration Plans }\n}","forklift.konveyor.io.migration":"{count, plural,\n one { Migration }\n other { Migrations }\n}"}}];e.exports=t.length<=1?t[0]:t}}]);
+(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_9_0_rc1"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_9_0_rc1"]||[]).push([[37],{49037:function(e){const t=[{wizard:{create:"Create",next:"Proceed",previous:"Back"},generic:{tip:"Tip",resourceExternalLinkTips:"External Link",namespace:"Namespace",notReady:"Not Ready",labels:"Labels",inProgress:"In Progress",basic:"Basic",loading:"Loading...",none:"None",duration:{infinite:"Infinite","1s":"1 second","5s":"5 seconds","10s":"10 seconds","30s":"30 seconds","1m":"1 minute","3m":"3 minutes","5m":"5 minutes"}},unsupported:{serverVersion:"Current version: {serverVersion}",description:"Harvester ui only supports Harvester cluster version greater or equal to 1.3.0.",learnMore:'Learn more about Harvester from the Harvester Web Site or read the Harvester Docs'},nav:{group:{networks:"Networks",backupAndSnapshot:"Backup and Snapshots",Monitoring:"Monitoring",Logging:"Logging","Monitoring and Logging":"Monitoring and Logging",vmimport:"Virtual Machine Imports",vmMigration:"Virtual Machine Migration",Configurations:"Configurations"}},resourceTable:{groupBy:{device:"Group by Device"}},validation:{arrayCountRequired:"At least {count} {key} {count, plural, =1 {is} other {are}} required, and {key} can not be empty."},members:{clusterMemebership:"Cluster Membership",projectMembership:"Project Membership"},asyncButton:{createAndStart:{action:"Create and Start"},restart:{action:"Save and Restart",success:"Restarted",waiting:"Restarting…"}},dialog:{confirmExecution:{title:"Are you sure?",andOthers:"{count, plural,\n=0 {}\n=1 { and one other }\nother { and {count} other }\n}",protip:"Tip: Hold the {alternateLabel} key while clicking action to bypass this confirmation",stop:{message:"Are you sure you want to stop the {type} {names}?"},pause:{message:"Are you sure you want to pause the {type} {names}?"},restart:{message:"Are you sure you want to restart the {type} {names}?"},softreboot:{message:"Are you sure you want to soft reboot the {type} {names}?"}},promptRemove:{title:"Delete {type}",warningMessage:"Deleting the selected {type} permanently removes all resources on {thisOrThese} {type}. This action is irreversible. Do you want to continue?",confirmName:"Type {nameToMatch} to delete the {type}:",protip:"Tip: Hold the {alternateLabel} key while clicking Delete to bypass the confirmation step."}},harvester:{branding:{logos:{tip:"Upload a logo to replace the Harvester logo in the top-level navigation header. Image height should be 21 pixels with a max width of 200 pixels. Max file size is 20KB. Accepted formats: JPEG, PNG, SVG."},favicon:{tip:"Upload an icon to replace the Harvester favicon in the browser tab. Max file size is 20KB"}},productLabel:"Harvester",modal:{backup:{success:"Backup { backUpName } has been initiated.",addBackup:"Add Backup",fileSystemFreezeDeadline:{label:"File System Freeze Deadline"}},quota:{editVMQuota:"Edit VM Quota",editQuota:"Edit Quota",bannerMessage:"Set to empty string or 0 to remove total snapshot size quota."},restore:{success:"Restore { name } created successfully.",title:"Backup and Restore",selectBackup:"Select Backup",message:{backup:"Please select the backup that needs to be restored."}},createTemplate:{title:"Generate Template",name:"Name",description:"Description",message:{tip:"Please enter a template name!",success:"Template { templateName } created successfully.",failed:"Failed generated template!"}},schedule:{title:"Create Schedule",message:{tip:"Please enter a schedule name!",success:"Schedule { name } created successfully.",failed:"Failed create schedule!"}},cloneVM:{title:"Clone Virtual Machine",name:"New Virtual Machine Name",type:"Clone volume data",action:{create:"Create",clone:"Clone"},message:{tip:"Please enter a virtual machine name!",success:"Virtual machine { name } cloned successfully.",failed:"Failed clone virtual machine!"}},osImage:{title:"Delete Image",message:"Are you sure you want to delete the image { name } ?"},downloadImage:{title:"Download Image",banner:"This action takes a while depending on the image size ({ size }). Please be patient.",startMessage:"The download process will auto start once the conversion is complete.",download:"Download"},exportImage:{title:"Export to Image",name:"Name",namespace:"Namespace",message:{success:"Image { name } created successfully."}},storageMigration:{title:"Storage Migration",fields:{sourceVolume:{label:"Source Volume",placeholder:"Select a source volume"},targetVolume:{label:"Target Volume",placeholder:"Select a target volume"}}},dataMigration:{title:"Data Migration",fields:{targetVolumeName:{label:"Target Volume Name",placeholder:"Enter a target volume name"},targetStorageClassName:{label:"Target Storage Class",placeholder:"Select a storage class"}}},migration:{failedMessage:"Latest migration failed!",title:"Migration",vmMigrationTitle:"{count, plural, one {Migrating # VM} other {Migrating # VMs}}",selectedVMs:"The following virtual machine(s) will be migrated to the target node",unknownNode:"(unknown node)",alreadyOnTarget:"Already on Target",fields:{nodeName:{label:"Target Node",placeholder:"Choose Target Node"}}},ejectCDROM:{title:"Eject CD-ROM",warnTip:"Eject volume will restart the virtual machine.",operationTip:"Select the volume you want to delete:",delete:"Delete"},bundle:{title:"Generate a Support Bundle",titleDescription:"Collect system-related logs in Harvester to assist with troubleshooting and support.",tip:'Each field below specifies an aspect of the support bundle. For detailed explanations, please refer to the documentation.',url:"Issue URL",description:"Description",namespaces:{label:"Namespaces",tooltip:"Select additional namespaces to include in the support bundle. See docs support-bundle-namespaces for detail.",selectAll:"Select All",unselectAll:"Unselect All"},timeout:{label:"Timeout",tooltip:"Minutes allows for completion of the support bundle generation process. See docs support-bundle-timeout for detail."},expiration:{label:"Expiration",tooltip:"Minutes before deleting packaged but not downloaded support bundle. See docs support-bundle-expiration for detail."},nodeTimeout:{label:"Node Collection Timeout",tooltip:"Minutes allowed for collecting logs/configurations on nodes. See docs support-bundle-node-collection-timeout for detail."}},hotplugVolume:{success:"Volume { diskName } is mounted to the virtual machine { vm }.",title:"Add Volume"},hotplugNic:{success:"The settings have been saved, but the network interface {interfaceName} will be attached only after the virtual machine is migrated.",title:"Add Network Interface",vmNetwork:"Virtual Machine Network",macAddress:"MAC Address",macAddressTooltip:"If left blank, the MAC address will be automatically generated."},insertCdRomVolume:{success:"{ imageName } is inserted into device { deviceName }.",title:"Insert Image",image:"Image",actionLabel:"Insert Image"},cpuMemoryHotplug:{success:"CPU and Memory are updated to the virtual machine { vm }.",title:"Edit CPU and Memory",maxResourcesMessage:"You can increase the CPU to maximum { maxCpu }C and memory to maximum { maxMemory }."},snapshot:{title:"Take Snapshot",name:"Name",message:{success:"Take Snapshot { name } successfully."}},volumeClone:{title:"Clone Volume",name:"Name",message:{success:"New Volume { name } cloned successfully."}},restoreSnapshot:{title:"Restore Snapshot",name:"New Volume Name",success:"New Volume { name } restored successfully."},vmSnapshot:{title:"Take Virtual Machine Snapshot",name:"Name",success:"Take virtual machine Snapshot { name } successfully.",fileSystemFreezeDeadline:{label:"File System Freeze Deadline"}},restart:{title:"Restart Virtual Machine",tip:"Restart the virtual machine for configuration changes to take effect.",cancel:"Save"}},notification:{title:{succeed:"Succeed",info:"Info",warning:"Warning",error:"Error"},restartRequired:{title:"{count} {count, plural, =1 {Virtual Machine is} other {Virtual Machines are}} Pending Restart",message:"Please restart { vmNames } to apply updated configurations"}},action:{createVM:"Create Virtual Machine",start:"Start",restart:"Restart",softreboot:"Soft Reboot",stop:"Stop",pause:"Pause",deepClone:"Clone",shallowClone:"Clone Template",unpause:"Unpause",encryptImage:"Encrypt Image",decryptImage:"Decrypt Image",ejectCDROM:"Eject CD-ROM",editVMQuota:"Edit Virtual Machine Quota",launchFormTemplate:"Launch instance from template",modifyTemplate:"Modify template (Create new version)",setDefaultVersion:"Set default version",addTemplateVersion:"Add template version",backup:"Take Backup",createSchedule:"Create Schedule",restore:"Restore",restoreNewVM:"Restore New",resumeSchedule:"Resume",suspendSchedule:"Suspend",restoreExistingVM:"Replace Existing",migrate:"Migrate",vmMigrate:"Virtual Machine Migration",cpuAndMemoryHotplug:"Edit CPU and Memory",abortMigration:"Abort Migration",storageMigration:"Storage Migration",cancelStorageMigration:"Cancel Storage Migration",dataMigration:"Data Migration",createTemplate:"Generate Template",enableMaintenance:"Enable Maintenance Mode",disableMaintenance:"Disable Maintenance Mode",enableCPUManager:"Enable CPU Manager",disableCPUManager:"Disable CPU Manager",cordon:"Cordon",uncordon:"Uncordon",addHotplugVolume:"Add Volume",addHotplugNic:"Hotplug Network Interface",exportImage:"Export Image",viewlogs:"View Logs",cancelExpand:"Cancel Expand",snapshot:"Take Snapshot",pvcClone:"Clone Volume",vmSnapshot:"Take Virtual Machine Snapshot",shutdown:"Shut Down",powerOn:"Power On",reboot:"Reboot",reconnect:"Reconnect",forceStop:"Force Stop"},formatters:{hardwareResourceGauge:{allocated:"Allocated",consumption:"{useful} of {total} {units} {suffix}",cores:"CPU",pods:"Pods",ram:"Memory",used:"Used",reserved:"Reserved",units:{cores:"{count, plural,\n=1 {core}\nother {cores}}"}},harvesterIpAddress:{customIpTooltip:"Custom IP (set via annotation)"}},tableHeaders:{hostNetworkConfig:{underlay:"Underlay",underlayTooltip:"Allow this interface to act as the underlay for VM overlay networks.",vlanID:"VLAN ID",mode:"Mode",clusterNetwork:"Cluster Network"},imageEncryption:"Encryption",size:"Size",virtualSize:"Virtual Size",progress:"Progress",message:"Message",phase:"Phase",attachedVM:"Attached Virtual Machine",cpuManager:"CPU Manager",routeConnectivityTooltip:"Connectivity between the VM network and the management network, which the Harvester nodes are connected to.",fingerprint:"Fingerprint",value:"Value",actions:"Actions",readyToUse:"Ready To Use",backupTarget:"Backup Target",targetVm:"Target Virtual Machine",cronExpression:"Cron Expression",retain:"Retain",scheduleType:"Type",configuredProfiles:"Configured Profiles",maxFailure:"Max Failure",sourceVm:"Source Virtual Machine",vmSchedule:"Virtual Machine Schedule",hostIp:"Host IP",vm:{ipAddress:"IP Address",node:"Node",defaultVersion:"Default Version"},network:{type:"Type",vlan:"VLAN ID"},snapshotTargetVolume:"Original Volume",volumeSnapshotCounts:"Snapshot Counts",networkState:"Network State",totalSnapshotQuota:"Total Snapshot Quota",storageClass:"Storage Class",restore:"Restore",vmImportSourceVm:"Source VM",vmImportSourceCluster:"Source Cluster",vmImportStatus:"Import Status",vmImportSourceVDatacenter:"Datacenter",vmImportSourceVEndpoint:"Endpoint",vmImportSourceVClusterStatus:"Cluster Status",vmImportSourceORegion:"Region",vmImportSourceOEndpoint:"Endpoint",vmImportSourceOClusterStatus:"Cluster Status",vmImportSourceOVAUrl:"URL",vmImportSourceOVAStatus:"Status",v4ip:"V4 IP",v6ip:"V6 IP",eipName:"EIP Name",vmMigrationProviderType:"Type",vmMigrationProviderUrl:"URL",vmMigrationMapSourceProvider:"Source Provider",vmMigrationMapDestProvider:"Destination Provider",vmMigrationPlanTargetNs:"Target Namespace",vmMigrationPlanVmCount:"VM Count",vmMigrationMigrationPlan:"Plan"},tab:{volume:"Volumes",network:"Networks",advanced:"Advanced Options",accessCredentials:"Access Credentials",pciDevices:"PCI Devices",vGpuDevices:"vGPU Devices",usbDevices:"USB Devices",vmScheduling:"Virtual Machine Scheduling",quotas:"Quotas",snapshots:"Snapshots",instanceLabel:"Instance Labels",annotations:"Annotations",filesystem:"Filesystem Volume"},fields:{version:"Version",name:"Name",type:"Type",image:"Image",size:"Size",volume:"Volume",network:"Network",model:"Model",macAddress:"MAC address",staticIp:"Static IP",port:"Port",protocol:"Protocol",remove:"Remove",PhysicalNic:"Physical NIC",cpu:"CPU",memory:"Memory",virtualName:"Virtual machine name",promiscuous:"Promiscuous",ipv4Address:"IPv4 address",filterLabels:"Filter labels",filterSchedule:"Filter schedule",storageClass:"Storage class",dockerImage:"Docker image"},pci:{available:"Available Devices",compatibleNodes:"Compatible Nodes",impossibleSelection:"There are no hosts with all of the selected devices.",howToUseDeviceInVMCreation:{prefix:"Use the table below to enable PCI passthrough on each device you want to use in this virtual machine. For vGPU devices, please enable them on the",middle:"vGPU Devices",suffix:"page first."},howToUseDevice:{prefix:"Select the device in the table to enable PCI passthrough. For vGPU devices, please enable them on the",middle:"vGPU Devices",suffix:"page."},deviceInTheSameHost:"You can only select devices on the same host.",showCompatibility:"Show device compatibility matrix",hideCompatibility:"Hide device compatibility matrix",claimError:"Error enabling passthrough on {name}",unclaimError:"Error disabling passthrough on {name}",cantUnclaim:"You cannot disable passthrough on a device claimed by another user.",detachWarning:{title:"Cannot Disable Passthrough",message:"Please detach the device from the VM and save it first before disabling passthrough."},enableGroup:"Enable Group",disableGroup:"Disable Group",labelRequired:"This rule should not be manually altered: it ensures that the PCI devices selected for this virtual machine are available on the virtual machine's host.",goSetting:{prefix:"The pcidevices-controller add-on is not enabled, click",middle:"here",suffix:"to enable the add-on to successfully manage your PCI devices."},noPCIPermission:"Please contact your system administrator to enable the PCI devices first.",enablePassthroughWarning:"Please be careful not to use host-owned PCI devices (e.g., management and VLAN NICs). Incorrect device allocation may cause damage to your cluster, including node failure.",disableResourcePooling:"Disable Resource Pooling",disableResourcePoolingDescription:"Assigns this device a unique resource name so it can be pinned to a specific VM, instead of sharing the pool with other identical devices."},devices:{matrixHostName:"Host Name",matrixDeviceClaimName:"Device Claim Name"},generic:{close:"Close",open:"Open",showMore:"Show More",hideMore:"Hide More",memory:"Memory",cpu:"CPU",storage:"Storage",noFileChosen:"No file chosen",noSchema:"Can not find the custom resource definition: {schema}."},validation:{custom:{tooLongName:'"Name" cannot be more than {max} characters.'},generic:{hasDelete:'{type} "{name}" has been deleted.',maxLength:'"{key}" cannot be more than {max} characters',tabError:"{prefix}: {message}",maximumSize:"Exceed maximum size {max}!",regex:'Invalid {lowerType} "{name}": {upperType} must match the regex "{regex}"'},vm:{name:"name is required!",memory:'"Memory" is required!',duplicatedName:'duplicate {type} name: "{name}"',network:{macFormat:"Invalid MAC address format.",upperType:"Network name",lowerType:"network name"},volume:{upperType:"Volume name",lowerType:"volume name",needAtLeastOneBootable:"At least one bootable volume is required!"}},image:{ruleTip:"The URL you have entered ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw.",ruleFileTip:"The file you have chosen ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw."},hash:{sha512:"Invalid SHA512 checksum."},subnet:{excludeIps:"Exclude IPs cannot be empty. Please remove or fill in the exclude IPs.",aclEmptyError:"The fields in subnet access control list rule can not be empty."}},dashboard:{label:"Dashboard",header:"Harvester Cluster: {cluster}",hardwareResourceGauge:{cpu:"CPU",memory:"Memory",storage:"Storage",allocated:"Allocated"},sections:{events:{label:"Events"},vmMetrics:{label:"Virtual Machine Metrics"}},version:"Version"},host:{console:"Console",label:"Hosts",inconsistentIP:"Host IP is inconsistent, current IP: { currentIP }, initial IP: { initIP }",noConsoleUrl:"Console URL not specified",promote:{none:" ",running:"Promoting",failed:"Promote failed",unknown:"Promote halted",promoteRestart:"Restarting",promoteSucceed:"Promote completed"},tabs:{network:"Network",overview:"Overview",basics:"Basics",instance:"Virtual Machines",monitor:"Monitor Data",storage:"Storage",labels:"Labels",ksmtuned:"Ksmtuned",hugepages:"Hugepages",seeder:"Out-of-band Access"},detail:{kvm:{disableMessage:"Hardware-based virtualization is disabled or not supported. Hardware-based virtualization must be enabled before creating any virtual machines."},title:{network:"Network Configuration"},hostIP:"Host IP",role:"Role",os:"Operating System",create:"Creation Time",update:"Last Update Time",customName:"Custom Name",consoleUrl:"Console URL",more:"More Information",uuid:"UUID",containerRuntime:"Container Runtime",kernel:"Kernel",management:"Management Node",compute:"Compute Node",storage:"Storage",nic:"Physical NIC",notRecommended:"Not recommended",networkType:"Type",manufacturer:"Manufacturer",serialNumber:"Serial Number",model:"Model",etcd:"Witness Node",cpuManager:"CPU Manager"},enableMaintenance:{title:"Enable Maintenance Mode",protip:"The operation will migrate all virtual machines on this node to other nodes.",shutDownVMs:"Check Force option to shutdown virtual machines which cannot be migrated in live mode.",force:"Force"},cordon:{title:"Cordon",protip:"This operation will mark the node { node } as unschedulable."},ksmtuned:{run:"Run Strategy",configure:"Configure",mode:"Mode",modeLink:'Mode ',thresCoef:"Threshold Coefficient",enableMergeNodes:"Enable merging across nodes",enable:"Enable",disable:"Disable",ksmStatus:"KSM Status",modeOption:{standard:"Standard",high:"High-performance",customized:"Customized"},parameters:{title:"Ksmtuned Parameters",boost:"Boost",decay:"Decay",sleepMsec:"Sleep Time (Millisecond)",minPages:"Minimum Pages",maxPages:"Maximum Pages",description:{boost:"The number of scanned pages is incremented each time if the available memory is less than the threshold coefficient.",decay:"The number of scanned pages is decremented each time if the available memory is greater than the threshold coefficient.",sleepMsec:"The interval between two scans (the minimum value is 10ms), which is calculated by the formula (Sleep Milliseconds * 16 * 1024 * 1024/Total Memory).",minPages:"The minimum number of pages per scan, also the configuration for the first run.",maxPages:"Maximum number of pages per scan."}},statistics:{title:'Statistics ',sharing:"Sharing",shared:"Shared",unshared:"Unshared",volatile:"Volatile",fullScans:"Full Scans",stableNodeChains:"Stable Node Chains",stableNodeDups:"Stable Node Dups"}},hugepages:{meminfo:"Meminfo",transparent:{title:'Transparent Hugepages ',enabled:"Enabled",shmemEnabled:"Shared Memory Enabled",defrag:"Defragmentation"},status:{anon:"Anonymous Hugepages (bytes)",size:"Default Hugepage Size (bytes)",total:"Total Hugepages",free:"Free Hugepages",rsvd:"Reserved Hugepages",surp:"Surplus Hugepages"}},disk:{add:"Add Disk",path:{label:"Path"},storageReserved:{label:"Storage Reserved"},allowScheduling:{label:"Scheduling",tooltip:"Disk {name} ({path}) scheduling is disabled"},evictionRequested:{label:"Eviction Requested"},forceFormatted:{label:"Force Formatted",toolTip:"Force formatted will clean up disk data, make sure you backup all available data to prevent data loss.",yes:"Yes (Ext4 File System)"},description:{label:"Description"},lastFormattedAt:{info:"The disk has already been force-formatted."},notification:{success:'Update host "{name}" storage configurations successfully.'},error:"Host has unready or unschedulable disks.",mounted:"Already Mounted",fileSystem:{info:"Current file system is {system}, You can format it manually.",formatting:"Disk is formatting, please wait."},tags:{label:"Disk Tags",addLabel:"Add Disk Tag"},conditions:"Conditions",storageAvailable:{label:"Storage Available"},storageScheduled:{label:"Storage Scheduled"},storageMaximum:{label:"Storage Maximum"},provisioner:"Provisioner",lvmVolumeGroup:{label:"Volume Group",create:"Create New..."},storage:{longhorn:{LonghornV1:{label:"Longhorn V1 (CSI)"},LonghornV2:{label:"Longhorn V2 (CSI)"}},lvm:{label:"LVM"}}},tags:{label:"Host Tags",addLabel:"Add Host Tag"},powerAction:{message:{success:"Perform host { name } { operation } successfully."}},ntp:{label:"NTP Server Addresses",tips:"You can configure multiple IPv4 addresses or host addresses.",placeholder:"e.g. IPv4",ntpSyncStatus:{isDisabled:"NTP is disabled. Please check the NTP service is active.",isUnsynced:"NTP is not synchronized with the NTP server {current}."}}},virtualMachine:{label:"Virtual Machines",osType:"OS Type",cpuModel:{label:"CPU Model",fetchError:"Failed to load CPU model configuration: {error}",optionLabel:"{modelName} ({count} {count, plural, one {node} other {nodes}})"},hotplug:{title:"Enable CPU and memory hotplug",tooltip:"The default maximum CPU and maximum memory are {hotPlugTimes} times based on CPU and memory.",restartVMMessage:"Restart action is required for the virtual machine configuration change to take effect"},hotUnplug:{actionLabel:"Detach",detachVolume:{title:"Are you sure that you want to detach volume {name}?",actionLabel:"Detach Volume",success:"Volume { name } is detached successfully."},ejectCdRomVolume:{title:"Are you sure that you want to eject image from device {name}?",actionLabel:"Eject Image",success:"Image from device { name } is ejected successfully."},detachNIC:{title:"Are you sure that you want to detach network interface {name}?",actionLabel:"Detach Network Interface",success:"The settings have been saved, but the network interface {name} will be detached only after the virtual machine is migrated."}},instance:{singleInstance:null,multipleInstance:null,single:{label:"Single Instance",nameLabel:"Name",host:{label:"Hostname",placeholder:"Default to the virtual machine name."}},multiple:{label:"Multiple Instance",nameNsDescription:"Name prefix for each instance",count:"Count",countTip:"Count should be between 1 and 10",nameLabel:"Name Prefix",host:{label:"Host Prefix Name",placeholder:"Default to the virtual machine name."}}},useTemplate:{label:"Use the virtual machine template:",template:{label:"Template"},version:{label:"Version"}},console:{novnc:"Open in WebVNC",serial:"Open in Serial Console"},promptRemove:{title:"Select the volume you want to delete:",deleteAll:"Delete All",tips:"Warn: The snapshots of the virtual machine will be deleted with virtual machine and the snapshots of volume will be deleted with volume."},restartTip:"{restart, select,\n true {Restart}\n other {Start}\n} the virtual machine now to take effect of the configuration changes.",runStrategy:"Run Strategy",maintenanceStrategy:{label:"Maintenance Strategy",options:{Migrate:"Migrate",ShutdownAndRestartAfterEnable:"Shutdown and Restart After Enable",ShutdownAndRestartAfterDisable:"Shutdown and Restart After Disable",Shutdown:"Shutdown"}},cpuPinning:{label:"Enable CPU Pinning",tooltip:"Enable CPU Pinning brings better performance and reduce latency for the virtual machine",restartVMMessage:"Changing the CPU Pinning setting requires a virtual machine reboot for the change to take effect",migrationMessage:"This virtual machine can only be migrated to a target node that has CPU Manager enabled, as CPU Pinning is configured."},restartNow:"{restart, select,\n true {Restart}\n other {Start}\n} Now",createSSHKey:"Create a New...",genericLoginError:"Authentication failed. Please re-log in and try again.",installAgent:"Install guest agent",enableUsb:"Enable USB Tablet",advancedOptions:{tpm:"Enable TPM",tpmPersistentState:"TPM Persistent State",cpuManager:{prefix:"You must enable CPU Manager for at least one node in",middle:"host page",suffix:"to enable CPU Pinning for VM"},efiEnabled:"Booting in EFI mode",efiPersistentState:"EFI Persistent State",secureBoot:"Secure Boot"},usbTip:"Provides an absolute pointer device which often helps with getting a consistent mouse cursor position in VNC.",sshTitle:"Add Public SSH Key",imageTip:"An external URL to the .iso, .img, .qcow2 or .raw that the virtual machine should be created from.",volume:{dragTip:"Drag and drop volumes, or use the volume's arrows, to change the boot order.",volumeTip:"The virtual machine only contains a CD-ROM volume. You may want to add additional disk volumes.",macTip:"MAC address as seen inside the guest system.",staticIpTip:"Static IP that will be stored to annotation static-ip.harvesterhci.io/{nic_name}.",volumeUpdate:"Set volume { name } successfully",type:"Type",size:"Size",edit:"Edit",bus:"Bus",readyToUse:"Ready To Use",bootOrder:"Boot Order",volume:"Volume",dockerImage:"Docker Image",addVolume:"Add Volume",addExistingVolume:"Add Existing Volume",addVmImage:"Add a Virtual Machine Image",addContainer:"Add Container",setFirst:"Set as root volume",saveVolume:"Update Volume",encryption:"Encryption",vmImageVolumeTip:"Disk size ({diskSize}) should greater than selected image virtual size ({imageVirtualSize})",lockTooltip:{all:"All volumes are encrypted.",partial:"Some volumes are encrypted."},title:{vmImage:"Image Volume",existingVolume:"Existing Volume",volume:"Volume",container:"Container"},unmount:{title:"Are you sure?",message:"Are you sure you want to unmount this volume?"},emptyImage:"No media"},network:{title:"Network",addNetwork:"Add Network",addPort:"Add Port"},cloudConfig:{title:"Cloud Configuration",createTemplateTitle:"Create {name}",createNew:"Create new...",cloudInit:{label:"Cloud Init",placeholder:"Select a template"},user:{label:"User Data Template",title:"User Data:",tip:"You can specify user data to configure an instance or run a configuration script during launch. If you launch more than one instance at a time, the user data is available to all the instances in that reservation. Learn more"},network:{label:"Network Data Template",title:"Network Data:",tip:"The network-data configuration allows you to customize the instance's networking interfaces by assigning subnet configuration, virtual device creation (bonds, bridges, VLANs) routes and DNS configuration. Learn more"}},sysprep:{title:"Windows Sysprep Configuration",description:"Configure Windows automated installation using autounattend.xml. The configuration will be stored in a Kubernetes Secret and mounted as a CD-ROM during installation. Learn more",createNew:"Create new...",createNewTitle:"Create Windows Sysprep Template",xmlContent:"autounattend.xml content",secret:{label:"Windows Sysprep Template"},validation:{invalidXml:"Invalid XML syntax",invalidNamespace:"Invalid unattend.xml namespace. Expected 'urn:schemas-microsoft-com:unattend'"}},scheduling:{affinity:{anyNode:"Run virtual machine on any available node",schedulingRules:"Run virtual machine on node(s) matching scheduling rules",specificNode:"Run virtual machine on specific node - (Live migration is not supported)"},networkNotSupport:"Network not support schedule"},accessCredentials:{resetPwd:{label:"Add Basic Auth"},injectSSH:{label:"Add SSH Key",users:"Select Users",addUser:"Add User"},tips:"qemu-guest-agent must be installed to enable the accessing of credentials. The virtual machine needs to be restarted after credentials added. You need to be in the virtual machine to edit your password or remove an SSH-Key after deleting the credentials.",userTips:"The user to be added must already exist; otherwise, the credentials will not take effect.",duplicatedUser:"User already exists.",invalidUser:"Invalid Username."},input:{name:"Name",cpu:"CPU",maxCpu:"Maximum CPU",maxMemory:"Maximum Memory",memory:"Memory",image:"Image",sshKey:"SSHKey",sshKeyValue:"SSH-Key",MachineType:"Machine Type",username:"Username",password:"Password",reservedMemory:"Reserved Memory",customizeDisplayName:"Customize virtual machine display name",displayNamePlaceholder:"Virtual machine alias name",displayName:"Display Name"},filesystem:{description:"Harvester supports filesystem volumes for VM via virtiofs.",type:"Filesystem Type",volume:"Volume",resource:"Resource",add:"Add",mountBannerHint:"Please update the mount path (e.g. /mnt/appconfigfs) to your preferred location, then add the corresponding commands to the",mountBannerHintLink:"runcmd",mountBannerHintSuffix:"in Advanced tab User Data."},machineTypeTip:"Specify a processor architecture to emulate. To see a list of supported architectures, run: qemu-system-x86_64 -cpu ?",detail:{tabs:{overview:"Overview",details:"Details",environment:"Environment",events:"Events",migration:"Migration",console:"Console",networkInterfaces:"Network Interfaces",disks:"Disks",networks:"Networks",basics:"Basics",configurations:"Configurations",inventory:"Inventory",hostBasic:"Basic Attributes",instance:"Virtual Machines",monitor:"Monitor Data",keypairs:"SSH Keys",cloudConfig:"Cloud Configuration",metrics:"Virtual Machine Metrics"},details:{title:{vmDetails:"Virtual Machine Details",requirements:"Scheduling and resources requirements",services:"Services",users:"Logged in users"},name:"Name",totalSnapshotQuota:"Total Snapshot Quota",namespace:"Namespace",created:"Created",hostname:"Hostname",node:"Node",ipAddress:"IP Address",status:"Status",pod:"Pod",labels:"Labels",bootOrder:"Boot Order",annotations:"Annotations",CDROMs:"CD-ROMs",description:"Description",operatingSystem:"Operating System",template:"Template",kernelRelease:"Kernel Release",owner:"Owner",workloadProfile:"Workload Profile",nodeSelector:"Node Selector",flavor:"Flavor",tolerations:"Tolerations",dedicatedResources:"Dedicated Resources",down:"Virtual machine not running",affinityRules:"Affinity Rules",phase:"Phase",sourceNode:"Source Node",targetNode:"Target Node",started:"Started",ended:"Ended"},notAvailable:"Not available",GuestAgentNotInstalled:"Guest agent required",noOwner:"No Owner",events:{from:"Generated from",down:"No events in the past hour"},console:{down:"This virtual machine is down. Please start it to access its console.",shortcutKeys:"Shortcut Keys",customShortcutKeys:"Custom Shortcut Keys",management:"Management Shortcut Keys",record:{start:"Record",recording:"Recording",stop:"Stop Recording",tips:"Press the record button to capture your keyboard inputs.",send:"Send",preferredKeys:"Preferred Custom Shortcut Keys"}}},terminationGracePeriodSeconds:{label:"Termination Grace Period"},affinity:{addLabel:"Add Workload Selector",topologyKey:{placeholder:"topology.kubernetes.io/zone"},thisPodNamespace:"This virtual machine's namespace",matchExpressions:{inNamespaces:"Workloads in these namespaces"},namespaces:{label:"Namespaces"}},instanceLabels:{banner:"These labels are automatically synchronized to the virtual machine instance."},labels:{banner:"These key values are added as labels to the virtual machine."},annotations:{banner:"These key values are added as annotations to the virtual machine."}},volume:{label:"Volumes",tabs:{basics:"Basics",snapshots:"Snapshots",datasource:"Data Source",details:"Details",conditions:"Conditions"},size:"Size",volumeMode:"Volume Mode",accessModes:"Access Modes",createWithDataVolume:"Create with DataVolume",createWithDataVolumeTooltip:"Create Volume with Kubevirt/Containerized Data Importer way. It can fill accessMode/volumeMode automatically.",showAdvanced:"Show Advanced Options",hideAdvanced:"Hide Advanced Options",source:"Source",kind:"Kind",sourceOptions:{new:"New",vmImage:"Virtual Machine Image"},image:"Image",frontend:"Frontend",blockdev:"Block Device",attachedNode:"Attached Node",endpoint:"Endpoint",diskTags:"Disk Tags",nodeTags:"Node Tags",lastBackup:"Last Backup",lastBackupAt:"Last Backup At",replicasNumber:"Replicas Number",promptRemove:{tips:"Warn: The volume's snapshots will be deleted with this volume."},externalLink:{tips:"Check volume details"},rebuildingMessage:"Rebuilding: {percentage}%",longhorn:{disableResize:"Longhorn V2 volumes cannot be resized."}},image:{label:"Images",tabs:{basics:"Basics"},url:"URL",size:"Size",isEncryption:"Encryption",encryptionSecret:"Encryption Secret",virtualSize:"Virtual Size",urlTip:'Supports the raw and qcow2 image formats which are supported by qemu. Bootable ISO images can also be used and are treated like raw images.',fileName:"File Name",uploadFile:"Upload File",source:"Source Type",sourceType:{download:"URL",upload:"File",clone:"Clone",encrypt:"Encrypt",decrypt:"Decrypt"},sourceImage:"Source Image",cryptoOperation:"Crypto Operation",warning:{uploading:"{count, plural,\n=1 {1 image is uploading, please do not refresh or close the page.}\nother {{count} images are uploading, please do not refresh or close the page.}\n}",osUpgrade:{uploading:"{name} is uploading, please do not refresh or close the page."}},checksum:"Checksum",checksumTip:"Validate the image using the SHA512 checksum, if specified.",tooltip:{imported:"Created automatically by the vm-import-controller"},errors:{unsupportedBackend:"Unsupported backend type: {backend}"}},vmTemplate:{label:"Templates",tabs:{basics:"Basics"},nameNsDescription:{name:"Template Name"},tips:{notExistImage:{title:"Image {name} does not exist!",message:"Please select a new image."},notExistNode:{title:"Node {name} does not exist!",message:"Please select a new node."}}},upgradePage:{upgradeApp:"Upgrade Software",upgrade:"Upgrade",upgradeTip:"Please select the version you want to upgrade to",currentVersion:"CURRENT VERSION",versionLabel:"AVAILABLE COMPATIBLE VERSIONS",enableLogging:"Enable Logging",skipSingleReplicaDetachedVol:"Skip checking single-replica detached volumes",upgradeNode:"Upgrading Node",upgradeSysService:"Upgrading System Service",upgradeImage:"Download Upgrade Image",osUpgrade:"Cluster Upgrade",uploadNew:"Upload New Image",deleteHeader:"Please select an image to delete.",deleteExisting:"Delete Existing Image",selectExisting:"Select Existing Image",createRepository:"Creating Upgrade Repository",succeeded:"Succeeded",releaseTip:'Please read the upgrade documentation carefully. You can view details on the Harvester Release Notes.',checkReady:"I have read and understood the upgrade instructions related to this Harvester version.",pending:"Pending",upload:{duplicatedFile:"The file you are trying to upload already exists."},repoInfo:{upgradeStatus:"Upgrade Status",os:"OS",kubernetes:"Kubernetes",monitoringChart:"Monitoring Chart",harvesterChart:"Harvester Chart",success:"Success",fail:"Fail",ongoing:"On-going",downloadLog:"Download Log",logStatus:"Log Download Status"},dismissMessage:"Dismiss it",upgradeInfo:{warning:"WARNING",doc:'Read the documentation before starting the upgrade process. Ensure that you complete procedures that are relevant to your environment and the version you are upgrading to.',tip:"Unmet system requirements and incorrectly performed procedures may cause complete upgrade failure and other issues that require manual workarounds.",moreNotes:"For more details about the release notes, please visit -"}},schedule:{label:"Virtual Machine Schedules",createTitle:"Create Schedule",createButtonText:"Create Schedule",scheduleType:"Virtual Machine Schedule Type",cron:{label:"Cron Schedule",editButton:"Edit"},detail:{namespace:"Namespace",sourceVM:"Source Virtual Machine"},tabs:{basic:"Basic",backups:"Backups",snapshots:"Snapshots"},message:{noSetting:{suffix:"before creating a backup schedule"}},retain:{label:"Retain",count:"Count",tooltip:"Number of up-to-date VM backups to retain. Maximum to 250, minimum to 2."},maxFailure:{label:"Max Failure",count:"Count",tooltip:"Max number of consecutive failed backups that could be tolerated. If reach this threshold, Harvester controller will suspend the schedule job. This value should less than retain count"},virtualMachine:{title:"Virtual Machine Name",placeholder:"Select a virtual machine"},type:{snapshot:"Snapshot",backup:"Backup"}},backup:{label:"Virtual Machine Backups",createText:"Restore Backup",title:"Restore Virtual Machine",refreshInterval:{label:"Refresh Interval",tip:"The interval for the backup target to sync data to harvester cluster. Set to 0 to disable refresh mechanism."},backupTargetTip:"The endpoint used to access the backupstore. NFS and S3 are supported.",message:{noSetting:{prefix:"You must configure the backup target",middle:"setting",suffix:"before creating a new backup."},errorTip:{prefix:"Backup target value in",middle:"setting",suffix:"is invalid, error: "},viewSetting:{prefix:"Click",middle:"here",suffix:"to view the backup configuration."},testConnect:{actionLabel:"Test connection",waitingLabel:"Testing connection...",successLabel:"Connection tested",successMessage:"Harvester can successfully connect to the endpoint {endpoint}"}},restore:{backup:"Backup",deletePreviousVolumes:"Delete Previous Volumes",createNew:"Create new",replaceExisting:"Replace existing",virtualMachineName:"Virtual Machine Name",keepMacAddress:"Keep MAC Address",haltAfterRestore:"Keep powered off after restore"},matchTarget:"The current backup target does not match the existing one.",progress:{details:"Volume details",tooltip:{starting:"Backup initiating",progress:"Backup in progress",complete:"Backup completed"}}},restore:{progress:{details:"Volume details",tooltip:{starting:"Restore initiating",progress:"Restore in progress",complete:"Restore completed"}}},subnet:{cidrBlock:{tooltip:"The subnet range in CIDR notation. Note that the CIDR blocks of different Subnets' within the same VPC cannot overlap.",label:"CIDR Block",placeholder:"e.g. 172.20.0.0/16"},protocol:{label:"Protocol"},provider:{tooltip:"Network provider for this Subnet. Must be one of the Virtual Machine Networks in OverlayNetwork type.",label:"Provider"},vpc:{label:"Virtual Private Cloud"},gateway:{label:"Gateway IP",placeholder:"e.g. 172.20.0.1"},vlan:{label:"VLAN",placeholder:"Select a VLAN"},dhcp:{label:"Dynamic Host Configuration Protocol (DHCP)",v4Options:"DHCPV4Options",v6Options:"DHCPV6Options",placeholder:"key1=value1, key2=value2",dhcpOptionBanner:'DHCP options is a key/value string concatenate with comma. For more detail, please refer to KubOVN document',tooltip:"Enable DHCP server for this subnet. When enabled, VMs can automatically obtain IP addresses from this subnet."},externalConnectivity:{label:"NAT Outgoing",tooltip:"Enable NAT for VMs using this subnet to access external networks."},private:{label:"Private Subnet",tooltip:"Enable network isolation for this Subnet. When enabled, VMs can only communicate within this subnet, even if other subnets exist under the same VPC."},allowSubnet:{label:"Allow Subnets",tooltip:"You can specify certain subnets which can communicate with this subnet.",addSubnet:"Add Allow Subnet",placeholder:"e.g. 172.16.0.0/16"},excludeIPs:{tooltip:"The IP address list to reserve from automatic assignment. The gateway IP address is always excluded and will be automatically added to the list.",placeholder:"single IP or 192.168.0.100..192.168.0.200"},acl:{label:"Access Control List",tooltip:"The ACL to apply to this Subnet. Must be one of the ACLs in the same namespace.",action:{label:"Action",placeholder:"Please select an action"},direction:{label:"Direction",placeholder:"Please select a direction"},addRule:"Add Rule",priority:{label:"Priority",placeholder:"Please select a priority"},match:{label:"Match",placeholder:"e.g. ip4.dst == 10.10.0.2"},banner:'The supported field in ACL match can refer to KubeOvn Subnet ACL document'}},vpc:{viewTopology:"Topology",topology:{loading:"Loading topology...",empty:"No resources found",visibility:{vpc:"VPC",subnets:"Subnets",overlayNetworks:"Overlay Networks",vms:"VMs"},labels:{cidr:"CIDR",provider:"Provider",type:"Type",clusterNetwork:"Cluster Network",network:"Network",subnet:"Subnet",ip:"IP",mac:"MAC",peering:"Peering"}},noAddonEnabled:{prefix:"The kubeovn-operator add-on is not enabled, click",middle:"here",suffix:"to enable the add-on to successfully create VPC and subnet."},label:"Virtual Private Cloud",noChild:"There is no subnet defined in this Virtual Private Cloud.",createSubnet:"Create Subnet",staticRoutes:{label:"Static Routes",cidr:{label:"CIDR",placeholder:"e.g. 172.16.0.0/16"},nextHopIP:{tooltip:"The localConnectIP on the other end of the peering VPC.",label:"Next Hop IP",placeholder:"e.g. 169.254.0.2"}},vpcPeerings:{label:"VPC Peerings",localConnectIP:{tooltip:"The designated IP address in CIDR notation of the VPC peering endpoint. Note that both IP addresses (for the VPC and the other VPC) should belong to the same subnet range and should not conflict with the cidrBlock in any existing subnets.",label:"Local Connect IP",placeholder:"e.g. 169.254.0.1/16"},remoteVpc:{label:"Remote VPC"},infoBanner:'The static route destination CIDR must cover all subnets CIDR from remote VPC Peer. Read VPC Peering Configuration Examples for more information.'}},natGateway:{label:"Gateways",internalTenantNetwork:{label:"Internal Tenant Network",placeholder:"Select a Virtual Machine Network"},vpc:{label:"VPC",placeholder:"Select a VPC"},subnet:{label:"Subnet",placeholder:"Select a subnet"},lanIp:{label:"LAN IP",placeholder:"Enter LAN IP"},externalSubnets:{label:"External Subnets",addLabel:"Add",placeholder:"Select a subnet"}},externalIP:{label:"External IPs",natGateway:{label:"VpcNatGateway",placeholder:"Select a VpcNatGateway"},externalSubnet:{label:"External Subnet",placeholder:"Select an external subnet"},v4ip:{label:"V4 IP",placeholder:"public ip from external subnet"}},snat:{label:"Source Rules",eip:{label:"EIP",placeholder:"Select an external IP"},internalCIDR:{label:"Internal CIDR",placeholder:"internal subnet CIDR"}},dnat:{label:"Destination Rules",eip:{label:"EIP",placeholder:"Select an external IP"},externalPort:{label:"External Port",placeholder:"port number"},internalIp:{label:"Internal IP",placeholder:"internal IP address"},internalPort:{label:"Internal Port",placeholder:"port number"},protocol:{label:"Protocol",placeholder:"Select protocol (tcp or udp)"}},providerNetwork:{label:"Provider Networks",defaultInterface:{label:"Default Interface",placeholder:"Select the interface the same as master interface of external overlay network"},customInterfaces:{label:"Custom Interfaces",addLabel:"Add Custom Interface",interface:{label:"Network Interface",placeholder:"e.g. eth2"},nodes:{label:"Nodes",addLabel:"Add Node",placeholder:"Select a node"}},excludedNodes:{label:"Excluded Nodes",addLabel:"Add Excluded Node",placeholder:"Select node to exclude from this provider network"}},vlanNetwork:{label:"VLANs"},vlan:{id:{label:"VLAN ID",placeholder:"e.g. 1-4094"},provider:{label:"Provider Network",placeholder:"Select a provider network"}},networkPolicy:{label:"Policies",banner:'The network policies must be used for VMs attached to overlay networks. Please read the harvester document how the network policy works.'},network:{label:"Virtual Machine Networks",tabs:{basics:"Basics",layer3Network:"Route",nic:"Network Interface Card"},clusterNetwork:{label:"Cluster Network",create:"Create a new cluster network",toolTip:"Define your custom cluster scope network name",createPlaceholder:"Input a new cluster network name",selectOrCreatePlaceholder:"Select or create a new cluster network",selectPlaceholder:"Select a cluster network"},layer3Network:{mode:{label:"Mode",auto:"Auto (DHCP)",manual:"Manual"},serverIPAddr:{label:"DHCP Server IP"},gateway:{label:"Gateway",placeholder:"e.g. 172.16.0.1"},cidr:{label:"CIDR",placeholder:"e.g. 172.16.0.1/24"}}},sshKey:{label:"SSH Keys",keypair:"SSH Key",tabs:{basics:"Basics"}},setting:{label:"Settings",tabs:{advanced:"Advanced",ui:"UI"},validation:{physicalNIC:"DefaultPhysicalNIC"},placeholder:{accessKeyId:"Specify your access key ID",secretAccessKey:"Specify your secret access key",cert:"Upload a self-signed SSL certificate"},noSearchMatch:"No settings match your search.",vlanChangeTip:"The newly modified default network interface only applies to newly added nodes, not existing ones.",defaultPhysicalNIC:"Default Network Interface",modifiedMessage:"Settings that have been customized from default settings are tagged with 'Modified'.",percentTip:"The value in parentheses represents the distribution percentage of the network interface on all hosts. If an interface less than 100% is selected, the user needs to manually specify the network interface on the host where the vlan network configuration fails.",message:{ca:{prefix:"Click",middle:"here",suffix:"to add a custom certificate."}},sslCertificates:{publicCertificate:"Public Certificate",privateKey:"Private Key",ca:"CA"},rancherCluster:{kubeConfig:"Rancher KubeConfig",removeUpstreamClusterWhenNamespaceIsDeleted:"Remove Upstream Cluster When Namespace Is Deleted"},clusterPodSecurityStandard:{whitelistedNamespaces:{label:"Whitelisted Namespaces"},privilegedNamespaces:{label:"Privileged Namespaces"},restrictedNamespaces:{label:"Restricted Namespaces"}},storageNetwork:{range:{placeholder:"e.g. 172.16.0.0/24",label:"IP Range",invalid:'"Range" is invalid.'},clusterNetwork:"Cluster Network",vlan:"VLAN ID",exclusiveVlan:"Exclusive VLAN",exclude:{label:"Exclude IPs",placeholder:"CIDR format, e.g. 172.16.0.10/32",invalid:'"Exclude list" is invalid.',addIp:"Add Exclude IP"},warning:"WARNING: Any change to storage-network requires shutting down all virtual machines before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.",tip:'Specify an IP range in the IPv4 CIDR format. Number of IPs Required = Number of Nodes * 2 + Number of Disks * 2 + Number of Images to Download/Upload . For more information about storage network settings, see the documentation.'},rwxNetwork:{warning:"WARNING: Any change to rwx-network requires longhorn RWX volumes detached before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.",shareStorageNetwork:"Share Storage Network",dedicatedRwxNetwork:"Dedicated RWX Network",shareStorageNetworkWarning:"The rwx-network is governed by storage-network, and changes here won't take effect until share-storage-network is set to false."},vmForceDeletionPolicy:{period:"Period",vmMigrationTimeout:"VM Migration Timeout"},vmMigrationNetwork:{parseError:"Failed to parse existing configuration.",fetchError:"Failed to load required network resources: {error}. Please refresh the page or try again later.",clusterNetwork:"Cluster Network",vlan:"VLAN ID",range:{placeholder:"e.g. 172.16.0.0/24",label:"IP Range",invalid:'"Range" is invalid.'},exclude:{label:"Excluded IPs",placeholder:"e.g. 172.16.0.1/32",invalid:'"Exclude list" is invalid.',addButton:"Add Exclude IP"}},ratio:"Ratio",autoRotateRKE2Certs:{expiringInHours:"Expiring in"},httpProxy:{warning:'WARNING: If you configure "http-proxy" and "https-proxy", you must also put Harvester node's CIDR into "no-proxy", otherwise the Harvester cluster will be broken.'},supportBundleImage:{imagePullPolicy:"Pull Policy",repo:"Repository",tag:"Tag"},csiDriverConfig:{provisioner:"Provisioner",volumeSnapshotClassName:"Volume Snapshot Class Name",backupVolumeSnapshotClassName:"Backup Volume Snapshot Class Name"},csiOnlineExpandValidation:{provisioner:"Provisioner",value:"Value",invalidJsonFormat:"Configuration value is not a valid JSON format: {error}",failedToLoadDrivers:"Failed to load CSI drivers. Error: {error}"},containerdRegistry:{mirrors:{mirrors:"Mirrors",registryName:"Registry Name",endpoints:"Endpoints",rewrite:{rewrite:"Rewrite",addRewrite:"Add Rewrite"},addMirror:"Add Mirror"},configs:{configs:"Configurations",registryEDQNorIP:"Registry FDQN or IP",registryPlaceholder:"myregistry.local:5000",username:"Username",password:"Password",auth:"Auth",identityToken:"Identity Token",insecureSkipVerify:"InsecureSkipVerify",addConfig:"Add Configuration"}},upgrade:{unknownImageName:"Image name is not found.",imageUrl:"Please input a valid image URL.",chooseFile:"Please select to upload an image.",checksum:"Checksum",networkError:"Unable to upload the image. Resolve network issues that may have occurred and try again.",cancelUpload:"Cancelled the image upload.",uploadSuccess:"{name} uploaded successfully. Press Upgrade button to start the cluster upgrade process.",deleteImage:"Please select an image to delete.",deleteSuccess:"{name} deleted successfully.",imagePreloadStrategy:"Image Preload Strategy",nodeUpgradeOption:"Node Upgrade Option",restoreVM:"Restore VM",strategy:"Strategy",pauseNodes:"Pause Nodes",strategyType:"Strategy Type",concurrency:"Concurrency"},harvesterMonitoring:{label:"Harvester Monitoring",section:{prometheus:"Prometheus",prometheusNodeExporter:"Prometheus Node Exporter",grafana:"Grafana",alertmanager:"Alertmanager"},tips:{scrape:"Interval between consecutive scrapes",evaluation:"Interval between consecutive evaluations",retention:"How long to retain metrics",retentionSize:"Maximum size of metrics"}},clusterRegistrationUrl:{url:"URL",insecureSkipTLSVerify:"Insecure Skip TLS Verify",tip:{prefix:'Harvester secures cluster registration via TLS by default. If opt out "Insecure Skip TLS Verify", you must provide custom CA certificates using the',middle:"additional-ca",suffix:"setting."},message:"To completely unset the imported Harvester cluster, please also remove it on the Rancher Dashboard UI via the Virtualization Management page."},ntpServers:{isNotIPV4:"The address you entered is not IPv4 or host. Please enter a valid IPv4 address or a host address.",isDuplicate:"There are duplicate NTP server configurations."},instanceManagerResources:{parseError:"Failed to parse configuration: {error}",v1:"V1 Data Engine",v2:"V2 Data Engine"},kubevirtMigration:{parseError:"Failed to parse configuration: {error}",parallelMigrationsPerCluster:"Parallel Migrations Per Cluster",parallelOutboundMigrationsPerNode:"Parallel Outbound Migrations Per Node",bandwidthPerMigration:"Bandwidth Per Migration",bandwidthPerMigrationTooltip:"0 is KubeVirt default, representing unlimited bandwidth",completionTimeoutPerGiB:"Completion Timeout Per GiB",progressTimeout:"Progress Timeout",allowAutoConverge:"Allow Auto Converge",allowPostCopy:"Allow Post Copy",unsafeMigrationOverride:"Unsafe Migration Override",allowWorkloadDisruption:"Allow Workload Disruption",disableTLS:"Disable TLS",matchSELinuxLevelOnMigration:"Match SELinux Level On Migration"}},cloudTemplate:{label:"Cloud Configuration Templates",templateType:"Template Type",userData:"User Data",networkData:"Network Data"},support:{title:"Harvester Support",kubeconfig:{title:"Download KubeConfig",titleDescription:"Download kubeconfig for debugging."},internal:{rancher:{title:"Access Embedded Rancher UI",titleDescription:'You can only use the embedded Rancher UI for debugging and validation purposes. For more information about how Harvester integrates with Rancher, see the documentation.'},longhorn:{title:"Access Embedded Longhorn UI",titleDescription:"We only support to use the embedded Longhorn UI for debugging and validation purpose."}},community:{learnMore:"Find out more about SUSE Harvester support",pricing:"Contact us for pricing"}},namespace:{label:"Namespaces"},projectNamespace:{label:"Projects/Namespaces"},vip:{namespace:{label:"Namespace"},cidr:{label:"CIDR/IP Range",invalid:'"CIDR/IP Range" is invalid.',toolTip:"We can apply multiple pools or ranges by separating them with commas. For example: 192.168.0.200/30,192.168.0.200/29 or 192.168.0.10-192.168.0.11"},add:{label:"Add IP Pools"}},sslParameters:{protocols:{label:"Protocols"},ciphers:{label:"Ciphers"}},monitoring:{configuration:{label:"Configuration"},alertmanagerConfig:{label:"Alertmanager Configurations",diabledMonitoringTips:{prefix:"Enable the",middle:"monitoring",suffix:"add-on first."},diabledAlertingTips:{prefix:"Enable",middle:"Alertmanager",suffix:"for configuration to take effect."},disabledAddon:{prefix:"The monitoring add-on is disabled, click",middle:"here",suffix:"to enable it."}}},logging:{configuration:{section:{fluentbit:"Fluentbit",fluentd:"Fluentd"}},clusterFlow:{label:"Cluster Flows"},clusterOutput:{label:"Cluster Outputs"},flow:{label:"Flows"},output:{label:"Outputs"},diabledTips:{prefix:"Enable",middle:"logging",suffix:"for configuration to take effect."}},snapshot:{totalSnapshotSize:"Total Snapshot Size",label:"Volume Snapshots",targetVolume:"Original Volume",size:"Size",image:"Image"},vmSnapshot:{label:"Virtual Machine Snapshots",createText:"Restore Snapshot",title:"Restore Virtual Machine",snapshot:"Snapshot"},storage:{label:"Storage",useDefault:"Use the default storage",volumeEncryption:"Volume Encryption",secret:"Secret",volumeExpansionCheckbox:"Enable Expansion",migratable:{label:"Migratable"},numberOfReplicas:{label:"Number Of Replicas"},staleReplicaTimeout:{label:"Stale Replica Timeout"},nodeSelector:{label:"Host Selector"},diskSelector:{label:"Disk Selector"},storageClass:{label:"Storage Class",longhorn:{v1:{label:"Longhorn V1 (CSI)"},v2:{label:"Longhorn V2 (CSI)"},versionTooltip:"Longhorn V2 is disabled for this node."},lvm:{label:"LVM"}},title:"Storage Classes",customize:{volumeBindingMode:{later:"Bind and provision a persistent volume once a virtual machine using the PersistentVolumeClaim is created"}},parameters:{numberOfReplicas:{label:"Number Of Replicas"},staleReplicaTimeout:{label:"Stale Replica Timeout"},diskSelector:{label:"Disk Selector","no-options":"No available tags, please add in the `Host > Storage` page"},nodeSelector:{label:"Node Selector","no-options":"No available tags, please add in the `Host > Storage` page"},migratable:{label:"Migratable"},lvmVolumeGroupType:{label:"Volume Group Type"},lvmVolumeGroup:{label:"Volume Group Name","no-options":"No available Volume Groups, please add in the `Host > Storage` page"},node:{label:"Node"}},allowedTopologies:{title:"Allowed Topologies",tooltip:"Allowed Topologies helps scheduling virtual machines on hosts which match all of below expressions."},internal:{label:"Internal Storage Class",cannotDeleteTooltip:"Internal storage class volumes cannot be deleted",cannotDeleteOrDefaultTooltip:"Internal storage classes cannot be deleted or set as default"},cdiSettings:{label:"CDI Settings",volumeModeAccessModes:{label:"Volume Mode / Access Modes",tooltip:"Specifies the default volume mode and access modes.",add:"Add",volumeMode:"Volume Mode",accessModes:{label:"Access Modes"}},volumeSnapshotClass:{label:"Volume Snapshot Class",tooltip:"Sets the Volume Snapshot Class name to be used when taking snapshots of PVCs under this StorageClass."},cloneStrategy:{label:"Clone Strategy",tooltip:"Defines the clone strategy to use for volumes created with this StorageClass.",copy:"Copy",snapshot:"Snapshot",csiClone:"CSI Clone"},fileSystemOverhead:{label:"File System Overhead",tooltip:"Specifies the percentage of filesystem overhead to consider when calculating PVC size.",placeholder:"e.g. 0.05 (up to 3 decimal places, between 0 and 1)"}}},vlanConfig:{title:"Network Configuration",createNetworkConfig:"Create Network Configuration",action:{migrate:"Migrate"},titles:{nodeSelector:"Node Selector",uplink:"Uplink",bondOptions:"Bond Options",attributes:"Attributes",host:"Selected Hosts"},scheduling:{affinity:{allNodes:"Select all nodes",specificNode:"Select specific node",schedulingRules:"Select node(s) matching rules"}},uplink:{nics:{label:"NIC",addLabel:"Add NIC",overlayWarning:"The NIC selected here must match the NIC provided in the provider network.",placeholder:"Select a NIC that is available on all the selected nodes",validate:{available:'NIC "{nic}" is not available on the selected nodes'}},linkAttributes:{mtu:{label:"MTU"}},bondOptions:{mode:{label:"Mode"},miimon:{label:"Miimon",tooltip:"Miimon specifies the MII link monitoring frequency in milliseconds. -1 means to keep the original value."}}},nodeSelector:{matchingNodes:{matchesSome:'{matched, plural,\n =0 {Matches 0 of {total, number} Nodes.}\n =1 {Matches 1 of {total, number} Nodes: "{sample}"}\n other {Matches {matched, number} of {total, number} existing Nodes, including "{sample}"}\n}'}}},vlanStatus:{vlanConfig:{label:"Network Configuration",l2VlanMode:{access:"Access",trunk:"Trunk",label:"Mode"},vlanTrunk:{minId:"Minimum VLAN ID",maxId:"Maximum VLAN ID",add:"Add VLAN Trunk"}}},clusterNetwork:{title:"Cluster Network Configuration",create:{button:{label:"Create a Cluster Network"}},clusterNetwork:"There are no network configurations defined.",mgmt:"mgmt is a built-in cluster management network and does not support any additional network configurations.",notExist:'Cluster Network "{ clusterNetwork }" does not exist',notReady:'Cluster Network "{ clusterNetwork }" is not ready'},addons:{descriptions:{"harvester-system/vm-import-controller":"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.","harvester-system/pcidevices-controller":"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machine and guest clusters.","cattle-logging-system/rancher-logging":"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.","harvester-system/rancher-vcluster":"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.","cattle-monitoring-system/rancher-monitoring":"rancher-monitoring is an add-on that collects Harvester cluster and virtual machine metrics and allows you to view the metrics on an embedded dashboard and send alert(s) to remote servers.","vm-import-controller":"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.","pcidevices-controller":"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machines and guest clusters.","nvidia-driver-toolkit":"nvidia-driver-toolkit is an add-on to enable vGPU devices and assign them to Harvester virtual machines.","rancher-logging":"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.","rancher-monitoring":"rancher-monitoring is an add-on to collect Harvester cluster and virtual machine metrics, view them on the embedded dashboard, and send alert(s) to remote servers.","rancher-vcluster":"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.","harvester-seeder":"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.","harvester-system/harvester-seeder":"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.","harvester-csi-driver-lvm":"harvester-csi-driver-lvm is an add-on allowing users to create PVC through the LVM with local devices.",descheduler:"The virtual machine auto balance optimizes workload scheduling by evicting pods that are not optimally placed according to administrator-defined policies."},vmMigration:{generic:{unknown:"Unknown",identifier:"Identifier",podNetwork:"Pod Network",usedBy:"Used by:",vlan:"VLAN {id}",vCpu:"{count} vCPU",memoryGb:"{value} GB",memoryTb:"{value} TB",elapsed:{hoursAndMinutes:"{hours} {hours, plural, one {hour} other {hours}} and {minutes} {minutes, plural, one {minute} other {minutes}}",hours:"{hours} {hours, plural, one {hour} other {hours}}",minutes:"{minutes} {minutes, plural, one {minute} other {minutes}}"}},errors:{failedLoadPlans:"Failed to load migration plans",failedLoadVms:"Failed to load virtual machines",failedRefreshVms:"Failed to refresh virtual machines",failedLoadProviders:"Failed to load providers",failedLoadProvider:"Failed to load provider: {error}",failedResolveDetails:"Failed to resolve network and datastore details",failedDecodeCredentials:"Failed to decode provider credentials",connectionFailed:"Connection failed",providerNotReady:"Provider not ready"},labels:{dashboard:"Migration Overview",provider:"Providers",networkMap:"Network Maps",storageMap:"Storage Maps",plan:"Migration Plans",migration:"Migrations"},providerWizard:{title:"Create Provider",editTitle:"Edit Provider"},wizard:{title:"VM Migration",steps:{configureProvider:{label:"Provider",description:"Configure Provider"},selectVms:{label:"VMs",description:"Select VMs"},configureMappings:{label:"Mappings",description:"Define Mappings"},reviewMigration:{label:"Migration Plan",description:"Review Migration Plan"}}},fields:{username:"Username",password:"Password"},configureProvider:{title:"Configure Provider",description:"Connect to your VMware vCenter or ESXi host to discover virtual machines for migration",connectionDetails:"Connection Details",providerSelect:"Provider",createNew:"Create new provider",requirementsTitle:"Requirements",requirementsText:"To migrate virtual machines from VMware, you will need a vCenter Server running version 6.5 or higher with a user account that has at least read permissions, and the source environment must be network-accessible from Rancher.",name:"Name",urlLabel:"vCenter/ESXi URL",urlPlaceholder:"https://vcenter.example.com/sdk",urlHint:"Enter the full URL including https://",skipSsl:"Skip SSL certificate verification",skipSslHint:"Not recommended for production environments",testConnection:{action:"Test Connection",success:"Connection successful",error:"Connection failed",waiting:"Testing connection..."},testSuccess:"Connection test passed",testFailed:"Connection test failed",testMissingFields:"Please fill in all required fields before testing",testTimeout:"Connection test timed out — the provider did not report a status in time",save:"Save Provider and Continue",saveExisting:"Check Provider and Continue"},selectVms:{title:"Select Virtual Machines",description:"Select the virtual machines you want to migrate from the source provider",discovered:"{count} VMs discovered from",lastSynced:"Last synced {time} ago • ",refreshNow:"Refresh now",availableVms:"Available Virtual Machines",selected:"selected",saveSelection:"Save Selection and Continue",selectAllBanner:{pageOnly:"Your current selection includes only VMs currently shown on the page.",selectAll:"Select all {count} VMs from this provider",allSelected:"Your current selection includes all VMs.",clearSelection:"Clear Selection"},manualEntry:{title:"Add Virtual Machines",description:"No VMs were discovered from the provider inventory. Add VMs manually by entering their IDs and names.",vmId:"VM ID",vmIdPlaceholder:"e.g. vm-60527",add:"Add",added:"VMs added"},columns:{vmName:"VM Name",vmId:"VM ID",os:"Operating System",resources:"Resources",powerState:"Power State",network:"Network",datastore:"Datastore"}},dashboard:{title:"Virtual Machine Migration Overview",description:"Migrate virtual machines from VMware vSphere to Harvester using cold migration for data consistency. Create a migration plan to select VMs, map networks and storage, and prepare a migration to Harvester.",createPlan:"Create Migration",tableTitle:"Migrations",columns:{status:"Status",plan:"Migration Plan",progress:"Progress",mappings:"Mappings"},progress:{failed:"Failed",migration:"Migration",initializingMigration:"Initializing migration",finishedSuccessfully:"Finished Successfully",step:"Step {index}",vmCount:"{count} VMs",vmId:"id: {id}"}},configureMappings:{title:"Set Mappings",description:"Map VMware networks and datastores to Harvester and Longhorn target resources",save:"Save Mappings and Continue",noTemplate:"Start from scratch",removeMap:"Remove Map",networkMapping:{title:"Network Mapping",description:"Map VMware port groups to Harvester networks",placeholder:"Choose a Harvester network",template:"Use existing network mapping as template",options:{podNetworking:"Management Network",ignored:"Ignored"}},storageMapping:{title:"Storage Mapping",description:"Map VMware datastores to Harvester storage classes",placeholder:"Choose a Longhorn Storage Volume",template:"Use existing storage mapping as template"}},reviewMigration:{title:"Review Migration Plan",description:"Confirm your migration settings before starting the transfer of VMs to the target cluster.",planName:"Name",planNamePlaceholder:"e.g. my-migration-plan",migrationDetails:"Migration Details",totalVms:"Total VMs",vcpu:"vCPU",memory:"Memory",storage:"Storage",source:"Source",targetNamespace:"Target Namespace",migrationMode:"Migration Mode",coldMigration:"Cold Migration",virtualMachines:"Virtual Machines",warningTitle:"Cold Migration Warning",warningMessage:"All source VMs will be powered off, and downtime will occur during migration. Plan your maintenance window accordingly and notify relevant stakeholders",startMigration:"Start Migration Plan"},plan:{states:{error:"Error",canceled:"Canceled",inProgress:"In Progress",active:"Succeeded"},actions:{start:"Start",restart:"Restart",stop:"Stop"}}},vmImport:{titles:{basic:"Basic",auth:"Authentication",pvc:"Volume",networking:"Network Mapping",advanced:"Advanced"},labels:{vmimport:"Virtual Machine Import",vmimportSourceVMWare:"Source VMWare",vmimportSourceOpenStack:"Source OpenStack",vmimportSourceOVA:"Source OVA"},fields:{sourceProvider:"Source Provider Type",sourceCluster:"Source Cluster",vmName:"VM Name",targetStorageClass:"Target Storage Class",sourceNetwork:"Source Network Name",destNetwork:"Destination Network",interfaceModel:"Interface Model",folder:"Folder",diskBus:"Default Disk Bus",defaultInterface:"Default Network Interface",skipPreflight:"Skip Preflight Checks",forcePowerOff:"Force Power Off Source VM",username:"Username",password:"Password",caCert:"CA Certificate (PEM)",selectSecret:"Select Secret",createSecret:"Create New Credentials",useSecret:"Use Existing Secret",none:"None (Public URL)"},placeholders:{selectCluster:"Select a cluster...",selectProviderFirst:"Select a provider type first",matchSource:"Must match the name in the source cluster",folderExample:"e.g. /Datacenters/DC1/vm",caCert:"-----BEGIN CERTIFICATE----- ..."},options:{useDefault:"Use Default"},actions:{addNetwork:"Add Network Mapping",remove:"Remove"},errors:{rfc1123:'Invalid format. Name must be lowercase, alphanumeric, and cannot contain spaces (e.g. "my-vm-1"). If your Source VM name does not match this, you must rename it on the Source cluster first.',networkMappingRequired:"Every Network Mapping row must have a Source and Destination selected."},openstack:{fields:{endpoint:"Identity Service Endpoint",region:"Region",projectName:"Project Name",domainName:"Domain Name",retryCount:"Upload Image Retry Count",retryDelay:"Upload Image Retry Delay"},placeholders:{endpoint:"e.g. https://devstack/identity",region:"e.g. RegionOne",projectName:"e.g. admin",domainName:"e.g. default",retryCount:"Default: 30",retryDelay:"Default: 10"}},vmware:{fields:{endpoint:"vCenter Endpoint",datacenter:"Datacenter"},placeholders:{endpoint:"e.g. https://vscim/sdk",datacenter:"e.g. DC0"},tooltips:{datacenter:"The exact name of the Datacenter object in vCenter"}},ova:{fields:{url:"URL",httpTimeout:"HTTP Timeout"},placeholders:{url:"e.g. https://download.example.com/images/my-vm.ova",httpTimeout:"Default: 600"}}},rancherVcluster:{accessRancher:"Access the Rancher Dashboard",hostname:"Hostname",rancherVersion:"Rancher Version",password:"Bootstrap Password"},switchFailed:"{action} {name} failed!",nvidiaDriverToolkit:{titles:{basic:"Controller",image:"Image",driver:"Driver"},image:{tag:"Image Tag",repository:"Image Repository"},driver:{location:"Driver Location"},enable:{title:"Enable NVIDIA Driver Toolkit"},parsingSpecError:"The field 'spec.valuesContent' has invalid format."},usbController:{titles:{basic:"Basic"}}},loadBalancer:{label:"Load Balancers",tabs:{basic:"Basic",listeners:"Listeners",healthCheck:"Health Check",backendServer:"Backend Server Selector"},workloadType:{label:"Workload Type",options:{cluster:"Guest Kubernetes Cluster",vm:"Virtual Machine"}},ipam:{label:"IPAM",options:{dhcp:"DHCP",pool:"Pool"}},ipPool:{label:"IP Pool",options:{none:"Auto (Select IP Pool automatically)"}},listeners:{name:{label:"Name"},protocol:{label:"Protocol"},port:{label:"Port"},backendPort:{label:"Backend Port",placeholder:"e.g. 80"}},backendServerSelector:{matchingVMs:{matchesSome:'{matched, plural,\n =0 {Matches 0 of {total, number} virtual machines in the namespace where the load balancer is.}\n =1 {Matches 1 of {total, number} virtual machines in the namespace where the load balancer is: "{sample}"}\n other {Matches {matched, number} of {total, number} existing virtual machines in the namespace where the load balancer is, including "{sample}"}\n}'}},backendServers:{label:"Backend Servers"},healthCheck:{warning:{portInUse:"Warning, the Backend Port {port} is in use in Health Check settings. If you need to update the port, update the Health Check settings accordingly."}}},ipPool:{label:"IP Pools",network:{label:"Virtual Machine Network"},tabs:{range:"Range",scope:"Scope",selector:"Selector"},subnet:{label:"Subnet"},startIP:{label:"Start IP"},endIP:{label:"End IP"},gateway:{label:"Gateway"},namespace:{label:"Namespace"},project:{label:"Project"},guestCluster:{label:"Guest Kubernetes Cluster"},availableIP:{label:"Available IP Count"},scope:{label:"Scope",addLabel:"Add Scope"},priority:{label:"Priority"},cidr:{addLabel:"Add CIDR"},range:{addLabel:"Add Range"}},hostNetworkConfig:{label:"Host Networks",mode:{label:"Mode"},tabs:{mode:"Mode",nodeSelector:"Node Selector"},nodeSelector:{addButton:"Add Node Selector"},underlay:{label:"Underlay",tooltip:"Allow this interface to act as the underlay for VM overlay networks.",conflict:"`{name}` host network config already has underlay enabled. Only one underlay is allowed in the cluster.",noKubeovn:{prefix:"The kubeovn-operator add-on is not enabled. Click",middle:"here",suffix:"to enable the add-on for overlay networking."}},vlanID:{label:"VLAN ID"},ipRange:{label:"IP Range ({node})",placeholder:"e.g. 192.168.1.10/24"},ips:{nodeLabel:"Node",label:"IP",placeholder:"e.g. 192.168.1.10/24"}},service:{healthCheckPort:{label:"Health Check Port"},healthCheckSuccessThreshold:{label:"Health Check Success Threshold",description:"If the number of times the probe continuously detects an address successfully reaches the success threshold, then the backend server can start to forward traffic."},healthCheckFailureThreshold:{label:"Health Check Failure Threshold",description:"The backend server will stop forwarding traffic if the number of health check failures reaches the failure threshold."},healthCheckPeriod:{label:"Health Check Period"},healthCheckTimeout:{label:"Health Check Timeout"},healthCheckEnabled:{label:"Health Check"}},secret:{label:"Secrets"},sriov:{label:"SR-IOV Network Devices",nodeName:"Node",numVFs:"Number Of Virtual Functions",vfAddresses:"Virtual Functions Addresses",showMore:"Show More",parentSriov:"Filter By Parent SR-IOV Netork Device",parentSriovGPU:"Filter By Parent SR-IOV GPU Device"},sriovgpu:{label:"SR-IOV GPU Devices",nodeName:"Node",numVFs:"Number of Virtual Functions",vfAddresses:"Virtual Functions Addresses",vGpuDevices:"vGPU Devices",showMore:"Show More",parentSriov:"Filter By Parent SR-IOV GPU",noPermission:"Please contact your system administrator to add Harvester add-ons first.",goSetting:{prefix:"The nvidia-driver-toolkit add-on is not enabled, click",middle:"here",suffix:"to enable it to manage your SR-IOV GPU devices."}},migconfiguration:{label:"vGPU MIG Configurations",status:{outOfSync:"Out of Sync"},infoBanner:"To configure the MIG configuration, please disable it first and re-enable after editing the configuration.",profileSpec:"Profile Specs",profileStatus:"Profile Status",tableHeaders:{profileName:"Profile Name",total:"Total",vGPUID:"vGPU ID",available:"Available",requested:"Requested"},requested:"Requested",available:"Available",total:"Total",vGPUID:"vGPU ID",goSriovGPU:{prefix:"Please enable the supported GPU devices in",middle:"SR-IOV GPU Devices",suffix:"page to manage the vGPU MIG configurations."}},vgpu:{label:"vGPU Devices",noPermission:"Please contact system administrator to add Harvester add-ons first.",detachWarning:{title:"Cannot Disable vGPU",message:"Please detach the device from the VM and save it first before disabling this vGPU device."},goSetting:{prefix:"The nvidia-driver-toolkit add-on is not enabled, click",middle:"here",suffix:"to enable it to manage your vGPU devices."},enableGroup:"Enable Group",disableGroup:"Disable Group",enable:{title:"Select vGPU",type:"Type"},available:"Available Devices",compatibleNodes:"Compatible Nodes",impossibleSelection:"There are no hosts with all of the selected devices.",howToUseDevice:"Use the table below to enable vGPU devices you want to use in this virtual machine.",deviceInTheSameHost:"You can only select devices on the same host."},usb:{label:"USB Devices",noPermission:"Please contact system admin to add Harvester add-ons first",goSetting:{prefix:"The pcidevices-controller add-on is not enabled, click",middle:"here",suffix:"to enable it to manage your USB devices."},enableGroup:"Enable Group",disableGroup:"Disable Group",available:"Available USB Devices",compatibleNodes:"Compatible Nodes",impossibleSelection:"There are no hosts with all of the selected devices.",howToUseDevice:"Use the table below to enable USB passthrough on each device you want to use in this VM.",deviceInTheSameHost:"You can only select devices on the same host.",showCompatibility:"Show device compatibility matrix",hideCompatibility:"Hide device compatibility matrix",claimError:"Error enabling passthrough on {name}",unclaimError:"Error disabling passthrough on {name}",cantUnclaim:"You cannot disable passthrough on a device claimed by another user.",detachWarning:{title:"Cannot Disable Passthrough",message:"Please detach the device from the VM and save it first before disabling passthrough."},enablePassthroughWarning:"Please re-enable the USB device if the device path changes in the following situations:  1) Re-plugging the USB device.  2) Rebooting the node.
An incorrect device path may cause passthrough to fail.",classType:"Class Type"},harvesterVlanConfigMigrateDialog:{targetClusterNetwork:{label:"Target Cluster Network",placeholder:"Choose Target Cluster Network"}},seeder:{banner:{enable:{prefix:'The "harvester-seeder" add-on is disabled.',middle:"Click here",suffix:"to enable it."},noAccess:"Please contact your system administrator to enable the Out-of-Band Access first.",noAddon:'The "harvester-seeder" add-on does not exist, please check if it is installed.',noInventory:'Waiting for "inventories.metal.harvesterhci.io" to be ready.'},inventory:{host:{label:"Host",placeholder:"e.g. 172.16.1.1"},port:{label:"Port",placeholder:"e.g. 623"},insecureTLS:{label:"Insecure TLS"},secret:{label:"Secret",create:{title:"Add Secret"}},event:{label:"Event"},pollingInterval:{label:"Polling Interval"}}}},typeDescription:{harvester:"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos and color scheme."},advancedSettings:{experimental:"Experimental features allow users to test and evaluate early-access functionality prior to official supported releases",descriptions:{"harv-vlan":"Default Network Interface name of the VLAN network.","harv-backup-target":"Custom backup target to store virtual machine backups.",branding:"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos, and color scheme.","harv-csi-driver-config":"Configure additional information for CSI drivers.","harv-csi-online-expand-validation":"Allow online volume expansion for specific CSI drivers.","harv-containerd-registry":"Containerd Registry Configuration to connect private registries.","harv-log-level":"Configure Harvester server log level. Defaults to Info.","harv-server-version":"Harvester server version.","harv-upgrade-checker-enabled":"Specifies whether to enable Harvester upgrade check or not. Default is True.","harv-upgrade-checker-url":"Default Harvester upgrade check url. Only used when the upgrade-checker-enabled is equal to True.","harv-ui-source":"Configure how to load the UI source. The `External` option is used to load the UI from a ui-index URL, while the `Bundled` option loads the UI from the local Harvester server.","harv-ui-index":"HTML index location for the UI.","harv-cluster-registration-url":"Registration URL for multi-cluster management.","harv-http-proxy":"HTTP proxy for Harvester to access external services.","harv-additional-ca":"Custom CA root certificates for TLS validation.","harv-overcommit-config":"Resource overcommit configuration.","harv-support-bundle-timeout":"Support bundle timeout configuration in minutes, use 0 to disable the timeout.","harv-support-bundle-file-name":"Support bundle file name configuration.","harv-support-bundle-expiration":"Support bundle expiration configuration in minutes.","harv-support-bundle-node-collection-timeout":"Support bundle node collection timeout configuration in minutes.","harv-vm-force-reset-policy":"Configuration for the force-reset action when a virtual machine is stuck on a node that is down.","harv-ssl-parameters":"Custom SSL Parameters for TLS validation.","harv-storage-network":"Longhorn storage-network setting.","harv-rwx-network":"Configure RWX network behavior for shared or dedicated storage network usage.","harv-support-bundle-namespaces":"Select additional namespaces to include in the support bundle.","harv-auto-disk-provision-paths":"Specify the disks(using glob pattern) that Harvester will automatically add as virtual machine storage.","harv-support-bundle-image":'Support bundle image configuration. Find different versions in rancher/support-bundle-kit.',"harv-release-download-url":"This setting allows you to configure the upgrade release download URL address. Harvester will get the ISO URL and checksum value from the ($URL/$VERSION/version.yaml) file hosted by the configured URL.","harv-default-vm-termination-grace-period-seconds":"Configure the virtual machine termination grace period for virtual machine stop.","harv-ntp-servers":"Configure NTP server. You can configure multiple IPv4 addresses or host addresses.","harv-auto-rotate-rke2-certs":"The certificate rotation mechanism relies on Rancher. Harvester will automatically update certificates generation to trigger rotation.","harv-kubeconfig-default-token-ttl-minutes":"TTL (in minutes) applied on Harvester administration kubeconfig files. Default is 0, which means to never expire.","harv-longhorn-v2-data-engine-enabled":'Enable the Longhorn V2 data engine. Default is false.
Changing this setting will restart RKE2 on all nodes. This will not affect running VM workloads.
If you see "not enough hugepages-2Mi capacity" errors when enabling this setting, wait a minute for the error to clear. If the error remains, reboot the affected node.
',"harv-longhorn-v2-data-engine-hugepage-enabled":"Enable hugepages when using the Longhorn V2 data engine. Default is true. Disabling hugepages reduces memory pressure on low-spec nodes and increases deployment flexibility. However, performance may be lower compared to running with hugepages.","harv-longhorn-v2-data-engine-memory-size":"Configure the amount of memory allocated to the SPDK target daemon when using the Longhorn V2 data engine. Default is 2048 MiB.","harv-additional-guest-memory-overhead-ratio":"The ratio for kubevirt to adjust the VM overhead memory. The value could be zero, empty value or floating number between 1.0 and 10.0, default to 1.5.","harv-upgrade-config":'Configure image preloading and VM restore options for upgrades. See related fields in settings/upgrade-config',"harv-vm-migration-network":"Segregated network for VM migration traffic.","harv-rancher-cluster":"Configure Rancher cluster integration settings for guest cluster management.","harv-max-hotplug-ratio":"The ratio for kubevirt to limit the maximum CPU and memory that can be hotplugged to a VM. The value could be an integer between 1 and 20, default to 4.","harv-kubevirt-migration":"Configure cluster-wide KubeVirt live migration parameters.","harv-instance-manager-resources":"Configure resource percentage reservations for Longhorn instance manager V1 and V2. Valid instance manager CPU range between 0 - 40.","harv-cluster-pod-security-standard":"Enforce Kubernetes Pod Security Standards (PSS) at the cluster level."}},typeLabel:{"kubevirt.io.virtualmachine":"{count, plural,\n one { Virtual Machine }\n other { Virtual Machines }\n}","harvesterhci.io.virtualmachineimage":"{count, plural,\n one { Image }\n other { Images }\n}","harvesterhci.io.keypair":"{count, plural,\n one { SSH Key }\n other { SSH Keys }\n}","harvesterhci.io.host":"{count, plural,\n one { Host }\n other { Hosts }\n}","harvesterhci.io.networkattachmentdefinition":"{count, plural,\n one { Virtual Machine Network }\n other { Virtual Machine Networks }\n}","harvesterhci.io.volume":"{count, plural,\n one { Volume }\n other { Volumes }\n}","harvesterhci.io.user":"{count, plural,\n one { User }\n other { Users }\n}","harvesterhci.io.setting":"{count, plural,\n one { Setting }\n other { Settings }\n}","harvesterhci.io.virtualmachinetemplateversion":"{count, plural,\n one { Template }\n other { Templates }\n}","harvesterhci.io.schedulevmbackup":"{count, plural,\n one { Virtual Machine Schedule }\n other { Virtual Machine Schedules }\n}","harvesterhci.io.virtualmachinebackup":"{count, plural,\n one { Virtual Machine Backup }\n other { Virtual Machine Backups }\n}","kubeovn.io.vpc":"{count, plural,\n one { Virtual Private Cloud }\n other { Virtual Private Clouds }\n}","kubeovn.io.vlan":"{count, plural,\n one { VLAN Network }\n other { VLAN Networks }\n}","kubeovn.io.providernetwork":"{count, plural,\n one { Provider Network }\n other { Provider Networks }\n}","kubeovn.io.vpcnatgateway":"{count, plural,\n one { NAT Gateway }\n other { NAT Gateways }\n}","kubeovn.io.iptablessnatrule":"{count, plural,\n one { Source Rule }\n other { Source Rules }\n}","kubeovn.io.iptablesdnatrule":"{count, plural,\n one { Destination Rule }\n other { Destination Rules }\n}","kubeovn.io.iptableseip":"{count, plural,\n one { External IP }\n other { External IPs }\n}","networking.k8s.io.networkpolicy":"{count, plural,\n one { Network Policy }\n other { Network Policies }\n}","harvesterhci.io.cloudtemplate":"{count, plural,\n one { Cloud Configuration Template }\n other { Cloud Configuration Templates }\n}","harvesterhci.io.volumesnapshot":"{count, plural,\n one { Volume Snapshot }\n other { Volume Snapshots }\n}","harvesterhci.io.vmsnapshot":"{count, plural,\n one { Virtual Machine Snapshot }\n other { Virtual Machine Snapshots }\n}","network.harvesterhci.io.vlanconfig":"{count, plural,\n one { Network Configuration }\n other { Network Configurations }\n}","harvesterhci.io.monitoring.alertmanagerconfig":"{count, plural,\n one { Alertmanager Configuration }\n other { Alertmanager Configurations }\n}","harvesterhci.io.logging.clusterflow":"{count, plural,\n one { Cluster Flow }\n other { Cluster Flows }\n}","harvesterhci.io.logging.clusteroutput":"{count, plural,\n one { Cluster Output }\n other { Cluster Outputs }\n}","harvesterhci.io.logging.flow":"{count, plural,\n one { Flow }\n other { Flows }\n}","harvesterhci.io.logging.output":"{count, plural,\n one { Output }\n other { Outputs }\n}","harvesterhci.io.storage":"{count, plural,\n one { Storage Class }\n other { Storage Classes }\n}","devices.harvesterhci.io.pcidevice":"{count, plural,\n one { PCI Device }\n other { PCI Devices }\n}","network.harvesterhci.io.clusternetwork":"{count, plural,\n one { Cluster Network }\n other { Cluster Networks }\n}","network.harvesterhci.io.hostnetworkconfig":"{count, plural,\n one { Host Network }\n other { Host Networks }\n}","harvesterhci.io.addon":"{count, plural,\n one { Add-on }\n other { Add-ons }\n}","devices.harvesterhci.io.sriovnetworkdevice":"{count, plural,\n one { SR-IOV Network Device }\n other { SR-IOV Network Devices }\n}","devices.harvesterhci.io.sriovgpudevice":"{count, plural,\n one { SR-IOV GPU Device }\n other { SR-IOV GPU Devices }\n}","devices.harvesterhci.io.vgpudevice":"{count, plural,\n one { vGPU Device }\n other { vGPU Devices }\n}","devices.harvesterhci.io.migconfiguration":"{count, plural,\n one { vGPU MIG Configuration }\n other { vGPU MIG Configurations }\n}","harvesterhci.io.secret":"{count, plural,\n one { Secret }\n other { Secrets }\n}","harvesterhci.io.blockdevice":"{count, plural,\n one { Disk }\n other { Disks }\n}","loadbalancer.harvesterhci.io.loadbalancer":"{count, plural,\n one { Load Balancer }\n other { Load Balancers }\n}","loadbalancer.harvesterhci.io.ippool":"{count, plural,\n one { IP Pool }\n other { IP Pools }\n}","migration.harvesterhci.io.openstacksource":"{count, plural,\n one { OpenStack Source }\n other { OpenStack Sources }\n}","migration.harvesterhci.io.vmwaresource":"{count, plural,\n one { VMware Source }\n other { VMware Sources }\n}","migration.harvesterhci.io.ovasource":"{count, plural,\n one { OVA Source }\n other { OVA Sources }\n}","migration.harvesterhci.io.virtualmachineimport":"{count, plural,\n one { Virtual Machine Import }\n other { Virtual Machine Imports }\n}","forklift.konveyor.io.provider":"{count, plural,\n one { Provider }\n other { Providers }\n}","forklift.konveyor.io.networkmap":"{count, plural,\n one { Network Map }\n other { Network Maps }\n}","forklift.konveyor.io.storagemap":"{count, plural,\n one { Storage Map }\n other { Storage Maps }\n}","forklift.konveyor.io.plan":"{count, plural,\n one { Migration Plan }\n other { Migration Plans }\n}","forklift.konveyor.io.migration":"{count, plural,\n one { Migration }\n other { Migrations }\n}"}}];e.exports=t.length<=1?t[0]:t}}]);
//# sourceMappingURL=harvester-1.9.0-rc1.umd.min.37.js.map
\ No newline at end of file
diff --git a/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js.map b/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js.map
index 05efd563..56bf32d9 100644
--- a/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js.map
+++ b/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.37.js.map
@@ -1 +1 @@
-{"version":3,"file":"harvester-1.9.0-rc1.umd.min.37.js","mappings":"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","sources":["webpack://harvester-1.9.0-rc1/./l10n/en-us.yaml"],"sourcesContent":["const doc = [({\"wizard\":({\"create\":\"Create\", \"next\":\"Proceed\", \"previous\":\"Back\"}), \"generic\":({\"tip\":\"Tip\", \"resourceExternalLinkTips\":\"External Link\", \"namespace\":\"Namespace\", \"notReady\":\"Not Ready\", \"labels\":\"Labels\", \"inProgress\":\"In Progress\", \"basic\":\"Basic\", \"loading\":\"Loading...\", \"none\":\"None\", \"duration\":({\"infinite\":\"Infinite\", \"1s\":\"1 second\", \"5s\":\"5 seconds\", \"10s\":\"10 seconds\", \"30s\":\"30 seconds\", \"1m\":\"1 minute\", \"3m\":\"3 minutes\", \"5m\":\"5 minutes\"})}), \"unsupported\":({\"serverVersion\":\"Current version: {serverVersion}\", \"description\":\"Harvester ui only supports Harvester cluster version greater or equal to 1.3.0.\", \"learnMore\":\"Learn more about Harvester from the Harvester Web Site or read the Harvester Docs\"}), \"nav\":({\"group\":({\"networks\":\"Networks\", \"backupAndSnapshot\":\"Backup and Snapshots\", \"Monitoring\":\"Monitoring\", \"Logging\":\"Logging\", \"Monitoring and Logging\":\"Monitoring and Logging\", \"vmimport\":\"Virtual Machine Imports\", \"vmMigration\":\"Virtual Machine Migration\", \"Configurations\":\"Configurations\"})}), \"resourceTable\":({\"groupBy\":({\"device\":\"Group by Device\"})}), \"validation\":({\"arrayCountRequired\":\"At least {count} {key} {count, plural, =1 {is} other {are}} required, and {key} can not be empty.\"}), \"members\":({\"clusterMemebership\":\"Cluster Membership\", \"projectMembership\":\"Project Membership\"}), \"asyncButton\":({\"createAndStart\":({\"action\":\"Create and Start\"}), \"restart\":({\"action\":\"Save and Restart\", \"success\":\"Restarted\", \"waiting\":\"Restarting…\"})}), \"dialog\":({\"confirmExecution\":({\"title\":\"Are you sure?\", \"andOthers\":\"{count, plural,\\n=0 {}\\n=1 { and one other }\\nother { and {count} other }\\n}\", \"protip\":\"Tip: Hold the {alternateLabel} key while clicking action to bypass this confirmation\", \"stop\":({\"message\":\"Are you sure you want to stop the {type} {names}?\"}), \"pause\":({\"message\":\"Are you sure you want to pause the {type} {names}?\"}), \"restart\":({\"message\":\"Are you sure you want to restart the {type} {names}?\"}), \"softreboot\":({\"message\":\"Are you sure you want to soft reboot the {type} {names}?\"})}), \"promptRemove\":({\"title\":\"Delete {type}\", \"warningMessage\":\"Deleting the selected {type} permanently removes all resources on {thisOrThese} {type}. This action is irreversible. Do you want to continue?\", \"confirmName\":\"Type {nameToMatch} to delete the {type}:\", \"protip\":\"Tip: Hold the {alternateLabel} key while clicking Delete to bypass the confirmation step.\"})}), \"harvester\":({\"branding\":({\"logos\":({\"tip\":\"Upload a logo to replace the Harvester logo in the top-level navigation header. Image height should be 21 pixels with a max width of 200 pixels. Max file size is 20KB. Accepted formats: JPEG, PNG, SVG.\"}), \"favicon\":({\"tip\":\"Upload an icon to replace the Harvester favicon in the browser tab. Max file size is 20KB\"})}), \"productLabel\":\"Harvester\", \"modal\":({\"backup\":({\"success\":\"Backup { backUpName } has been initiated.\", \"addBackup\":\"Add Backup\", \"fileSystemFreezeDeadline\":({\"label\":\"File System Freeze Deadline\"})}), \"quota\":({\"editVMQuota\":\"Edit VM Quota\", \"editQuota\":\"Edit Quota\", \"bannerMessage\":\"Set to empty string or 0 to remove total snapshot size quota.\"}), \"restore\":({\"success\":\"Restore { name } created successfully.\", \"title\":\"Backup and Restore\", \"selectBackup\":\"Select Backup\", \"message\":({\"backup\":\"Please select the backup that needs to be restored.\"})}), \"createTemplate\":({\"title\":\"Generate Template\", \"name\":\"Name\", \"description\":\"Description\", \"message\":({\"tip\":\"Please enter a template name!\", \"success\":\"Template { templateName } created successfully.\", \"failed\":\"Failed generated template!\"})}), \"schedule\":({\"title\":\"Create Schedule\", \"message\":({\"tip\":\"Please enter a schedule name!\", \"success\":\"Schedule { name } created successfully.\", \"failed\":\"Failed create schedule!\"})}), \"cloneVM\":({\"title\":\"Clone Virtual Machine\", \"name\":\"New Virtual Machine Name\", \"type\":\"Clone volume data\", \"action\":({\"create\":\"Create\", \"clone\":\"Clone\"}), \"message\":({\"tip\":\"Please enter a virtual machine name!\", \"success\":\"Virtual machine { name } cloned successfully.\", \"failed\":\"Failed clone virtual machine!\"})}), \"osImage\":({\"title\":\"Delete Image\", \"message\":\"Are you sure you want to delete the image { name } ?\"}), \"downloadImage\":({\"title\":\"Download Image\", \"banner\":\"This action takes a while depending on the image size ({ size }). Please be patient.\", \"startMessage\":\"The download process will auto start once the conversion is complete.\", \"download\":\"Download\"}), \"exportImage\":({\"title\":\"Export to Image\", \"name\":\"Name\", \"namespace\":\"Namespace\", \"message\":({\"success\":\"Image { name } created successfully.\"})}), \"storageMigration\":({\"title\":\"Storage Migration\", \"fields\":({\"sourceVolume\":({\"label\":\"Source Volume\", \"placeholder\":\"Select a source volume\"}), \"targetVolume\":({\"label\":\"Target Volume\", \"placeholder\":\"Select a target volume\"})})}), \"dataMigration\":({\"title\":\"Data Migration\", \"fields\":({\"targetVolumeName\":({\"label\":\"Target Volume Name\", \"placeholder\":\"Enter a target volume name\"}), \"targetStorageClassName\":({\"label\":\"Target Storage Class\", \"placeholder\":\"Select a storage class\"})})}), \"migration\":({\"failedMessage\":\"Latest migration failed!\", \"title\":\"Migration\", \"vmMigrationTitle\":\"{count, plural, one {Migrating # VM} other {Migrating # VMs}}\", \"selectedVMs\":\"The following virtual machine(s) will be migrated to the target node\", \"unknownNode\":\"(unknown node)\", \"alreadyOnTarget\":\"Already on Target\", \"fields\":({\"nodeName\":({\"label\":\"Target Node\", \"placeholder\":\"Choose Target Node\"})})}), \"ejectCDROM\":({\"title\":\"Eject CD-ROM\", \"warnTip\":\"Eject volume will restart the virtual machine.\", \"operationTip\":\"Select the volume you want to delete:\", \"delete\":\"Delete\"}), \"bundle\":({\"title\":\"Generate a Support Bundle\", \"titleDescription\":\"Collect system-related logs in Harvester to assist with troubleshooting and support.\", \"tip\":\"Each field below specifies an aspect of the support bundle. For detailed explanations, please refer to the documentation.\", \"url\":\"Issue URL\", \"description\":\"Description\", \"namespaces\":({\"label\":\"Namespaces\", \"tooltip\":\"Select additional namespaces to include in the support bundle. See docs support-bundle-namespaces for detail.\", \"selectAll\":\"Select All\", \"unselectAll\":\"Unselect All\"}), \"timeout\":({\"label\":\"Timeout\", \"tooltip\":\"Minutes allows for completion of the support bundle generation process. See docs support-bundle-timeout for detail.\"}), \"expiration\":({\"label\":\"Expiration\", \"tooltip\":\"Minutes before deleting packaged but not downloaded support bundle. See docs support-bundle-expiration for detail.\"}), \"nodeTimeout\":({\"label\":\"Node Collection Timeout\", \"tooltip\":\"Minutes allowed for collecting logs/configurations on nodes. See docs support-bundle-node-collection-timeout for detail.\"})}), \"hotplugVolume\":({\"success\":\"Volume { diskName } is mounted to the virtual machine { vm }.\", \"title\":\"Add Volume\"}), \"hotplugNic\":({\"success\":\"The settings have been saved, but the network interface {interfaceName} will be attached only after the virtual machine is migrated.\", \"title\":\"Add Network Interface\", \"vmNetwork\":\"Virtual Machine Network\", \"macAddress\":\"MAC Address\", \"macAddressTooltip\":\"If left blank, the MAC address will be automatically generated.\"}), \"insertCdRomVolume\":({\"success\":\"{ imageName } is inserted into device { deviceName }.\", \"title\":\"Insert Image\", \"image\":\"Image\", \"actionLabel\":\"Insert Image\"}), \"cpuMemoryHotplug\":({\"success\":\"CPU and Memory are updated to the virtual machine { vm }.\", \"title\":\"Edit CPU and Memory\", \"maxResourcesMessage\":\"You can increase the CPU to maximum { maxCpu }C and memory to maximum { maxMemory }.\"}), \"snapshot\":({\"title\":\"Take Snapshot\", \"name\":\"Name\", \"message\":({\"success\":\"Take Snapshot { name } successfully.\"})}), \"volumeClone\":({\"title\":\"Clone Volume\", \"name\":\"Name\", \"message\":({\"success\":\"New Volume { name } cloned successfully.\"})}), \"restoreSnapshot\":({\"title\":\"Restore Snapshot\", \"name\":\"New Volume Name\", \"success\":\"New Volume { name } restored successfully.\"}), \"vmSnapshot\":({\"title\":\"Take Virtual Machine Snapshot\", \"name\":\"Name\", \"success\":\"Take virtual machine Snapshot { name } successfully.\", \"fileSystemFreezeDeadline\":({\"label\":\"File System Freeze Deadline\"})}), \"restart\":({\"title\":\"Restart Virtual Machine\", \"tip\":\"Restart the virtual machine for configuration changes to take effect.\", \"cancel\":\"Save\"})}), \"notification\":({\"title\":({\"succeed\":\"Succeed\", \"info\":\"Info\", \"warning\":\"Warning\", \"error\":\"Error\"}), \"restartRequired\":({\"title\":\"{count} {count, plural, =1 {Virtual Machine is} other {Virtual Machines are}} Pending Restart\", \"message\":\"Please restart { vmNames } to apply updated configurations\"})}), \"action\":({\"createVM\":\"Create Virtual Machine\", \"start\":\"Start\", \"restart\":\"Restart\", \"softreboot\":\"Soft Reboot\", \"stop\":\"Stop\", \"pause\":\"Pause\", \"deepClone\":\"Clone\", \"shallowClone\":\"Clone Template\", \"unpause\":\"Unpause\", \"encryptImage\":\"Encrypt Image\", \"decryptImage\":\"Decrypt Image\", \"ejectCDROM\":\"Eject CD-ROM\", \"editVMQuota\":\"Edit Virtual Machine Quota\", \"launchFormTemplate\":\"Launch instance from template\", \"modifyTemplate\":\"Modify template (Create new version)\", \"setDefaultVersion\":\"Set default version\", \"addTemplateVersion\":\"Add template version\", \"backup\":\"Take Backup\", \"createSchedule\":\"Create Schedule\", \"restore\":\"Restore\", \"restoreNewVM\":\"Restore New\", \"resumeSchedule\":\"Resume\", \"suspendSchedule\":\"Suspend\", \"restoreExistingVM\":\"Replace Existing\", \"migrate\":\"Migrate\", \"vmMigrate\":\"Virtual Machine Migration\", \"cpuAndMemoryHotplug\":\"Edit CPU and Memory\", \"abortMigration\":\"Abort Migration\", \"storageMigration\":\"Storage Migration\", \"cancelStorageMigration\":\"Cancel Storage Migration\", \"dataMigration\":\"Data Migration\", \"createTemplate\":\"Generate Template\", \"enableMaintenance\":\"Enable Maintenance Mode\", \"disableMaintenance\":\"Disable Maintenance Mode\", \"enableCPUManager\":\"Enable CPU Manager\", \"disableCPUManager\":\"Disable CPU Manager\", \"cordon\":\"Cordon\", \"uncordon\":\"Uncordon\", \"addHotplugVolume\":\"Add Volume\", \"addHotplugNic\":\"Hotplug Network Interface\", \"exportImage\":\"Export Image\", \"viewlogs\":\"View Logs\", \"cancelExpand\":\"Cancel Expand\", \"snapshot\":\"Take Snapshot\", \"pvcClone\":\"Clone Volume\", \"vmSnapshot\":\"Take Virtual Machine Snapshot\", \"shutdown\":\"Shut Down\", \"powerOn\":\"Power On\", \"reboot\":\"Reboot\", \"reconnect\":\"Reconnect\", \"forceStop\":\"Force Stop\"}), \"formatters\":({\"hardwareResourceGauge\":({\"allocated\":\"Allocated\", \"consumption\":\"{useful} of {total} {units} {suffix}\", \"cores\":\"CPU\", \"pods\":\"Pods\", \"ram\":\"Memory\", \"used\":\"Used\", \"reserved\":\"Reserved\", \"units\":({\"cores\":\"{count, plural,\\n=1 {core}\\nother {cores}}\"})}), \"harvesterIpAddress\":({\"customIpTooltip\":\"Custom IP (set via annotation)\"})}), \"tableHeaders\":({\"hostNetworkConfig\":({\"underlay\":\"Underlay\", \"underlayTooltip\":\"Allow this interface to act as the underlay for VM overlay networks.\", \"vlanID\":\"VLAN ID\", \"mode\":\"Mode\", \"clusterNetwork\":\"Cluster Network\"}), \"imageEncryption\":\"Encryption\", \"size\":\"Size\", \"virtualSize\":\"Virtual Size\", \"progress\":\"Progress\", \"message\":\"Message\", \"phase\":\"Phase\", \"attachedVM\":\"Attached Virtual Machine\", \"cpuManager\":\"CPU Manager\", \"routeConnectivityTooltip\":\"Connectivity between the VM network and the management network, which the Harvester nodes are connected to.\", \"fingerprint\":\"Fingerprint\", \"value\":\"Value\", \"actions\":\"Actions\", \"readyToUse\":\"Ready To Use\", \"backupTarget\":\"Backup Target\", \"targetVm\":\"Target Virtual Machine\", \"cronExpression\":\"Cron Expression\", \"retain\":\"Retain\", \"scheduleType\":\"Type\", \"configuredProfiles\":\"Configured Profiles\", \"maxFailure\":\"Max Failure\", \"sourceVm\":\"Source Virtual Machine\", \"vmSchedule\":\"Virtual Machine Schedule\", \"hostIp\":\"Host IP\", \"vm\":({\"ipAddress\":\"IP Address\", \"node\":\"Node\", \"defaultVersion\":\"Default Version\"}), \"network\":({\"type\":\"Type\", \"vlan\":\"VLAN ID\"}), \"snapshotTargetVolume\":\"Original Volume\", \"volumeSnapshotCounts\":\"Snapshot Counts\", \"networkState\":\"Network State\", \"totalSnapshotQuota\":\"Total Snapshot Quota\", \"storageClass\":\"Storage Class\", \"restore\":\"Restore\", \"vmImportSourceVm\":\"Source VM\", \"vmImportSourceCluster\":\"Source Cluster\", \"vmImportStatus\":\"Import Status\", \"vmImportSourceVDatacenter\":\"Datacenter\", \"vmImportSourceVEndpoint\":\"Endpoint\", \"vmImportSourceVClusterStatus\":\"Cluster Status\", \"vmImportSourceORegion\":\"Region\", \"vmImportSourceOEndpoint\":\"Endpoint\", \"vmImportSourceOClusterStatus\":\"Cluster Status\", \"vmImportSourceOVAUrl\":\"URL\", \"vmImportSourceOVAStatus\":\"Status\", \"v4ip\":\"V4 IP\", \"v6ip\":\"V6 IP\", \"eipName\":\"EIP Name\", \"vmMigrationProviderType\":\"Type\", \"vmMigrationProviderUrl\":\"URL\", \"vmMigrationMapSourceProvider\":\"Source Provider\", \"vmMigrationMapDestProvider\":\"Destination Provider\", \"vmMigrationPlanTargetNs\":\"Target Namespace\", \"vmMigrationPlanVmCount\":\"VM Count\", \"vmMigrationMigrationPlan\":\"Plan\"}), \"tab\":({\"volume\":\"Volumes\", \"network\":\"Networks\", \"advanced\":\"Advanced Options\", \"accessCredentials\":\"Access Credentials\", \"pciDevices\":\"PCI Devices\", \"vGpuDevices\":\"vGPU Devices\", \"usbDevices\":\"USB Devices\", \"vmScheduling\":\"Virtual Machine Scheduling\", \"quotas\":\"Quotas\", \"snapshots\":\"Snapshots\", \"instanceLabel\":\"Instance Labels\", \"annotations\":\"Annotations\", \"filesystem\":\"Filesystem Volume\"}), \"fields\":({\"version\":\"Version\", \"name\":\"Name\", \"type\":\"Type\", \"image\":\"Image\", \"size\":\"Size\", \"volume\":\"Volume\", \"network\":\"Network\", \"model\":\"Model\", \"macAddress\":\"MAC address\", \"staticIp\":\"Static IP\", \"port\":\"Port\", \"protocol\":\"Protocol\", \"remove\":\"Remove\", \"PhysicalNic\":\"Physical NIC\", \"cpu\":\"CPU\", \"memory\":\"Memory\", \"virtualName\":\"Virtual machine name\", \"promiscuous\":\"Promiscuous\", \"ipv4Address\":\"IPv4 address\", \"filterLabels\":\"Filter labels\", \"filterSchedule\":\"Filter schedule\", \"storageClass\":\"Storage class\", \"dockerImage\":\"Docker image\"}), \"pci\":({\"available\":\"Available Devices\", \"compatibleNodes\":\"Compatible Nodes\", \"impossibleSelection\":\"There are no hosts with all of the selected devices.\", \"howToUseDeviceInVMCreation\":({\"prefix\":\"Use the table below to enable PCI passthrough on each device you want to use in this virtual machine. For vGPU devices, please enable them on the\", \"middle\":\"vGPU Devices\", \"suffix\":\"page first.\"}), \"howToUseDevice\":({\"prefix\":\"Select the device in the table to enable PCI passthrough. For vGPU devices, please enable them on the\", \"middle\":\"vGPU Devices\", \"suffix\":\"page.\"}), \"deviceInTheSameHost\":\"You can only select devices on the same host.\", \"showCompatibility\":\"Show device compatibility matrix\", \"hideCompatibility\":\"Hide device compatibility matrix\", \"claimError\":\"Error enabling passthrough on {name}\", \"unclaimError\":\"Error disabling passthrough on {name}\", \"cantUnclaim\":\"You cannot disable passthrough on a device claimed by another user.\", \"detachWarning\":({\"title\":\"Cannot Disable Passthrough\", \"message\":\"Please detach the device from the VM and save it first before disabling passthrough.\"}), \"enableGroup\":\"Enable Group\", \"disableGroup\":\"Disable Group\", \"labelRequired\":\"This rule should not be manually altered: it ensures that the PCI devices selected for this virtual machine are available on the virtual machine's host.\", \"goSetting\":({\"prefix\":\"The pcidevices-controller add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable the add-on to successfully manage your PCI devices.\"}), \"noPCIPermission\":\"Please contact your system administrator to enable the PCI devices first.\", \"enablePassthroughWarning\":\"Please be careful not to use host-owned PCI devices (e.g., management and VLAN NICs). Incorrect device allocation may cause damage to your cluster, including node failure.\", \"disableResourcePooling\":\"Disable Resource Pooling\", \"disableResourcePoolingDescription\":\"Assigns this device a unique resource name so it can be pinned to a specific VM, instead of sharing the pool with other identical devices.\"}), \"devices\":({\"matrixHostName\":\"Host Name\", \"matrixDeviceClaimName\":\"Device Claim Name\"}), \"generic\":({\"close\":\"Close\", \"open\":\"Open\", \"showMore\":\"Show More\", \"hideMore\":\"Hide More\", \"memory\":\"Memory\", \"cpu\":\"CPU\", \"storage\":\"Storage\", \"noFileChosen\":\"No file chosen\", \"noSchema\":\"Can not find the custom resource definition: {schema}.\"}), \"validation\":({\"custom\":({\"tooLongName\":\"\\\"Name\\\" cannot be more than {max} characters.\"}), \"generic\":({\"hasDelete\":\"{type} \\\"{name}\\\" has been deleted.\", \"maxLength\":\"\\\"{key}\\\" cannot be more than {max} characters\", \"tabError\":\"{prefix}: {message}\", \"maximumSize\":\"Exceed maximum size {max}!\", \"regex\":\"Invalid {lowerType} \\\"{name}\\\": {upperType} must match the regex \\\"{regex}\\\"\"}), \"vm\":({\"name\":\"name is required!\", \"memory\":\"\\\"Memory\\\" is required!\", \"duplicatedName\":\"duplicate {type} name: \\\"{name}\\\"\", \"network\":({\"macFormat\":\"Invalid MAC address format.\", \"upperType\":\"Network name\", \"lowerType\":\"network name\"}), \"volume\":({\"upperType\":\"Volume name\", \"lowerType\":\"volume name\", \"needAtLeastOneBootable\":\"At least one bootable volume is required!\"})}), \"image\":({\"ruleTip\":\"The URL you have entered ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw.\", \"ruleFileTip\":\"The file you have chosen ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw.\"}), \"hash\":({\"sha512\":\"Invalid SHA512 checksum.\"}), \"subnet\":({\"excludeIps\":\"Exclude IPs cannot be empty. Please remove or fill in the exclude IPs.\", \"aclEmptyError\":\"The fields in subnet access control list rule can not be empty.\"})}), \"dashboard\":({\"label\":\"Dashboard\", \"header\":\"Harvester Cluster: {cluster}\", \"hardwareResourceGauge\":({\"cpu\":\"CPU\", \"memory\":\"Memory\", \"storage\":\"Storage\", \"allocated\":\"Allocated\"}), \"sections\":({\"events\":({\"label\":\"Events\"}), \"vmMetrics\":({\"label\":\"Virtual Machine Metrics\"})}), \"version\":\"Version\"}), \"host\":({\"console\":\"Console\", \"label\":\"Hosts\", \"inconsistentIP\":\"Host IP is inconsistent, current IP: { currentIP }, initial IP: { initIP }\", \"noConsoleUrl\":\"Console URL not specified\", \"promote\":({\"none\":\" \", \"running\":\"Promoting\", \"failed\":\"Promote failed\", \"unknown\":\"Promote halted\", \"promoteRestart\":\"Restarting\", \"promoteSucceed\":\"Promote completed\"}), \"tabs\":({\"network\":\"Network\", \"overview\":\"Overview\", \"basics\":\"Basics\", \"instance\":\"Virtual Machines\", \"monitor\":\"Monitor Data\", \"storage\":\"Storage\", \"labels\":\"Labels\", \"ksmtuned\":\"Ksmtuned\", \"hugepages\":\"Hugepages\", \"seeder\":\"Out-of-band Access\"}), \"detail\":({\"kvm\":({\"disableMessage\":\"Hardware-based virtualization is disabled or not supported. Hardware-based virtualization must be enabled before creating any virtual machines.\"}), \"title\":({\"network\":\"Network Configuration\"}), \"hostIP\":\"Host IP\", \"role\":\"Role\", \"os\":\"Operating System\", \"create\":\"Creation Time\", \"update\":\"Last Update Time\", \"customName\":\"Custom Name\", \"consoleUrl\":\"Console URL\", \"more\":\"More Information\", \"uuid\":\"UUID\", \"containerRuntime\":\"Container Runtime\", \"kernel\":\"Kernel\", \"management\":\"Management Node\", \"compute\":\"Compute Node\", \"storage\":\"Storage\", \"nic\":\"Physical NIC\", \"notRecommended\":\"Not recommended\", \"networkType\":\"Type\", \"manufacturer\":\"Manufacturer\", \"serialNumber\":\"Serial Number\", \"model\":\"Model\", \"etcd\":\"Witness Node\", \"cpuManager\":\"CPU Manager\"}), \"enableMaintenance\":({\"title\":\"Enable Maintenance Mode\", \"protip\":\"The operation will migrate all virtual machines on this node to other nodes.\", \"shutDownVMs\":\"Check Force option to shutdown virtual machines which cannot be migrated in live mode.\", \"force\":\"Force\"}), \"cordon\":({\"title\":\"Cordon\", \"protip\":\"This operation will mark the node { node } as unschedulable.\"}), \"ksmtuned\":({\"run\":\"Run Strategy\", \"configure\":\"Configure\", \"mode\":\"Mode\", \"modeLink\":\"Mode \", \"thresCoef\":\"Threshold Coefficient\", \"enableMergeNodes\":\"Enable merging across nodes\", \"enable\":\"Enable\", \"disable\":\"Disable\", \"ksmStatus\":\"KSM Status\", \"modeOption\":({\"standard\":\"Standard\", \"high\":\"High-performance\", \"customized\":\"Customized\"}), \"parameters\":({\"title\":\"Ksmtuned Parameters\", \"boost\":\"Boost\", \"decay\":\"Decay\", \"sleepMsec\":\"Sleep Time (Millisecond)\", \"minPages\":\"Minimum Pages\", \"maxPages\":\"Maximum Pages\", \"description\":({\"boost\":\"The number of scanned pages is incremented each time if the available memory is less than the threshold coefficient.\", \"decay\":\"The number of scanned pages is decremented each time if the available memory is greater than the threshold coefficient.\", \"sleepMsec\":\"The interval between two scans (the minimum value is 10ms), which is calculated by the formula (Sleep Milliseconds * 16 * 1024 * 1024/Total Memory).\", \"minPages\":\"The minimum number of pages per scan, also the configuration for the first run.\", \"maxPages\":\"Maximum number of pages per scan.\"})}), \"statistics\":({\"title\":\"Statistics \", \"sharing\":\"Sharing\", \"shared\":\"Shared\", \"unshared\":\"Unshared\", \"volatile\":\"Volatile\", \"fullScans\":\"Full Scans\", \"stableNodeChains\":\"Stable Node Chains\", \"stableNodeDups\":\"Stable Node Dups\"})}), \"hugepages\":({\"meminfo\":\"Meminfo\", \"transparent\":({\"title\":\"Transparent Hugepages \", \"enabled\":\"Enabled\", \"shmemEnabled\":\"Shared Memory Enabled\", \"defrag\":\"Defragmentation\"}), \"status\":({\"anon\":\"Anonymous Hugepages (bytes)\", \"size\":\"Default Hugepage Size (bytes)\", \"total\":\"Total Hugepages\", \"free\":\"Free Hugepages\", \"rsvd\":\"Reserved Hugepages\", \"surp\":\"Surplus Hugepages\"})}), \"disk\":({\"add\":\"Add Disk\", \"path\":({\"label\":\"Path\"}), \"storageReserved\":({\"label\":\"Storage Reserved\"}), \"allowScheduling\":({\"label\":\"Scheduling\", \"tooltip\":\"Disk {name} ({path}) scheduling is disabled\"}), \"evictionRequested\":({\"label\":\"Eviction Requested\"}), \"forceFormatted\":({\"label\":\"Force Formatted\", \"toolTip\":\"Force formatted will clean up disk data, make sure you backup all available data to prevent data loss.\", \"yes\":\"Yes (Ext4 File System)\"}), \"description\":({\"label\":\"Description\"}), \"lastFormattedAt\":({\"info\":\"The disk has already been force-formatted.\"}), \"notification\":({\"success\":\"Update host \\\"{name}\\\" storage configurations successfully.\"}), \"error\":\"Host has unready or unschedulable disks.\", \"mounted\":\"Already Mounted\", \"fileSystem\":({\"info\":\"Current file system is {system}, You can format it manually.\", \"formatting\":\"Disk is formatting, please wait.\"}), \"tags\":({\"label\":\"Disk Tags\", \"addLabel\":\"Add Disk Tag\"}), \"conditions\":\"Conditions\", \"storageAvailable\":({\"label\":\"Storage Available\"}), \"storageScheduled\":({\"label\":\"Storage Scheduled\"}), \"storageMaximum\":({\"label\":\"Storage Maximum\"}), \"provisioner\":\"Provisioner\", \"lvmVolumeGroup\":({\"label\":\"Volume Group\", \"create\":\"Create New...\"}), \"storage\":({\"longhorn\":({\"LonghornV1\":({\"label\":\"Longhorn V1 (CSI)\"}), \"LonghornV2\":({\"label\":\"Longhorn V2 (CSI)\"})}), \"lvm\":({\"label\":\"LVM\"})})}), \"tags\":({\"label\":\"Host Tags\", \"addLabel\":\"Add Host Tag\"}), \"powerAction\":({\"message\":({\"success\":\"Perform host { name } { operation } successfully.\"})}), \"ntp\":({\"label\":\"NTP Server Addresses\", \"tips\":\"You can configure multiple IPv4 addresses or host addresses.\", \"placeholder\":\"e.g. IPv4\", \"ntpSyncStatus\":({\"isDisabled\":\"NTP is disabled. Please check the NTP service is active.\", \"isUnsynced\":\"NTP is not synchronized with the NTP server {current}.\"})})}), \"virtualMachine\":({\"label\":\"Virtual Machines\", \"osType\":\"OS Type\", \"cpuModel\":({\"label\":\"CPU Model\", \"fetchError\":\"Failed to load CPU model configuration: {error}\", \"optionLabel\":\"{modelName} ({count} {count, plural, one {node} other {nodes}})\"}), \"hotplug\":({\"title\":\"Enable CPU and memory hotplug\", \"tooltip\":\"The default maximum CPU and maximum memory are {hotPlugTimes} times based on CPU and memory.\", \"restartVMMessage\":\"Restart action is required for the virtual machine configuration change to take effect\"}), \"hotUnplug\":({\"actionLabel\":\"Detach\", \"detachVolume\":({\"title\":\"Are you sure that you want to detach volume {name}?\", \"actionLabel\":\"Detach Volume\", \"success\":\"Volume { name } is detached successfully.\"}), \"ejectCdRomVolume\":({\"title\":\"Are you sure that you want to eject image from device {name}?\", \"actionLabel\":\"Eject Image\", \"success\":\"Image from device { name } is ejected successfully.\"}), \"detachNIC\":({\"title\":\"Are you sure that you want to detach network interface {name}?\", \"actionLabel\":\"Detach Network Interface\", \"success\":\"The settings have been saved, but the network interface {name} will be detached only after the virtual machine is migrated.\"})}), \"instance\":({\"singleInstance\":null, \"multipleInstance\":null, \"single\":({\"label\":\"Single Instance\", \"nameLabel\":\"Name\", \"host\":({\"label\":\"Hostname\", \"placeholder\":\"Default to the virtual machine name.\"})}), \"multiple\":({\"label\":\"Multiple Instance\", \"nameNsDescription\":\"Name prefix for each instance\", \"count\":\"Count\", \"countTip\":\"Count should be between 1 and 10\", \"nameLabel\":\"Name Prefix\", \"host\":({\"label\":\"Host Prefix Name\", \"placeholder\":\"Default to the virtual machine name.\"})})}), \"useTemplate\":({\"label\":\"Use the virtual machine template:\", \"template\":({\"label\":\"Template\"}), \"version\":({\"label\":\"Version\"})}), \"console\":({\"novnc\":\"Open in WebVNC\", \"serial\":\"Open in Serial Console\"}), \"promptRemove\":({\"title\":\"Select the volume you want to delete:\", \"deleteAll\":\"Delete All\", \"tips\":\"Warn: The snapshots of the virtual machine will be deleted with virtual machine and the snapshots of volume will be deleted with volume.\"}), \"restartTip\":\"{restart, select,\\n true {Restart}\\n other {Start}\\n} the virtual machine now to take effect of the configuration changes.\", \"runStrategy\":\"Run Strategy\", \"maintenanceStrategy\":({\"label\":\"Maintenance Strategy\", \"options\":({\"Migrate\":\"Migrate\", \"ShutdownAndRestartAfterEnable\":\"Shutdown and Restart After Enable\", \"ShutdownAndRestartAfterDisable\":\"Shutdown and Restart After Disable\", \"Shutdown\":\"Shutdown\"})}), \"cpuPinning\":({\"label\":\"Enable CPU Pinning\", \"tooltip\":\"Enable CPU Pinning brings better performance and reduce latency for the virtual machine\", \"restartVMMessage\":\"Changing the CPU Pinning setting requires a virtual machine reboot for the change to take effect\", \"migrationMessage\":\"This virtual machine can only be migrated to a target node that has CPU Manager enabled, as CPU Pinning is configured.\"}), \"restartNow\":\"{restart, select,\\n true {Restart}\\n other {Start}\\n} Now\", \"createSSHKey\":\"Create a New...\", \"genericLoginError\":\"Authentication failed. Please re-log in and try again.\", \"installAgent\":\"Install guest agent\", \"enableUsb\":\"Enable USB Tablet\", \"advancedOptions\":({\"tpm\":\"Enable TPM\", \"tpmPersistentState\":\"TPM Persistent State\", \"cpuManager\":({\"prefix\":\"You must enable CPU Manager for at least one node in\", \"middle\":\"host page\", \"suffix\":\"to enable CPU Pinning for VM\"}), \"efiEnabled\":\"Booting in EFI mode\", \"efiPersistentState\":\"EFI Persistent State\", \"secureBoot\":\"Secure Boot\"}), \"usbTip\":\"Provides an absolute pointer device which often helps with getting a consistent mouse cursor position in VNC.\", \"sshTitle\":\"Add Public SSH Key\", \"imageTip\":\"An external URL to the .iso, .img, .qcow2 or .raw that the virtual machine should be created from.\", \"volume\":({\"dragTip\":\"Drag and drop volumes, or use the volume's arrows, to change the boot order.\", \"volumeTip\":\"The virtual machine only contains a CD-ROM volume. You may want to add additional disk volumes.\", \"macTip\":\"MAC address as seen inside the guest system.\", \"staticIpTip\":\"Static IP that will be stored to annotation static-ip.harvesterhci.io/{nic_name}.\", \"volumeUpdate\":\"Set volume { name } successfully\", \"type\":\"Type\", \"size\":\"Size\", \"edit\":\"Edit\", \"bus\":\"Bus\", \"readyToUse\":\"Ready To Use\", \"bootOrder\":\"Boot Order\", \"volume\":\"Volume\", \"dockerImage\":\"Docker Image\", \"addVolume\":\"Add Volume\", \"addExistingVolume\":\"Add Existing Volume\", \"addVmImage\":\"Add a Virtual Machine Image\", \"addContainer\":\"Add Container\", \"setFirst\":\"Set as root volume\", \"saveVolume\":\"Update Volume\", \"encryption\":\"Encryption\", \"vmImageVolumeTip\":\"Disk size ({diskSize}) should greater than selected image virtual size ({imageVirtualSize})\", \"lockTooltip\":({\"all\":\"All volumes are encrypted.\", \"partial\":\"Some volumes are encrypted.\"}), \"title\":({\"vmImage\":\"Image Volume\", \"existingVolume\":\"Existing Volume\", \"volume\":\"Volume\", \"container\":\"Container\"}), \"unmount\":({\"title\":\"Are you sure?\", \"message\":\"Are you sure you want to unmount this volume?\"}), \"emptyImage\":\"No media\"}), \"network\":({\"title\":\"Network\", \"addNetwork\":\"Add Network\", \"addPort\":\"Add Port\"}), \"cloudConfig\":({\"title\":\"Cloud Configuration\", \"createTemplateTitle\":\"Create {name}\", \"createNew\":\"Create new...\", \"cloudInit\":({\"label\":\"Cloud Init\", \"placeholder\":\"Select a template\"}), \"user\":({\"label\":\"User Data Template\", \"title\":\"User Data:\", \"tip\":\"You can specify user data to configure an instance or run a configuration script during launch. If you launch more than one instance at a time, the user data is available to all the instances in that reservation. Learn more\"}), \"network\":({\"label\":\"Network Data Template\", \"title\":\"Network Data:\", \"tip\":\"The network-data configuration allows you to customize the instance's networking interfaces by assigning subnet configuration, virtual device creation (bonds, bridges, VLANs) routes and DNS configuration. Learn more\"})}), \"sysprep\":({\"title\":\"Windows Sysprep Configuration\", \"description\":\"Configure Windows automated installation using autounattend.xml. The configuration will be stored in a Kubernetes Secret and mounted as a CD-ROM during installation. Learn more\", \"createNew\":\"Create new...\", \"createNewTitle\":\"Create Windows Sysprep Template\", \"xmlContent\":\"autounattend.xml content\", \"secret\":({\"label\":\"Windows Sysprep Template\"}), \"validation\":({\"invalidXml\":\"Invalid XML syntax\", \"invalidNamespace\":\"Invalid unattend.xml namespace. Expected 'urn:schemas-microsoft-com:unattend'\"})}), \"scheduling\":({\"affinity\":({\"anyNode\":\"Run virtual machine on any available node\", \"schedulingRules\":\"Run virtual machine on node(s) matching scheduling rules\", \"specificNode\":\"Run virtual machine on specific node - (Live migration is not supported)\"}), \"networkNotSupport\":\"Network not support schedule\"}), \"accessCredentials\":({\"resetPwd\":({\"label\":\"Add Basic Auth\"}), \"injectSSH\":({\"label\":\"Add SSH Key\", \"users\":\"Select Users\", \"addUser\":\"Add User\"}), \"tips\":\"qemu-guest-agent must be installed to enable the accessing of credentials. The virtual machine needs to be restarted after credentials added. You need to be in the virtual machine to edit your password or remove an SSH-Key after deleting the credentials.\", \"userTips\":\"The user to be added must already exist; otherwise, the credentials will not take effect.\", \"duplicatedUser\":\"User already exists.\", \"invalidUser\":\"Invalid Username.\"}), \"input\":({\"name\":\"Name\", \"cpu\":\"CPU\", \"maxCpu\":\"Maximum CPU\", \"maxMemory\":\"Maximum Memory\", \"memory\":\"Memory\", \"image\":\"Image\", \"sshKey\":\"SSHKey\", \"sshKeyValue\":\"SSH-Key\", \"MachineType\":\"Machine Type\", \"username\":\"Username\", \"password\":\"Password\", \"reservedMemory\":\"Reserved Memory\", \"customizeDisplayName\":\"Customize virtual machine display name\", \"displayNamePlaceholder\":\"Virtual machine alias name\", \"displayName\":\"Display Name\"}), \"filesystem\":({\"description\":\"Harvester supports filesystem volumes for VM via virtiofs.\", \"type\":\"Filesystem Type\", \"volume\":\"Volume\", \"resource\":\"Resource\", \"add\":\"Add\", \"mountBannerHint\":\"Please update the mount path (e.g. /mnt/appconfigfs) to your preferred location, then add the corresponding commands to the\", \"mountBannerHintLink\":\"runcmd\", \"mountBannerHintSuffix\":\"in Advanced tab User Data.\"}), \"machineTypeTip\":\"Specify a processor architecture to emulate. To see a list of supported architectures, run: qemu-system-x86_64 -cpu ?\", \"detail\":({\"tabs\":({\"overview\":\"Overview\", \"details\":\"Details\", \"environment\":\"Environment\", \"events\":\"Events\", \"migration\":\"Migration\", \"console\":\"Console\", \"networkInterfaces\":\"Network Interfaces\", \"disks\":\"Disks\", \"networks\":\"Networks\", \"basics\":\"Basics\", \"configurations\":\"Configurations\", \"inventory\":\"Inventory\", \"hostBasic\":\"Basic Attributes\", \"instance\":\"Virtual Machines\", \"monitor\":\"Monitor Data\", \"keypairs\":\"SSH Keys\", \"cloudConfig\":\"Cloud Configuration\", \"metrics\":\"Virtual Machine Metrics\"}), \"details\":({\"title\":({\"vmDetails\":\"Virtual Machine Details\", \"requirements\":\"Scheduling and resources requirements\", \"services\":\"Services\", \"users\":\"Logged in users\"}), \"name\":\"Name\", \"totalSnapshotQuota\":\"Total Snapshot Quota\", \"namespace\":\"Namespace\", \"created\":\"Created\", \"hostname\":\"Hostname\", \"node\":\"Node\", \"ipAddress\":\"IP Address\", \"status\":\"Status\", \"pod\":\"Pod\", \"labels\":\"Labels\", \"bootOrder\":\"Boot Order\", \"annotations\":\"Annotations\", \"CDROMs\":\"CD-ROMs\", \"description\":\"Description\", \"operatingSystem\":\"Operating System\", \"template\":\"Template\", \"kernelRelease\":\"Kernel Release\", \"owner\":\"Owner\", \"workloadProfile\":\"Workload Profile\", \"nodeSelector\":\"Node Selector\", \"flavor\":\"Flavor\", \"tolerations\":\"Tolerations\", \"dedicatedResources\":\"Dedicated Resources\", \"down\":\"Virtual machine not running\", \"affinityRules\":\"Affinity Rules\", \"phase\":\"Phase\", \"sourceNode\":\"Source Node\", \"targetNode\":\"Target Node\", \"started\":\"Started\", \"ended\":\"Ended\"}), \"notAvailable\":\"Not available\", \"GuestAgentNotInstalled\":\"Guest agent required\", \"noOwner\":\"No Owner\", \"events\":({\"from\":\"Generated from\", \"down\":\"No events in the past hour\"}), \"console\":({\"down\":\"This virtual machine is down. Please start it to access its console.\", \"shortcutKeys\":\"Shortcut Keys\", \"customShortcutKeys\":\"Custom Shortcut Keys\", \"management\":\"Management Shortcut Keys\", \"record\":({\"start\":\"Record\", \"recording\":\"Recording\", \"stop\":\"Stop Recording\", \"tips\":\"Press the record button to capture your keyboard inputs.\", \"send\":\"Send\", \"preferredKeys\":\"Preferred Custom Shortcut Keys\"})})}), \"terminationGracePeriodSeconds\":({\"label\":\"Termination Grace Period\"}), \"affinity\":({\"addLabel\":\"Add Workload Selector\", \"topologyKey\":({\"placeholder\":\"topology.kubernetes.io/zone\"}), \"thisPodNamespace\":\"This virtual machine's namespace\", \"matchExpressions\":({\"inNamespaces\":\"Workloads in these namespaces\"}), \"namespaces\":({\"label\":\"Namespaces\"})}), \"instanceLabels\":({\"banner\":\"These labels are automatically synchronized to the virtual machine instance.\"}), \"labels\":({\"banner\":\"These key values are added as labels to the virtual machine.\"}), \"annotations\":({\"banner\":\"These key values are added as annotations to the virtual machine.\"})}), \"volume\":({\"label\":\"Volumes\", \"tabs\":({\"basics\":\"Basics\", \"snapshots\":\"Snapshots\", \"datasource\":\"Data Source\", \"details\":\"Details\", \"conditions\":\"Conditions\"}), \"size\":\"Size\", \"volumeMode\":\"Volume Mode\", \"accessModes\":\"Access Modes\", \"createWithDataVolume\":\"Create with DataVolume\", \"createWithDataVolumeTooltip\":\"Create Volume with Kubevirt/Containerized Data Importer way. It can fill accessMode/volumeMode automatically.\", \"showAdvanced\":\"Show Advanced Options\", \"hideAdvanced\":\"Hide Advanced Options\", \"source\":\"Source\", \"kind\":\"Kind\", \"sourceOptions\":({\"new\":\"New\", \"vmImage\":\"Virtual Machine Image\"}), \"image\":\"Image\", \"frontend\":\"Frontend\", \"blockdev\":\"Block Device\", \"attachedNode\":\"Attached Node\", \"endpoint\":\"Endpoint\", \"diskTags\":\"Disk Tags\", \"nodeTags\":\"Node Tags\", \"lastBackup\":\"Last Backup\", \"lastBackupAt\":\"Last Backup At\", \"replicasNumber\":\"Replicas Number\", \"promptRemove\":({\"tips\":\"Warn: The volume's snapshots will be deleted with this volume.\"}), \"externalLink\":({\"tips\":\"Check volume details\"}), \"rebuildingMessage\":\"Rebuilding: {percentage}%\", \"longhorn\":({\"disableResize\":\"Longhorn V2 volumes cannot be resized.\"})}), \"image\":({\"label\":\"Images\", \"tabs\":({\"basics\":\"Basics\"}), \"url\":\"URL\", \"size\":\"Size\", \"isEncryption\":\"Encryption\", \"encryptionSecret\":\"Encryption Secret\", \"virtualSize\":\"Virtual Size\", \"urlTip\":\"Supports the raw and qcow2 image formats which are supported by qemu. Bootable ISO images can also be used and are treated like raw images.\", \"fileName\":\"File Name\", \"uploadFile\":\"Upload File\", \"source\":\"Source Type\", \"sourceType\":({\"download\":\"URL\", \"upload\":\"File\", \"clone\":\"Clone\", \"encrypt\":\"Encrypt\", \"decrypt\":\"Decrypt\"}), \"sourceImage\":\"Source Image\", \"cryptoOperation\":\"Crypto Operation\", \"warning\":({\"uploading\":\"{count, plural,\\n=1 {1 image is uploading, please do not refresh or close the page.}\\nother {{count} images are uploading, please do not refresh or close the page.}\\n}\", \"osUpgrade\":({\"uploading\":\"{name} is uploading, please do not refresh or close the page.\"})}), \"checksum\":\"Checksum\", \"checksumTip\":\"Validate the image using the SHA512 checksum, if specified.\", \"tooltip\":({\"imported\":\"Created automatically by the vm-import-controller\"}), \"errors\":({\"unsupportedBackend\":\"Unsupported backend type: {backend}\"})}), \"vmTemplate\":({\"label\":\"Templates\", \"tabs\":({\"basics\":\"Basics\"}), \"nameNsDescription\":({\"name\":\"Template Name\"}), \"tips\":({\"notExistImage\":({\"title\":\"Image {name} does not exist!\", \"message\":\"Please select a new image.\"}), \"notExistNode\":({\"title\":\"Node {name} does not exist!\", \"message\":\"Please select a new node.\"})})}), \"upgradePage\":({\"upgradeApp\":\"Upgrade Software\", \"upgrade\":\"Upgrade\", \"upgradeTip\":\"Please select the version you want to upgrade to\", \"currentVersion\":\"CURRENT VERSION\", \"versionLabel\":\"AVAILABLE COMPATIBLE VERSIONS\", \"enableLogging\":\"Enable Logging\", \"skipSingleReplicaDetachedVol\":\"Skip checking single-replica detached volumes\", \"upgradeNode\":\"Upgrading Node\", \"upgradeSysService\":\"Upgrading System Service\", \"upgradeImage\":\"Download Upgrade Image\", \"osUpgrade\":\"Cluster Upgrade\", \"uploadNew\":\"Upload New Image\", \"deleteHeader\":\"Please select an image to delete.\", \"deleteExisting\":\"Delete Existing Image\", \"selectExisting\":\"Select Existing Image\", \"createRepository\":\"Creating Upgrade Repository\", \"succeeded\":\"Succeeded\", \"releaseTip\":\"Please read the upgrade documentation carefully. You can view details on the Harvester Release Notes.\", \"checkReady\":\"I have read and understood the upgrade instructions related to this Harvester version.\", \"pending\":\"Pending\", \"upload\":({\"duplicatedFile\":\"The file you are trying to upload already exists.\"}), \"repoInfo\":({\"upgradeStatus\":\"Upgrade Status\", \"os\":\"OS\", \"kubernetes\":\"Kubernetes\", \"monitoringChart\":\"Monitoring Chart\", \"harvesterChart\":\"Harvester Chart\", \"success\":\"Success\", \"fail\":\"Fail\", \"ongoing\":\"On-going\", \"downloadLog\":\"Download Log\", \"logStatus\":\"Log Download Status\"}), \"dismissMessage\":\"Dismiss it\", \"upgradeInfo\":({\"warning\":\"WARNING\", \"doc\":\"Read the documentation before starting the upgrade process. Ensure that you complete procedures that are relevant to your environment and the version you are upgrading to.\", \"tip\":\"Unmet system requirements and incorrectly performed procedures may cause complete upgrade failure and other issues that require manual workarounds.\", \"moreNotes\":\"For more details about the release notes, please visit -\"})}), \"schedule\":({\"label\":\"Virtual Machine Schedules\", \"createTitle\":\"Create Schedule\", \"createButtonText\":\"Create Schedule\", \"scheduleType\":\"Virtual Machine Schedule Type\", \"cron\":({\"label\":\"Cron Schedule\", \"editButton\":\"Edit\"}), \"detail\":({\"namespace\":\"Namespace\", \"sourceVM\":\"Source Virtual Machine\"}), \"tabs\":({\"basic\":\"Basic\", \"backups\":\"Backups\", \"snapshots\":\"Snapshots\"}), \"message\":({\"noSetting\":({\"suffix\":\"before creating a backup schedule\"})}), \"retain\":({\"label\":\"Retain\", \"count\":\"Count\", \"tooltip\":\"Number of up-to-date VM backups to retain. Maximum to 250, minimum to 2.\"}), \"maxFailure\":({\"label\":\"Max Failure\", \"count\":\"Count\", \"tooltip\":\"Max number of consecutive failed backups that could be tolerated. If reach this threshold, Harvester controller will suspend the schedule job. This value should less than retain count\"}), \"virtualMachine\":({\"title\":\"Virtual Machine Name\", \"placeholder\":\"Select a virtual machine\"}), \"type\":({\"snapshot\":\"Snapshot\", \"backup\":\"Backup\"})}), \"backup\":({\"label\":\"Virtual Machine Backups\", \"createText\":\"Restore Backup\", \"title\":\"Restore Virtual Machine\", \"refreshInterval\":({\"label\":\"Refresh Interval\", \"tip\":\"The interval for the backup target to sync data to harvester cluster. Set to 0 to disable refresh mechanism.\"}), \"backupTargetTip\":\"The endpoint used to access the backupstore. NFS and S3 are supported.\", \"message\":({\"noSetting\":({\"prefix\":\"You must configure the backup target\", \"middle\":\"setting\", \"suffix\":\"before creating a new backup.\"}), \"errorTip\":({\"prefix\":\"Backup target value in\", \"middle\":\"setting\", \"suffix\":\"is invalid, error: \"}), \"viewSetting\":({\"prefix\":\"Click\", \"middle\":\"here\", \"suffix\":\"to view the backup configuration.\"}), \"testConnect\":({\"actionLabel\":\"Test connection\", \"waitingLabel\":\"Testing connection...\", \"successLabel\":\"Connection tested\", \"successMessage\":\"Harvester can successfully connect to the endpoint {endpoint}\"})}), \"restore\":({\"backup\":\"Backup\", \"deletePreviousVolumes\":\"Delete Previous Volumes\", \"createNew\":\"Create new\", \"replaceExisting\":\"Replace existing\", \"virtualMachineName\":\"Virtual Machine Name\", \"keepMacAddress\":\"Keep MAC Address\", \"haltAfterRestore\":\"Keep powered off after restore\"}), \"matchTarget\":\"The current backup target does not match the existing one.\", \"progress\":({\"details\":\"Volume details\", \"tooltip\":({\"starting\":\"Backup initiating\", \"progress\":\"Backup in progress\", \"complete\":\"Backup completed\"})})}), \"restore\":({\"progress\":({\"details\":\"Volume details\", \"tooltip\":({\"starting\":\"Restore initiating\", \"progress\":\"Restore in progress\", \"complete\":\"Restore completed\"})})}), \"subnet\":({\"cidrBlock\":({\"tooltip\":\"The subnet range in CIDR notation. Note that the CIDR blocks of different Subnets' within the same VPC cannot overlap.\", \"label\":\"CIDR Block\", \"placeholder\":\"e.g. 172.20.0.0/16\"}), \"protocol\":({\"label\":\"Protocol\"}), \"provider\":({\"tooltip\":\"Network provider for this Subnet. Must be one of the Virtual Machine Networks in OverlayNetwork type.\", \"label\":\"Provider\"}), \"vpc\":({\"label\":\"Virtual Private Cloud\"}), \"gateway\":({\"label\":\"Gateway IP\", \"placeholder\":\"e.g. 172.20.0.1\"}), \"vlan\":({\"label\":\"VLAN\", \"placeholder\":\"Select a VLAN\"}), \"dhcp\":({\"label\":\"Dynamic Host Configuration Protocol (DHCP)\", \"v4Options\":\"DHCPV4Options\", \"v6Options\":\"DHCPV6Options\", \"placeholder\":\"key1=value1, key2=value2\", \"dhcpOptionBanner\":\"DHCP options is a key/value string concatenate with comma. For more detail, please refer to KubOVN document\", \"tooltip\":\"Enable DHCP server for this subnet. When enabled, VMs can automatically obtain IP addresses from this subnet.\"}), \"externalConnectivity\":({\"label\":\"NAT Outgoing\", \"tooltip\":\"Enable NAT for VMs using this subnet to access external networks.\"}), \"private\":({\"label\":\"Private Subnet\", \"tooltip\":\"Enable network isolation for this Subnet. When enabled, VMs can only communicate within this subnet, even if other subnets exist under the same VPC.\"}), \"allowSubnet\":({\"label\":\"Allow Subnets\", \"tooltip\":\"You can specify certain subnets which can communicate with this subnet.\", \"addSubnet\":\"Add Allow Subnet\", \"placeholder\":\"e.g. 172.16.0.0/16\"}), \"excludeIPs\":({\"tooltip\":\"The IP address list to reserve from automatic assignment. The gateway IP address is always excluded and will be automatically added to the list.\", \"placeholder\":\"single IP or 192.168.0.100..192.168.0.200\"}), \"acl\":({\"label\":\"Access Control List\", \"tooltip\":\"The ACL to apply to this Subnet. Must be one of the ACLs in the same namespace.\", \"action\":({\"label\":\"Action\", \"placeholder\":\"Please select an action\"}), \"direction\":({\"label\":\"Direction\", \"placeholder\":\"Please select a direction\"}), \"addRule\":\"Add Rule\", \"priority\":({\"label\":\"Priority\", \"placeholder\":\"Please select a priority\"}), \"match\":({\"label\":\"Match\", \"placeholder\":\"e.g. ip4.dst == 10.10.0.2\"}), \"banner\":\"The supported field in ACL match can refer to KubeOvn Subnet ACL document\"})}), \"vpc\":({\"viewTopology\":\"Topology\", \"topology\":({\"loading\":\"Loading topology...\", \"empty\":\"No resources found\", \"visibility\":({\"vpc\":\"VPC\", \"subnets\":\"Subnets\", \"overlayNetworks\":\"Overlay Networks\", \"vms\":\"VMs\"}), \"labels\":({\"cidr\":\"CIDR\", \"provider\":\"Provider\", \"type\":\"Type\", \"clusterNetwork\":\"Cluster Network\", \"network\":\"Network\", \"subnet\":\"Subnet\", \"ip\":\"IP\", \"mac\":\"MAC\", \"peering\":\"Peering\"})}), \"noAddonEnabled\":({\"prefix\":\"The kubeovn-operator add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable the add-on to successfully create VPC and subnet.\"}), \"label\":\"Virtual Private Cloud\", \"noChild\":\"There is no subnet defined in this Virtual Private Cloud.\", \"createSubnet\":\"Create Subnet\", \"staticRoutes\":({\"label\":\"Static Routes\", \"cidr\":({\"label\":\"CIDR\", \"placeholder\":\"e.g. 172.16.0.0/16\"}), \"nextHopIP\":({\"tooltip\":\"The localConnectIP on the other end of the peering VPC.\", \"label\":\"Next Hop IP\", \"placeholder\":\"e.g. 169.254.0.2\"})}), \"vpcPeerings\":({\"label\":\"VPC Peerings\", \"localConnectIP\":({\"tooltip\":\"The designated IP address in CIDR notation of the VPC peering endpoint. Note that both IP addresses (for the VPC and the other VPC) should belong to the same subnet range and should not conflict with the cidrBlock in any existing subnets.\", \"label\":\"Local Connect IP\", \"placeholder\":\"e.g. 169.254.0.1/16\"}), \"remoteVpc\":({\"label\":\"Remote VPC\"}), \"infoBanner\":\"The static route destination CIDR must cover all subnets CIDR from remote VPC Peer. Read VPC Peering Configuration Examples for more information.\"})}), \"natGateway\":({\"label\":\"Gateways\", \"internalTenantNetwork\":({\"label\":\"Internal Tenant Network\", \"placeholder\":\"Select a Virtual Machine Network\"}), \"vpc\":({\"label\":\"VPC\", \"placeholder\":\"Select a VPC\"}), \"subnet\":({\"label\":\"Subnet\", \"placeholder\":\"Select a subnet\"}), \"lanIp\":({\"label\":\"LAN IP\", \"placeholder\":\"Enter LAN IP\"}), \"externalSubnets\":({\"label\":\"External Subnets\", \"addLabel\":\"Add\", \"placeholder\":\"Select a subnet\"})}), \"externalIP\":({\"label\":\"External IPs\", \"natGateway\":({\"label\":\"VpcNatGateway\", \"placeholder\":\"Select a VpcNatGateway\"}), \"externalSubnet\":({\"label\":\"External Subnet\", \"placeholder\":\"Select an external subnet\"}), \"v4ip\":({\"label\":\"V4 IP\", \"placeholder\":\"public ip from external subnet\"})}), \"snat\":({\"label\":\"Source Rules\", \"eip\":({\"label\":\"EIP\", \"placeholder\":\"Select an external IP\"}), \"internalCIDR\":({\"label\":\"Internal CIDR\", \"placeholder\":\"internal subnet CIDR\"})}), \"dnat\":({\"label\":\"Destination Rules\", \"eip\":({\"label\":\"EIP\", \"placeholder\":\"Select an external IP\"}), \"externalPort\":({\"label\":\"External Port\", \"placeholder\":\"port number\"}), \"internalIp\":({\"label\":\"Internal IP\", \"placeholder\":\"internal IP address\"}), \"internalPort\":({\"label\":\"Internal Port\", \"placeholder\":\"port number\"}), \"protocol\":({\"label\":\"Protocol\", \"placeholder\":\"Select protocol (tcp or udp)\"})}), \"providerNetwork\":({\"label\":\"Provider Networks\", \"defaultInterface\":({\"label\":\"Default Interface\", \"placeholder\":\"Select the interface the same as master interface of external overlay network\"}), \"customInterfaces\":({\"label\":\"Custom Interfaces\", \"addLabel\":\"Add Custom Interface\", \"interface\":({\"label\":\"Network Interface\", \"placeholder\":\"e.g. eth2\"}), \"nodes\":({\"label\":\"Nodes\", \"addLabel\":\"Add Node\", \"placeholder\":\"Select a node\"})}), \"excludedNodes\":({\"label\":\"Excluded Nodes\", \"addLabel\":\"Add Excluded Node\", \"placeholder\":\"Select node to exclude from this provider network\"})}), \"vlanNetwork\":({\"label\":\"VLANs\"}), \"vlan\":({\"id\":({\"label\":\"VLAN ID\", \"placeholder\":\"e.g. 1-4094\"}), \"provider\":({\"label\":\"Provider Network\", \"placeholder\":\"Select a provider network\"})}), \"networkPolicy\":({\"label\":\"Policies\", \"banner\":\"The network policies must be used for VMs attached to overlay networks. Please read the harvester document how the network policy works.\"}), \"network\":({\"label\":\"Virtual Machine Networks\", \"tabs\":({\"basics\":\"Basics\", \"layer3Network\":\"Route\", \"nic\":\"Network Interface Card\"}), \"clusterNetwork\":({\"label\":\"Cluster Network\", \"create\":\"Create a new cluster network\", \"toolTip\":\"Define your custom cluster scope network name\", \"createPlaceholder\":\"Input a new cluster network name\", \"selectOrCreatePlaceholder\":\"Select or create a new cluster network\", \"selectPlaceholder\":\"Select a cluster network\"}), \"layer3Network\":({\"mode\":({\"label\":\"Mode\", \"auto\":\"Auto (DHCP)\", \"manual\":\"Manual\"}), \"serverIPAddr\":({\"label\":\"DHCP Server IP\"}), \"gateway\":({\"label\":\"Gateway\", \"placeholder\":\"e.g. 172.16.0.1\"}), \"cidr\":({\"label\":\"CIDR\", \"placeholder\":\"e.g. 172.16.0.1/24\"})})}), \"sshKey\":({\"label\":\"SSH Keys\", \"keypair\":\"SSH Key\", \"tabs\":({\"basics\":\"Basics\"})}), \"setting\":({\"label\":\"Settings\", \"tabs\":({\"advanced\":\"Advanced\", \"ui\":\"UI\"}), \"validation\":({\"physicalNIC\":\"DefaultPhysicalNIC\"}), \"placeholder\":({\"accessKeyId\":\"Specify your access key ID\", \"secretAccessKey\":\"Specify your secret access key\", \"cert\":\"Upload a self-signed SSL certificate\"}), \"noSearchMatch\":\"No settings match your search.\", \"vlanChangeTip\":\"The newly modified default network interface only applies to newly added nodes, not existing ones.\", \"defaultPhysicalNIC\":\"Default Network Interface\", \"modifiedMessage\":\"Settings that have been customized from default settings are tagged with 'Modified'.\", \"percentTip\":\"The value in parentheses represents the distribution percentage of the network interface on all hosts. If an interface less than 100% is selected, the user needs to manually specify the network interface on the host where the vlan network configuration fails.\", \"message\":({\"ca\":({\"prefix\":\"Click\", \"middle\":\"here\", \"suffix\":\"to add a custom certificate.\"})}), \"sslCertificates\":({\"publicCertificate\":\"Public Certificate\", \"privateKey\":\"Private Key\", \"ca\":\"CA\"}), \"rancherCluster\":({\"kubeConfig\":\"Rancher KubeConfig\", \"removeUpstreamClusterWhenNamespaceIsDeleted\":\"Remove Upstream Cluster When Namespace Is Deleted\"}), \"clusterPodSecurityStandard\":({\"whitelistedNamespaces\":({\"label\":\"Whitelisted Namespaces\"}), \"privilegedNamespaces\":({\"label\":\"Privileged Namespaces\"}), \"restrictedNamespaces\":({\"label\":\"Restricted Namespaces\"})}), \"storageNetwork\":({\"range\":({\"placeholder\":\"e.g. 172.16.0.0/24\", \"label\":\"IP Range\", \"invalid\":\"\\\"Range\\\" is invalid.\"}), \"clusterNetwork\":\"Cluster Network\", \"vlan\":\"VLAN ID\", \"exclusiveVlan\":\"Exclusive VLAN\", \"exclude\":({\"label\":\"Exclude IPs\", \"placeholder\":\"CIDR format, e.g. 172.16.0.10/32\", \"invalid\":\"\\\"Exclude list\\\" is invalid.\", \"addIp\":\"Add Exclude IP\"}), \"warning\":\"WARNING: Any change to storage-network requires shutting down all virtual machines before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.\", \"tip\":\"Specify an IP range in the IPv4 CIDR format. Number of IPs Required = Number of Nodes * 2 + Number of Disks * 2 + Number of Images to Download/Upload . For more information about storage network settings, see the documentation.\"}), \"rwxNetwork\":({\"warning\":\"WARNING: Any change to rwx-network requires longhorn RWX volumes detached before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.\", \"shareStorageNetwork\":\"Share Storage Network\", \"dedicatedRwxNetwork\":\"Dedicated RWX Network\", \"shareStorageNetworkWarning\":\"The rwx-network is governed by storage-network, and changes here won't take effect until share-storage-network is set to false.\"}), \"vmForceDeletionPolicy\":({\"period\":\"Period\", \"vmMigrationTimeout\":\"VM Migration Timeout\"}), \"vmMigrationNetwork\":({\"parseError\":\"Failed to parse existing configuration.\", \"fetchError\":\"Failed to load required network resources: {error}. Please refresh the page or try again later.\", \"clusterNetwork\":\"Cluster Network\", \"vlan\":\"VLAN ID\", \"range\":({\"placeholder\":\"e.g. 172.16.0.0/24\", \"label\":\"IP Range\", \"invalid\":\"\\\"Range\\\" is invalid.\"}), \"exclude\":({\"label\":\"Excluded IPs\", \"placeholder\":\"e.g. 172.16.0.1/32\", \"invalid\":\"\\\"Exclude list\\\" is invalid.\", \"addButton\":\"Add Exclude IP\"})}), \"ratio\":\"Ratio\", \"autoRotateRKE2Certs\":({\"expiringInHours\":\"Expiring in\"}), \"httpProxy\":({\"warning\":\"WARNING: If you configure \\\"http-proxy\\\" and \\\"https-proxy\\\", you must also put Harvester node's CIDR into \\\"no-proxy\\\", otherwise the Harvester cluster will be broken.\"}), \"supportBundleImage\":({\"imagePullPolicy\":\"Pull Policy\", \"repo\":\"Repository\", \"tag\":\"Tag\"}), \"csiDriverConfig\":({\"provisioner\":\"Provisioner\", \"volumeSnapshotClassName\":\"Volume Snapshot Class Name\", \"backupVolumeSnapshotClassName\":\"Backup Volume Snapshot Class Name\"}), \"csiOnlineExpandValidation\":({\"provisioner\":\"Provisioner\", \"value\":\"Value\", \"invalidJsonFormat\":\"Configuration value is not a valid JSON format: {error}\", \"failedToLoadDrivers\":\"Failed to load CSI drivers. Error: {error}\"}), \"containerdRegistry\":({\"mirrors\":({\"mirrors\":\"Mirrors\", \"registryName\":\"Registry Name\", \"endpoints\":\"Endpoints\", \"rewrite\":({\"rewrite\":\"Rewrite\", \"addRewrite\":\"Add Rewrite\"}), \"addMirror\":\"Add Mirror\"}), \"configs\":({\"configs\":\"Configurations\", \"registryEDQNorIP\":\"Registry FDQN or IP\", \"registryPlaceholder\":\"myregistry.local:5000\", \"username\":\"Username\", \"password\":\"Password\", \"auth\":\"Auth\", \"identityToken\":\"Identity Token\", \"insecureSkipVerify\":\"InsecureSkipVerify\", \"addConfig\":\"Add Configuration\"})}), \"upgrade\":({\"unknownImageName\":\"Image name is not found.\", \"imageUrl\":\"Please input a valid image URL.\", \"chooseFile\":\"Please select to upload an image.\", \"checksum\":\"Checksum\", \"networkError\":\"Unable to upload the image. Resolve network issues that may have occurred and try again.\", \"cancelUpload\":\"Cancelled the image upload.\", \"uploadSuccess\":\"{name} uploaded successfully. Press Upgrade button to start the cluster upgrade process.\", \"deleteImage\":\"Please select an image to delete.\", \"deleteSuccess\":\"{name} deleted successfully.\", \"imagePreloadStrategy\":\"Image Preload Strategy\", \"nodeUpgradeOption\":\"Node Upgrade Option\", \"restoreVM\":\"Restore VM\", \"strategy\":\"Strategy\", \"pauseNodes\":\"Pause Nodes\", \"strategyType\":\"Strategy Type\", \"concurrency\":\"Concurrency\"}), \"harvesterMonitoring\":({\"label\":\"Harvester Monitoring\", \"section\":({\"prometheus\":\"Prometheus\", \"prometheusNodeExporter\":\"Prometheus Node Exporter\", \"grafana\":\"Grafana\", \"alertmanager\":\"Alertmanager\"}), \"tips\":({\"scrape\":\"Interval between consecutive scrapes\", \"evaluation\":\"Interval between consecutive evaluations\", \"retention\":\"How long to retain metrics\", \"retentionSize\":\"Maximum size of metrics\"})}), \"clusterRegistrationUrl\":({\"url\":\"URL\", \"insecureSkipTLSVerify\":\"Insecure Skip TLS Verify\", \"tip\":({\"prefix\":\"Harvester secures cluster registration via TLS by default. If opt out \\\"Insecure Skip TLS Verify\\\", you must provide custom CA certificates using the\", \"middle\":\"additional-ca\", \"suffix\":\"setting.\"}), \"message\":\"To completely unset the imported Harvester cluster, please also remove it on the Rancher Dashboard UI via the Virtualization Management page.\"}), \"ntpServers\":({\"isNotIPV4\":\"The address you entered is not IPv4 or host. Please enter a valid IPv4 address or a host address.\", \"isDuplicate\":\"There are duplicate NTP server configurations.\"}), \"instanceManagerResources\":({\"parseError\":\"Failed to parse configuration: {error}\", \"v1\":\"V1 Data Engine\", \"v2\":\"V2 Data Engine\"}), \"kubevirtMigration\":({\"parseError\":\"Failed to parse configuration: {error}\", \"parallelMigrationsPerCluster\":\"Parallel Migrations Per Cluster\", \"parallelOutboundMigrationsPerNode\":\"Parallel Outbound Migrations Per Node\", \"bandwidthPerMigration\":\"Bandwidth Per Migration\", \"bandwidthPerMigrationTooltip\":\"0 is KubeVirt default, representing unlimited bandwidth\", \"completionTimeoutPerGiB\":\"Completion Timeout Per GiB\", \"progressTimeout\":\"Progress Timeout\", \"allowAutoConverge\":\"Allow Auto Converge\", \"allowPostCopy\":\"Allow Post Copy\", \"unsafeMigrationOverride\":\"Unsafe Migration Override\", \"allowWorkloadDisruption\":\"Allow Workload Disruption\", \"disableTLS\":\"Disable TLS\", \"matchSELinuxLevelOnMigration\":\"Match SELinux Level On Migration\"})}), \"cloudTemplate\":({\"label\":\"Cloud Configuration Templates\", \"templateType\":\"Template Type\", \"userData\":\"User Data\", \"networkData\":\"Network Data\"}), \"support\":({\"title\":\"Harvester Support\", \"kubeconfig\":({\"title\":\"Download KubeConfig\", \"titleDescription\":\"Download kubeconfig for debugging.\"}), \"internal\":({\"rancher\":({\"title\":\"Access Embedded Rancher UI\", \"titleDescription\":\"You can only use the embedded Rancher UI for debugging and validation purposes. For more information about how Harvester integrates with Rancher, see the documentation.\"}), \"longhorn\":({\"title\":\"Access Embedded Longhorn UI\", \"titleDescription\":\"We only support to use the embedded Longhorn UI for debugging and validation purpose.\"})}), \"community\":({\"learnMore\":\"Find out more about SUSE Harvester support\", \"pricing\":\"Contact us for pricing\"})}), \"namespace\":({\"label\":\"Namespaces\"}), \"projectNamespace\":({\"label\":\"Projects/Namespaces\"}), \"vip\":({\"namespace\":({\"label\":\"Namespace\"}), \"cidr\":({\"label\":\"CIDR/IP Range\", \"invalid\":\"\\\"CIDR/IP Range\\\" is invalid.\", \"toolTip\":\"We can apply multiple pools or ranges by separating them with commas. For example: 192.168.0.200/30,192.168.0.200/29 or 192.168.0.10-192.168.0.11\"}), \"add\":({\"label\":\"Add IP Pools\"})}), \"sslParameters\":({\"protocols\":({\"label\":\"Protocols\"}), \"ciphers\":({\"label\":\"Ciphers\"})}), \"monitoring\":({\"configuration\":({\"label\":\"Configuration\"}), \"alertmanagerConfig\":({\"label\":\"Alertmanager Configurations\", \"diabledMonitoringTips\":({\"prefix\":\"Enable the\", \"middle\":\"monitoring\", \"suffix\":\"add-on first.\"}), \"diabledAlertingTips\":({\"prefix\":\"Enable\", \"middle\":\"Alertmanager\", \"suffix\":\"for configuration to take effect.\"}), \"disabledAddon\":({\"prefix\":\"The monitoring add-on is disabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it.\"})})}), \"logging\":({\"configuration\":({\"section\":({\"fluentbit\":\"Fluentbit\", \"fluentd\":\"Fluentd\"})}), \"clusterFlow\":({\"label\":\"Cluster Flows\"}), \"clusterOutput\":({\"label\":\"Cluster Outputs\"}), \"flow\":({\"label\":\"Flows\"}), \"output\":({\"label\":\"Outputs\"}), \"diabledTips\":({\"prefix\":\"Enable\", \"middle\":\"logging\", \"suffix\":\"for configuration to take effect.\"})}), \"snapshot\":({\"totalSnapshotSize\":\"Total Snapshot Size\", \"label\":\"Volume Snapshots\", \"targetVolume\":\"Original Volume\", \"size\":\"Size\", \"image\":\"Image\"}), \"vmSnapshot\":({\"label\":\"Virtual Machine Snapshots\", \"createText\":\"Restore Snapshot\", \"title\":\"Restore Virtual Machine\", \"snapshot\":\"Snapshot\"}), \"storage\":({\"label\":\"Storage\", \"useDefault\":\"Use the default storage\", \"volumeEncryption\":\"Volume Encryption\", \"secret\":\"Secret\", \"volumeExpansionCheckbox\":\"Enable Expansion\", \"migratable\":({\"label\":\"Migratable\"}), \"numberOfReplicas\":({\"label\":\"Number Of Replicas\"}), \"staleReplicaTimeout\":({\"label\":\"Stale Replica Timeout\"}), \"nodeSelector\":({\"label\":\"Host Selector\"}), \"diskSelector\":({\"label\":\"Disk Selector\"}), \"storageClass\":({\"label\":\"Storage Class\", \"longhorn\":({\"v1\":({\"label\":\"Longhorn V1 (CSI)\"}), \"v2\":({\"label\":\"Longhorn V2 (CSI)\"}), \"versionTooltip\":\"Longhorn V2 is disabled for this node.\"}), \"lvm\":({\"label\":\"LVM\"})}), \"title\":\"Storage Classes\", \"customize\":({\"volumeBindingMode\":({\"later\":\"Bind and provision a persistent volume once a virtual machine using the PersistentVolumeClaim is created\"})}), \"parameters\":({\"numberOfReplicas\":({\"label\":\"Number Of Replicas\"}), \"staleReplicaTimeout\":({\"label\":\"Stale Replica Timeout\"}), \"diskSelector\":({\"label\":\"Disk Selector\", \"no-options\":\"No available tags, please add in the `Host > Storage` page\"}), \"nodeSelector\":({\"label\":\"Node Selector\", \"no-options\":\"No available tags, please add in the `Host > Storage` page\"}), \"migratable\":({\"label\":\"Migratable\"}), \"lvmVolumeGroupType\":({\"label\":\"Volume Group Type\"}), \"lvmVolumeGroup\":({\"label\":\"Volume Group Name\", \"no-options\":\"No available Volume Groups, please add in the `Host > Storage` page\"}), \"node\":({\"label\":\"Node\"})}), \"allowedTopologies\":({\"title\":\"Allowed Topologies\", \"tooltip\":\"Allowed Topologies helps scheduling virtual machines on hosts which match all of below expressions.\"}), \"internal\":({\"label\":\"Internal Storage Class\", \"cannotDeleteTooltip\":\"Internal storage class volumes cannot be deleted\", \"cannotDeleteOrDefaultTooltip\":\"Internal storage classes cannot be deleted or set as default\"}), \"cdiSettings\":({\"label\":\"CDI Settings\", \"volumeModeAccessModes\":({\"label\":\"Volume Mode / Access Modes\", \"tooltip\":\"Specifies the default volume mode and access modes.\", \"add\":\"Add\", \"volumeMode\":\"Volume Mode\", \"accessModes\":({\"label\":\"Access Modes\"})}), \"volumeSnapshotClass\":({\"label\":\"Volume Snapshot Class\", \"tooltip\":\"Sets the Volume Snapshot Class name to be used when taking snapshots of PVCs under this StorageClass.\"}), \"cloneStrategy\":({\"label\":\"Clone Strategy\", \"tooltip\":\"Defines the clone strategy to use for volumes created with this StorageClass.\", \"copy\":\"Copy\", \"snapshot\":\"Snapshot\", \"csiClone\":\"CSI Clone\"}), \"fileSystemOverhead\":({\"label\":\"File System Overhead\", \"tooltip\":\"Specifies the percentage of filesystem overhead to consider when calculating PVC size.\", \"placeholder\":\"e.g. 0.05 (up to 3 decimal places, between 0 and 1)\"})})}), \"vlanConfig\":({\"title\":\"Network Configuration\", \"createNetworkConfig\":\"Create Network Configuration\", \"action\":({\"migrate\":\"Migrate\"}), \"titles\":({\"nodeSelector\":\"Node Selector\", \"uplink\":\"Uplink\", \"bondOptions\":\"Bond Options\", \"attributes\":\"Attributes\", \"host\":\"Selected Hosts\"}), \"scheduling\":({\"affinity\":({\"allNodes\":\"Select all nodes\", \"specificNode\":\"Select specific node\", \"schedulingRules\":\"Select node(s) matching rules\"})}), \"uplink\":({\"nics\":({\"label\":\"NIC\", \"addLabel\":\"Add NIC\", \"overlayWarning\":\"The NIC selected here must match the NIC provided in the provider network.\", \"placeholder\":\"Select a NIC that is available on all the selected nodes\", \"validate\":({\"available\":\"NIC \\\"{nic}\\\" is not available on the selected nodes\"})}), \"linkAttributes\":({\"mtu\":({\"label\":\"MTU\"})}), \"bondOptions\":({\"mode\":({\"label\":\"Mode\"}), \"miimon\":({\"label\":\"Miimon\", \"tooltip\":\"Miimon specifies the MII link monitoring frequency in milliseconds. -1 means to keep the original value.\"})})}), \"nodeSelector\":({\"matchingNodes\":({\"matchesSome\":\"{matched, plural,\\n =0 {Matches 0 of {total, number} Nodes.}\\n =1 {Matches 1 of {total, number} Nodes: \\\"{sample}\\\"}\\n other {Matches {matched, number} of {total, number} existing Nodes, including \\\"{sample}\\\"}\\n}\"})})}), \"vlanStatus\":({\"vlanConfig\":({\"label\":\"Network Configuration\", \"l2VlanMode\":({\"access\":\"Access\", \"trunk\":\"Trunk\", \"label\":\"Mode\"}), \"vlanTrunk\":({\"minId\":\"Minimum VLAN ID\", \"maxId\":\"Maximum VLAN ID\", \"add\":\"Add VLAN Trunk\"})})}), \"clusterNetwork\":({\"title\":\"Cluster Network Configuration\", \"create\":({\"button\":({\"label\":\"Create a Cluster Network\"})}), \"clusterNetwork\":\"There are no network configurations defined.\", \"mgmt\":\"mgmt is a built-in cluster management network and does not support any additional network configurations.\", \"notExist\":\"Cluster Network \\\"{ clusterNetwork }\\\" does not exist\", \"notReady\":\"Cluster Network \\\"{ clusterNetwork }\\\" is not ready\"}), \"addons\":({\"descriptions\":({\"harvester-system/vm-import-controller\":\"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.\", \"harvester-system/pcidevices-controller\":\"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machine and guest clusters.\", \"cattle-logging-system/rancher-logging\":\"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.\", \"harvester-system/rancher-vcluster\":\"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.\", \"cattle-monitoring-system/rancher-monitoring\":\"rancher-monitoring is an add-on that collects Harvester cluster and virtual machine metrics and allows you to view the metrics on an embedded dashboard and send alert(s) to remote servers.\", \"vm-import-controller\":\"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.\", \"pcidevices-controller\":\"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machines and guest clusters.\", \"nvidia-driver-toolkit\":\"nvidia-driver-toolkit is an add-on to enable vGPU devices and assign them to Harvester virtual machines.\", \"rancher-logging\":\"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.\", \"rancher-monitoring\":\"rancher-monitoring is an add-on to collect Harvester cluster and virtual machine metrics, view them on the embedded dashboard, and send alert(s) to remote servers.\", \"rancher-vcluster\":\"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.\", \"harvester-seeder\":\"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.\", \"harvester-system/harvester-seeder\":\"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.\", \"harvester-csi-driver-lvm\":\"harvester-csi-driver-lvm is an add-on allowing users to create PVC through the LVM with local devices.\", \"descheduler\":\"The virtual machine auto balance optimizes workload scheduling by evicting pods that are not optimally placed according to administrator-defined policies.\"}), \"vmMigration\":({\"generic\":({\"unknown\":\"Unknown\", \"identifier\":\"Identifier\", \"podNetwork\":\"Pod Network\", \"usedBy\":\"Used by:\", \"vlan\":\"VLAN {id}\", \"vCpu\":\"{count} vCPU\", \"memoryGb\":\"{value} GB\", \"memoryTb\":\"{value} TB\", \"elapsed\":({\"hoursAndMinutes\":\"{hours} {hours, plural, one {hour} other {hours}} and {minutes} {minutes, plural, one {minute} other {minutes}}\", \"hours\":\"{hours} {hours, plural, one {hour} other {hours}}\", \"minutes\":\"{minutes} {minutes, plural, one {minute} other {minutes}}\"})}), \"errors\":({\"failedLoadPlans\":\"Failed to load migration plans\", \"failedLoadVms\":\"Failed to load virtual machines\", \"failedRefreshVms\":\"Failed to refresh virtual machines\", \"failedLoadProviders\":\"Failed to load providers\", \"failedLoadProvider\":\"Failed to load provider: {error}\", \"failedResolveDetails\":\"Failed to resolve network and datastore details\", \"failedDecodeCredentials\":\"Failed to decode provider credentials\", \"connectionFailed\":\"Connection failed\", \"providerNotReady\":\"Provider not ready\"}), \"labels\":({\"dashboard\":\"Migration Overview\", \"provider\":\"Providers\", \"networkMap\":\"Network Maps\", \"storageMap\":\"Storage Maps\", \"plan\":\"Migration Plans\", \"migration\":\"Migrations\"}), \"providerWizard\":({\"title\":\"Create Provider\", \"editTitle\":\"Edit Provider\"}), \"wizard\":({\"title\":\"VM Migration\", \"steps\":({\"configureProvider\":({\"label\":\"Provider\", \"description\":\"Configure Provider\"}), \"selectVms\":({\"label\":\"VMs\", \"description\":\"Select VMs\"}), \"configureMappings\":({\"label\":\"Mappings\", \"description\":\"Define Mappings\"}), \"reviewMigration\":({\"label\":\"Migration Plan\", \"description\":\"Review Migration Plan\"})})}), \"fields\":({\"username\":\"Username\", \"password\":\"Password\"}), \"configureProvider\":({\"title\":\"Configure Provider\", \"description\":\"Connect to your VMware vCenter or ESXi host to discover virtual machines for migration\", \"connectionDetails\":\"Connection Details\", \"providerSelect\":\"Provider\", \"createNew\":\"Create new provider\", \"requirementsTitle\":\"Requirements\", \"requirementsText\":\"To migrate virtual machines from VMware, you will need a vCenter Server running version 6.5 or higher with a user account that has at least read permissions, and the source environment must be network-accessible from Rancher.\", \"name\":\"Name\", \"urlLabel\":\"vCenter/ESXi URL\", \"urlPlaceholder\":\"https://vcenter.example.com/sdk\", \"urlHint\":\"Enter the full URL including https://\", \"skipSsl\":\"Skip SSL certificate verification\", \"skipSslHint\":\"Not recommended for production environments\", \"testConnection\":({\"action\":\"Test Connection\", \"success\":\"Connection successful\", \"error\":\"Connection failed\", \"waiting\":\"Testing connection...\"}), \"testSuccess\":\"Connection test passed\", \"testFailed\":\"Connection test failed\", \"testMissingFields\":\"Please fill in all required fields before testing\", \"testTimeout\":\"Connection test timed out — the provider did not report a status in time\", \"save\":\"Save Provider and Continue\", \"saveExisting\":\"Check Provider and Continue\"}), \"selectVms\":({\"title\":\"Select Virtual Machines\", \"description\":\"Select the virtual machines you want to migrate from the source provider\", \"discovered\":\"{count} VMs discovered from\", \"lastSynced\":\"Last synced {time} ago • \", \"refreshNow\":\"Refresh now\", \"availableVms\":\"Available Virtual Machines\", \"selected\":\"selected\", \"saveSelection\":\"Save Selection and Continue\", \"selectAllBanner\":({\"pageOnly\":\"Your current selection includes only VMs currently shown on the page.\", \"selectAll\":\"Select all {count} VMs from this provider\", \"allSelected\":\"Your current selection includes all VMs.\", \"clearSelection\":\"Clear Selection\"}), \"manualEntry\":({\"title\":\"Add Virtual Machines\", \"description\":\"No VMs were discovered from the provider inventory. Add VMs manually by entering their IDs and names.\", \"vmId\":\"VM ID\", \"vmIdPlaceholder\":\"e.g. vm-60527\", \"add\":\"Add\", \"added\":\"VMs added\"}), \"columns\":({\"vmName\":\"VM Name\", \"vmId\":\"VM ID\", \"os\":\"Operating System\", \"resources\":\"Resources\", \"powerState\":\"Power State\", \"network\":\"Network\", \"datastore\":\"Datastore\"})}), \"dashboard\":({\"title\":\"Virtual Machine Migration Overview\", \"description\":\"Migrate virtual machines from VMware vSphere to Harvester using cold migration for data consistency. Create a migration plan to select VMs, map networks and storage, and prepare a migration to Harvester.\", \"createPlan\":\"Create Migration\", \"tableTitle\":\"Migrations\", \"columns\":({\"status\":\"Status\", \"plan\":\"Migration Plan\", \"progress\":\"Progress\", \"mappings\":\"Mappings\"}), \"progress\":({\"failed\":\"Failed\", \"migration\":\"Migration\", \"initializingMigration\":\"Initializing migration\", \"finishedSuccessfully\":\"Finished Successfully\", \"step\":\"Step {index}\", \"vmCount\":\"{count} VMs\", \"vmId\":\"id: {id}\"})}), \"configureMappings\":({\"title\":\"Set Mappings\", \"description\":\"Map VMware networks and datastores to Harvester and Longhorn target resources\", \"save\":\"Save Mappings and Continue\", \"noTemplate\":\"Start from scratch\", \"removeMap\":\"Remove Map\", \"networkMapping\":({\"title\":\"Network Mapping\", \"description\":\"Map VMware port groups to Harvester networks\", \"placeholder\":\"Choose a Harvester network\", \"template\":\"Use existing network mapping as template\", \"options\":({\"podNetworking\":\"Pod Networking\", \"ignored\":\"Ignored\"})}), \"storageMapping\":({\"title\":\"Storage Mapping\", \"description\":\"Map VMware datastores to Harvester storage classes\", \"placeholder\":\"Choose a Longhorn Storage Volume\", \"template\":\"Use existing storage mapping as template\"})}), \"reviewMigration\":({\"title\":\"Review Migration Plan\", \"description\":\"Confirm your migration settings before starting the transfer of VMs to the target cluster.\", \"planName\":\"Name\", \"planNamePlaceholder\":\"e.g. my-migration-plan\", \"migrationDetails\":\"Migration Details\", \"totalVms\":\"Total VMs\", \"vcpu\":\"vCPU\", \"memory\":\"Memory\", \"storage\":\"Storage\", \"source\":\"Source\", \"targetNamespace\":\"Target Namespace\", \"migrationMode\":\"Migration Mode\", \"coldMigration\":\"Cold Migration\", \"virtualMachines\":\"Virtual Machines\", \"warningTitle\":\"Cold Migration Warning\", \"warningMessage\":\"All source VMs will be powered off, and downtime will occur during migration. Plan your maintenance window accordingly and notify relevant stakeholders\", \"startMigration\":\"Start Migration Plan\"}), \"plan\":({\"states\":({\"error\":\"Error\", \"canceled\":\"Canceled\", \"inProgress\":\"In Progress\", \"active\":\"Succeeded\"}), \"actions\":({\"start\":\"Start\", \"restart\":\"Restart\", \"stop\":\"Stop\"})})}), \"vmImport\":({\"titles\":({\"basic\":\"Basic\", \"auth\":\"Authentication\", \"pvc\":\"Volume\", \"networking\":\"Network Mapping\", \"advanced\":\"Advanced\"}), \"labels\":({\"vmimport\":\"Virtual Machine Import\", \"vmimportSourceVMWare\":\"Source VMWare\", \"vmimportSourceOpenStack\":\"Source OpenStack\", \"vmimportSourceOVA\":\"Source OVA\"}), \"fields\":({\"sourceProvider\":\"Source Provider Type\", \"sourceCluster\":\"Source Cluster\", \"vmName\":\"VM Name\", \"targetStorageClass\":\"Target Storage Class\", \"sourceNetwork\":\"Source Network Name\", \"destNetwork\":\"Destination Network\", \"interfaceModel\":\"Interface Model\", \"folder\":\"Folder\", \"diskBus\":\"Default Disk Bus\", \"defaultInterface\":\"Default Network Interface\", \"skipPreflight\":\"Skip Preflight Checks\", \"forcePowerOff\":\"Force Power Off Source VM\", \"username\":\"Username\", \"password\":\"Password\", \"caCert\":\"CA Certificate (PEM)\", \"selectSecret\":\"Select Secret\", \"createSecret\":\"Create New Credentials\", \"useSecret\":\"Use Existing Secret\", \"none\":\"None (Public URL)\"}), \"placeholders\":({\"selectCluster\":\"Select a cluster...\", \"selectProviderFirst\":\"Select a provider type first\", \"matchSource\":\"Must match the name in the source cluster\", \"folderExample\":\"e.g. /Datacenters/DC1/vm\", \"caCert\":\"-----BEGIN CERTIFICATE----- ...\"}), \"options\":({\"useDefault\":\"Use Default\"}), \"actions\":({\"addNetwork\":\"Add Network Mapping\", \"remove\":\"Remove\"}), \"errors\":({\"rfc1123\":\"Invalid format. Name must be lowercase, alphanumeric, and cannot contain spaces (e.g. \\\"my-vm-1\\\"). If your Source VM name does not match this, you must rename it on the Source cluster first.\", \"networkMappingRequired\":\"Every Network Mapping row must have a Source and Destination selected.\"}), \"openstack\":({\"fields\":({\"endpoint\":\"Identity Service Endpoint\", \"region\":\"Region\", \"projectName\":\"Project Name\", \"domainName\":\"Domain Name\", \"retryCount\":\"Upload Image Retry Count\", \"retryDelay\":\"Upload Image Retry Delay\"}), \"placeholders\":({\"endpoint\":\"e.g. https://devstack/identity\", \"region\":\"e.g. RegionOne\", \"projectName\":\"e.g. admin\", \"domainName\":\"e.g. default\", \"retryCount\":\"Default: 30\", \"retryDelay\":\"Default: 10\"})}), \"vmware\":({\"fields\":({\"endpoint\":\"vCenter Endpoint\", \"datacenter\":\"Datacenter\"}), \"placeholders\":({\"endpoint\":\"e.g. https://vscim/sdk\", \"datacenter\":\"e.g. DC0\"}), \"tooltips\":({\"datacenter\":\"The exact name of the Datacenter object in vCenter\"})}), \"ova\":({\"fields\":({\"url\":\"URL\", \"httpTimeout\":\"HTTP Timeout\"}), \"placeholders\":({\"url\":\"e.g. https://download.example.com/images/my-vm.ova\", \"httpTimeout\":\"Default: 600\"})})}), \"rancherVcluster\":({\"accessRancher\":\"Access the Rancher Dashboard\", \"hostname\":\"Hostname\", \"rancherVersion\":\"Rancher Version\", \"password\":\"Bootstrap Password\"}), \"switchFailed\":\"{action} {name} failed!\", \"nvidiaDriverToolkit\":({\"titles\":({\"basic\":\"Controller\", \"image\":\"Image\", \"driver\":\"Driver\"}), \"image\":({\"tag\":\"Image Tag\", \"repository\":\"Image Repository\"}), \"driver\":({\"location\":\"Driver Location\"}), \"enable\":({\"title\":\"Enable NVIDIA Driver Toolkit\"}), \"parsingSpecError\":\"The field 'spec.valuesContent' has invalid format.\"}), \"usbController\":({\"titles\":({\"basic\":\"Basic\"})})}), \"loadBalancer\":({\"label\":\"Load Balancers\", \"tabs\":({\"basic\":\"Basic\", \"listeners\":\"Listeners\", \"healthCheck\":\"Health Check\", \"backendServer\":\"Backend Server Selector\"}), \"workloadType\":({\"label\":\"Workload Type\", \"options\":({\"cluster\":\"Guest Kubernetes Cluster\", \"vm\":\"Virtual Machine\"})}), \"ipam\":({\"label\":\"IPAM\", \"options\":({\"dhcp\":\"DHCP\", \"pool\":\"Pool\"})}), \"ipPool\":({\"label\":\"IP Pool\", \"options\":({\"none\":\"Auto (Select IP Pool automatically)\"})}), \"listeners\":({\"name\":({\"label\":\"Name\"}), \"protocol\":({\"label\":\"Protocol\"}), \"port\":({\"label\":\"Port\"}), \"backendPort\":({\"label\":\"Backend Port\", \"placeholder\":\"e.g. 80\"})}), \"backendServerSelector\":({\"matchingVMs\":({\"matchesSome\":\"{matched, plural,\\n =0 {Matches 0 of {total, number} virtual machines in the namespace where the load balancer is.}\\n =1 {Matches 1 of {total, number} virtual machines in the namespace where the load balancer is: \\\"{sample}\\\"}\\n other {Matches {matched, number} of {total, number} existing virtual machines in the namespace where the load balancer is, including \\\"{sample}\\\"}\\n}\"})}), \"backendServers\":({\"label\":\"Backend Servers\"}), \"healthCheck\":({\"warning\":({\"portInUse\":\"Warning, the Backend Port {port} is in use in Health Check settings. If you need to update the port, update the Health Check settings accordingly.\"})})}), \"ipPool\":({\"label\":\"IP Pools\", \"network\":({\"label\":\"Virtual Machine Network\"}), \"tabs\":({\"range\":\"Range\", \"scope\":\"Scope\", \"selector\":\"Selector\"}), \"subnet\":({\"label\":\"Subnet\"}), \"startIP\":({\"label\":\"Start IP\"}), \"endIP\":({\"label\":\"End IP\"}), \"gateway\":({\"label\":\"Gateway\"}), \"namespace\":({\"label\":\"Namespace\"}), \"project\":({\"label\":\"Project\"}), \"guestCluster\":({\"label\":\"Guest Kubernetes Cluster\"}), \"availableIP\":({\"label\":\"Available IP Count\"}), \"scope\":({\"label\":\"Scope\", \"addLabel\":\"Add Scope\"}), \"priority\":({\"label\":\"Priority\"}), \"cidr\":({\"addLabel\":\"Add CIDR\"}), \"range\":({\"addLabel\":\"Add Range\"})}), \"hostNetworkConfig\":({\"label\":\"Host Networks\", \"mode\":({\"label\":\"Mode\"}), \"tabs\":({\"mode\":\"Mode\", \"nodeSelector\":\"Node Selector\"}), \"nodeSelector\":({\"addButton\":\"Add Node Selector\"}), \"underlay\":({\"label\":\"Underlay\", \"tooltip\":\"Allow this interface to act as the underlay for VM overlay networks.\", \"conflict\":\"`{name}` host network config already has underlay enabled. Only one underlay is allowed in the cluster.\", \"noKubeovn\":({\"prefix\":\"The kubeovn-operator add-on is not enabled. Click\", \"middle\":\"here\", \"suffix\":\"to enable the add-on for overlay networking.\"})}), \"vlanID\":({\"label\":\"VLAN ID\"}), \"ipRange\":({\"label\":\"IP Range ({node})\", \"placeholder\":\"e.g. 192.168.1.10/24\"}), \"ips\":({\"nodeLabel\":\"Node\", \"label\":\"IP\", \"placeholder\":\"e.g. 192.168.1.10/24\"})}), \"service\":({\"healthCheckPort\":({\"label\":\"Health Check Port\"}), \"healthCheckSuccessThreshold\":({\"label\":\"Health Check Success Threshold\", \"description\":\"If the number of times the probe continuously detects an address successfully reaches the success threshold, then the backend server can start to forward traffic.\"}), \"healthCheckFailureThreshold\":({\"label\":\"Health Check Failure Threshold\", \"description\":\"The backend server will stop forwarding traffic if the number of health check failures reaches the failure threshold.\"}), \"healthCheckPeriod\":({\"label\":\"Health Check Period\"}), \"healthCheckTimeout\":({\"label\":\"Health Check Timeout\"}), \"healthCheckEnabled\":({\"label\":\"Health Check\"})}), \"secret\":({\"label\":\"Secrets\"}), \"sriov\":({\"label\":\"SR-IOV Network Devices\", \"nodeName\":\"Node\", \"numVFs\":\"Number Of Virtual Functions\", \"vfAddresses\":\"Virtual Functions Addresses\", \"showMore\":\"Show More\", \"parentSriov\":\"Filter By Parent SR-IOV Netork Device\", \"parentSriovGPU\":\"Filter By Parent SR-IOV GPU Device\"}), \"sriovgpu\":({\"label\":\"SR-IOV GPU Devices\", \"nodeName\":\"Node\", \"numVFs\":\"Number of Virtual Functions\", \"vfAddresses\":\"Virtual Functions Addresses\", \"vGpuDevices\":\"vGPU Devices\", \"showMore\":\"Show More\", \"parentSriov\":\"Filter By Parent SR-IOV GPU\", \"noPermission\":\"Please contact your system administrator to add Harvester add-ons first.\", \"goSetting\":({\"prefix\":\"The nvidia-driver-toolkit add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it to manage your SR-IOV GPU devices.\"})}), \"migconfiguration\":({\"label\":\"vGPU MIG Configurations\", \"status\":({\"outOfSync\":\"Out of Sync\"}), \"infoBanner\":\"To configure the MIG configuration, please disable it first and re-enable after editing the configuration.\", \"profileSpec\":\"Profile Specs\", \"profileStatus\":\"Profile Status\", \"tableHeaders\":({\"profileName\":\"Profile Name\", \"total\":\"Total\", \"vGPUID\":\"vGPU ID\", \"available\":\"Available\", \"requested\":\"Requested\"}), \"requested\":\"Requested\", \"available\":\"Available\", \"total\":\"Total\", \"vGPUID\":\"vGPU ID\", \"goSriovGPU\":({\"prefix\":\"Please enable the supported GPU devices in\", \"middle\":\"SR-IOV GPU Devices\", \"suffix\":\"page to manage the vGPU MIG configurations.\"})}), \"vgpu\":({\"label\":\"vGPU Devices\", \"noPermission\":\"Please contact system administrator to add Harvester add-ons first.\", \"detachWarning\":({\"title\":\"Cannot Disable vGPU\", \"message\":\"Please detach the device from the VM and save it first before disabling this vGPU device.\"}), \"goSetting\":({\"prefix\":\"The nvidia-driver-toolkit add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it to manage your vGPU devices.\"}), \"enableGroup\":\"Enable Group\", \"disableGroup\":\"Disable Group\", \"enable\":({\"title\":\"Select vGPU\", \"type\":\"Type\"}), \"available\":\"Available Devices\", \"compatibleNodes\":\"Compatible Nodes\", \"impossibleSelection\":\"There are no hosts with all of the selected devices.\", \"howToUseDevice\":\"Use the table below to enable vGPU devices you want to use in this virtual machine.\", \"deviceInTheSameHost\":\"You can only select devices on the same host.\"}), \"usb\":({\"label\":\"USB Devices\", \"noPermission\":\"Please contact system admin to add Harvester add-ons first\", \"goSetting\":({\"prefix\":\"The pcidevices-controller add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it to manage your USB devices.\"}), \"enableGroup\":\"Enable Group\", \"disableGroup\":\"Disable Group\", \"available\":\"Available USB Devices\", \"compatibleNodes\":\"Compatible Nodes\", \"impossibleSelection\":\"There are no hosts with all of the selected devices.\", \"howToUseDevice\":\"Use the table below to enable USB passthrough on each device you want to use in this VM.\", \"deviceInTheSameHost\":\"You can only select devices on the same host.\", \"showCompatibility\":\"Show device compatibility matrix\", \"hideCompatibility\":\"Hide device compatibility matrix\", \"claimError\":\"Error enabling passthrough on {name}\", \"unclaimError\":\"Error disabling passthrough on {name}\", \"cantUnclaim\":\"You cannot disable passthrough on a device claimed by another user.\", \"detachWarning\":({\"title\":\"Cannot Disable Passthrough\", \"message\":\"Please detach the device from the VM and save it first before disabling passthrough.\"}), \"enablePassthroughWarning\":\"Please re-enable the USB device if the device path changes in the following situations:  1) Re-plugging the USB device.  2) Rebooting the node.
An incorrect device path may cause passthrough to fail.\", \"classType\":\"Class Type\"}), \"harvesterVlanConfigMigrateDialog\":({\"targetClusterNetwork\":({\"label\":\"Target Cluster Network\", \"placeholder\":\"Choose Target Cluster Network\"})}), \"seeder\":({\"banner\":({\"enable\":({\"prefix\":\"The \\\"harvester-seeder\\\" add-on is disabled.\", \"middle\":\"Click here\", \"suffix\":\"to enable it.\"}), \"noAccess\":\"Please contact your system administrator to enable the Out-of-Band Access first.\", \"noAddon\":\"The \\\"harvester-seeder\\\" add-on does not exist, please check if it is installed.\", \"noInventory\":\"Waiting for \\\"inventories.metal.harvesterhci.io\\\" to be ready.\"}), \"inventory\":({\"host\":({\"label\":\"Host\", \"placeholder\":\"e.g. 172.16.1.1\"}), \"port\":({\"label\":\"Port\", \"placeholder\":\"e.g. 623\"}), \"insecureTLS\":({\"label\":\"Insecure TLS\"}), \"secret\":({\"label\":\"Secret\", \"create\":({\"title\":\"Add Secret\"})}), \"event\":({\"label\":\"Event\"}), \"pollingInterval\":({\"label\":\"Polling Interval\"})})})}), \"typeDescription\":({\"harvester\":\"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos and color scheme.\"}), \"advancedSettings\":({\"experimental\":\"Experimental features allow users to test and evaluate early-access functionality prior to official supported releases\", \"descriptions\":({\"harv-vlan\":\"Default Network Interface name of the VLAN network.\", \"harv-backup-target\":\"Custom backup target to store virtual machine backups.\", \"branding\":\"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos, and color scheme.\", \"harv-csi-driver-config\":\"Configure additional information for CSI drivers.\", \"harv-csi-online-expand-validation\":\"Allow online volume expansion for specific CSI drivers.\", \"harv-containerd-registry\":\"Containerd Registry Configuration to connect private registries.\", \"harv-log-level\":\"Configure Harvester server log level. Defaults to Info.\", \"harv-server-version\":\"Harvester server version.\", \"harv-upgrade-checker-enabled\":\"Specifies whether to enable Harvester upgrade check or not. Default is True.\", \"harv-upgrade-checker-url\":\"Default Harvester upgrade check url. Only used when the upgrade-checker-enabled is equal to True.\", \"harv-ui-source\":\"Configure how to load the UI source. The `External` option is used to load the UI from a ui-index URL, while the `Bundled` option loads the UI from the local Harvester server.\", \"harv-ui-index\":\"HTML index location for the UI.\", \"harv-cluster-registration-url\":\"Registration URL for multi-cluster management.\", \"harv-http-proxy\":\"HTTP proxy for Harvester to access external services.\", \"harv-additional-ca\":\"Custom CA root certificates for TLS validation.\", \"harv-overcommit-config\":\"Resource overcommit configuration.\", \"harv-support-bundle-timeout\":\"Support bundle timeout configuration in minutes, use 0 to disable the timeout.\", \"harv-support-bundle-file-name\":\"Support bundle file name configuration.\", \"harv-support-bundle-expiration\":\"Support bundle expiration configuration in minutes.\", \"harv-support-bundle-node-collection-timeout\":\"Support bundle node collection timeout configuration in minutes.\", \"harv-vm-force-reset-policy\":\"Configuration for the force-reset action when a virtual machine is stuck on a node that is down.\", \"harv-ssl-parameters\":\"Custom SSL Parameters for TLS validation.\", \"harv-storage-network\":\"Longhorn storage-network setting.\", \"harv-rwx-network\":\"Configure RWX network behavior for shared or dedicated storage network usage.\", \"harv-support-bundle-namespaces\":\"Select additional namespaces to include in the support bundle.\", \"harv-auto-disk-provision-paths\":\"Specify the disks(using glob pattern) that Harvester will automatically add as virtual machine storage.\", \"harv-support-bundle-image\":\"Support bundle image configuration. Find different versions in rancher/support-bundle-kit.\", \"harv-release-download-url\":\"This setting allows you to configure the upgrade release download URL address. Harvester will get the ISO URL and checksum value from the ($URL/$VERSION/version.yaml) file hosted by the configured URL.\", \"harv-default-vm-termination-grace-period-seconds\":\"Configure the virtual machine termination grace period for virtual machine stop.\", \"harv-ntp-servers\":\"Configure NTP server. You can configure multiple IPv4 addresses or host addresses.\", \"harv-auto-rotate-rke2-certs\":\"The certificate rotation mechanism relies on Rancher. Harvester will automatically update certificates generation to trigger rotation.\", \"harv-kubeconfig-default-token-ttl-minutes\":\"TTL (in minutes) applied on Harvester administration kubeconfig files. Default is 0, which means to never expire.\", \"harv-longhorn-v2-data-engine-enabled\":\"Enable the Longhorn V2 data engine. Default is false.
Changing this setting will restart RKE2 on all nodes. This will not affect running VM workloads.
If you see \\\"not enough hugepages-2Mi capacity\\\" errors when enabling this setting, wait a minute for the error to clear. If the error remains, reboot the affected node.
\", \"harv-longhorn-v2-data-engine-hugepage-enabled\":\"Enable hugepages when using the Longhorn V2 data engine. Default is true. Disabling hugepages reduces memory pressure on low-spec nodes and increases deployment flexibility. However, performance may be lower compared to running with hugepages.\", \"harv-longhorn-v2-data-engine-memory-size\":\"Configure the amount of memory allocated to the SPDK target daemon when using the Longhorn V2 data engine. Default is 2048 MiB.\", \"harv-additional-guest-memory-overhead-ratio\":\"The ratio for kubevirt to adjust the VM overhead memory. The value could be zero, empty value or floating number between 1.0 and 10.0, default to 1.5.\", \"harv-upgrade-config\":\"Configure image preloading and VM restore options for upgrades. See related fields in settings/upgrade-config\", \"harv-vm-migration-network\":\"Segregated network for VM migration traffic.\", \"harv-rancher-cluster\":\"Configure Rancher cluster integration settings for guest cluster management.\", \"harv-max-hotplug-ratio\":\"The ratio for kubevirt to limit the maximum CPU and memory that can be hotplugged to a VM. The value could be an integer between 1 and 20, default to 4.\", \"harv-kubevirt-migration\":\"Configure cluster-wide KubeVirt live migration parameters.\", \"harv-instance-manager-resources\":\"Configure resource percentage reservations for Longhorn instance manager V1 and V2. Valid instance manager CPU range between 0 - 40.\", \"harv-cluster-pod-security-standard\":\"Enforce Kubernetes Pod Security Standards (PSS) at the cluster level.\"})}), \"typeLabel\":({\"kubevirt.io.virtualmachine\":\"{count, plural,\\n one { Virtual Machine }\\n other { Virtual Machines }\\n}\", \"harvesterhci.io.virtualmachineimage\":\"{count, plural,\\n one { Image }\\n other { Images }\\n}\", \"harvesterhci.io.keypair\":\"{count, plural,\\n one { SSH Key }\\n other { SSH Keys }\\n}\", \"harvesterhci.io.host\":\"{count, plural,\\n one { Host }\\n other { Hosts }\\n}\", \"harvesterhci.io.networkattachmentdefinition\":\"{count, plural,\\n one { Virtual Machine Network }\\n other { Virtual Machine Networks }\\n}\", \"harvesterhci.io.volume\":\"{count, plural,\\n one { Volume }\\n other { Volumes }\\n}\", \"harvesterhci.io.user\":\"{count, plural,\\n one { User }\\n other { Users }\\n}\", \"harvesterhci.io.setting\":\"{count, plural,\\n one { Setting }\\n other { Settings }\\n}\", \"harvesterhci.io.virtualmachinetemplateversion\":\"{count, plural,\\n one { Template }\\n other { Templates }\\n}\", \"harvesterhci.io.schedulevmbackup\":\"{count, plural,\\n one { Virtual Machine Schedule }\\n other { Virtual Machine Schedules }\\n}\", \"harvesterhci.io.virtualmachinebackup\":\"{count, plural,\\n one { Virtual Machine Backup }\\n other { Virtual Machine Backups }\\n}\", \"kubeovn.io.vpc\":\"{count, plural,\\n one { Virtual Private Cloud }\\n other { Virtual Private Clouds }\\n}\", \"kubeovn.io.vlan\":\"{count, plural,\\n one { VLAN Network }\\n other { VLAN Networks }\\n}\", \"kubeovn.io.providernetwork\":\"{count, plural,\\n one { Provider Network }\\n other { Provider Networks }\\n}\", \"kubeovn.io.vpcnatgateway\":\"{count, plural,\\n one { NAT Gateway }\\n other { NAT Gateways }\\n}\", \"kubeovn.io.iptablessnatrule\":\"{count, plural,\\n one { Source Rule }\\n other { Source Rules }\\n}\", \"kubeovn.io.iptablesdnatrule\":\"{count, plural,\\n one { Destination Rule }\\n other { Destination Rules }\\n}\", \"kubeovn.io.iptableseip\":\"{count, plural,\\n one { External IP }\\n other { External IPs }\\n}\", \"networking.k8s.io.networkpolicy\":\"{count, plural,\\n one { Network Policy }\\n other { Network Policies }\\n}\", \"harvesterhci.io.cloudtemplate\":\"{count, plural,\\n one { Cloud Configuration Template }\\n other { Cloud Configuration Templates }\\n}\", \"harvesterhci.io.volumesnapshot\":\"{count, plural,\\n one { Volume Snapshot }\\n other { Volume Snapshots }\\n}\", \"harvesterhci.io.vmsnapshot\":\"{count, plural,\\n one { Virtual Machine Snapshot }\\n other { Virtual Machine Snapshots }\\n}\", \"network.harvesterhci.io.vlanconfig\":\"{count, plural,\\n one { Network Configuration }\\n other { Network Configurations }\\n}\", \"harvesterhci.io.monitoring.alertmanagerconfig\":\"{count, plural,\\n one { Alertmanager Configuration }\\n other { Alertmanager Configurations }\\n}\", \"harvesterhci.io.logging.clusterflow\":\"{count, plural,\\n one { Cluster Flow }\\n other { Cluster Flows }\\n}\", \"harvesterhci.io.logging.clusteroutput\":\"{count, plural,\\n one { Cluster Output }\\n other { Cluster Outputs }\\n}\", \"harvesterhci.io.logging.flow\":\"{count, plural,\\n one { Flow }\\n other { Flows }\\n}\", \"harvesterhci.io.logging.output\":\"{count, plural,\\n one { Output }\\n other { Outputs }\\n}\", \"harvesterhci.io.storage\":\"{count, plural,\\n one { Storage Class }\\n other { Storage Classes }\\n}\", \"devices.harvesterhci.io.pcidevice\":\"{count, plural,\\n one { PCI Device }\\n other { PCI Devices }\\n}\", \"network.harvesterhci.io.clusternetwork\":\"{count, plural,\\n one { Cluster Network }\\n other { Cluster Networks }\\n}\", \"network.harvesterhci.io.hostnetworkconfig\":\"{count, plural,\\n one { Host Network }\\n other { Host Networks }\\n}\", \"harvesterhci.io.addon\":\"{count, plural,\\n one { Add-on }\\n other { Add-ons }\\n}\", \"devices.harvesterhci.io.sriovnetworkdevice\":\"{count, plural,\\n one { SR-IOV Network Device }\\n other { SR-IOV Network Devices }\\n}\", \"devices.harvesterhci.io.sriovgpudevice\":\"{count, plural,\\n one { SR-IOV GPU Device }\\n other { SR-IOV GPU Devices }\\n}\", \"devices.harvesterhci.io.vgpudevice\":\"{count, plural,\\n one { vGPU Device }\\n other { vGPU Devices }\\n}\", \"devices.harvesterhci.io.migconfiguration\":\"{count, plural,\\n one { vGPU MIG Configuration }\\n other { vGPU MIG Configurations }\\n}\", \"harvesterhci.io.secret\":\"{count, plural,\\n one { Secret }\\n other { Secrets }\\n}\", \"harvesterhci.io.blockdevice\":\"{count, plural,\\n one { Disk }\\n other { Disks }\\n}\", \"loadbalancer.harvesterhci.io.loadbalancer\":\"{count, plural,\\n one { Load Balancer }\\n other { Load Balancers }\\n}\", \"loadbalancer.harvesterhci.io.ippool\":\"{count, plural,\\n one { IP Pool }\\n other { IP Pools }\\n}\", \"migration.harvesterhci.io.openstacksource\":\"{count, plural,\\n one { OpenStack Source }\\n other { OpenStack Sources }\\n}\", \"migration.harvesterhci.io.vmwaresource\":\"{count, plural,\\n one { VMware Source }\\n other { VMware Sources }\\n}\", \"migration.harvesterhci.io.ovasource\":\"{count, plural,\\n one { OVA Source }\\n other { OVA Sources }\\n}\", \"migration.harvesterhci.io.virtualmachineimport\":\"{count, plural,\\n one { Virtual Machine Import }\\n other { Virtual Machine Imports }\\n}\", \"forklift.konveyor.io.provider\":\"{count, plural,\\n one { Provider }\\n other { Providers }\\n}\", \"forklift.konveyor.io.networkmap\":\"{count, plural,\\n one { Network Map }\\n other { Network Maps }\\n}\", \"forklift.konveyor.io.storagemap\":\"{count, plural,\\n one { Storage Map }\\n other { Storage Maps }\\n}\", \"forklift.konveyor.io.plan\":\"{count, plural,\\n one { Migration Plan }\\n other { Migration Plans }\\n}\", \"forklift.konveyor.io.migration\":\"{count, plural,\\n one { Migration }\\n other { Migrations }\\n}\"})})];\nmodule.exports = doc.length <= 1 ? doc[0] : doc;"],"names":["doc","module","exports","length"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"harvester-1.9.0-rc1.umd.min.37.js","mappings":"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","sources":["webpack://harvester-1.9.0-rc1/./l10n/en-us.yaml"],"sourcesContent":["const doc = [({\"wizard\":({\"create\":\"Create\", \"next\":\"Proceed\", \"previous\":\"Back\"}), \"generic\":({\"tip\":\"Tip\", \"resourceExternalLinkTips\":\"External Link\", \"namespace\":\"Namespace\", \"notReady\":\"Not Ready\", \"labels\":\"Labels\", \"inProgress\":\"In Progress\", \"basic\":\"Basic\", \"loading\":\"Loading...\", \"none\":\"None\", \"duration\":({\"infinite\":\"Infinite\", \"1s\":\"1 second\", \"5s\":\"5 seconds\", \"10s\":\"10 seconds\", \"30s\":\"30 seconds\", \"1m\":\"1 minute\", \"3m\":\"3 minutes\", \"5m\":\"5 minutes\"})}), \"unsupported\":({\"serverVersion\":\"Current version: {serverVersion}\", \"description\":\"Harvester ui only supports Harvester cluster version greater or equal to 1.3.0.\", \"learnMore\":\"Learn more about Harvester from the Harvester Web Site or read the Harvester Docs\"}), \"nav\":({\"group\":({\"networks\":\"Networks\", \"backupAndSnapshot\":\"Backup and Snapshots\", \"Monitoring\":\"Monitoring\", \"Logging\":\"Logging\", \"Monitoring and Logging\":\"Monitoring and Logging\", \"vmimport\":\"Virtual Machine Imports\", \"vmMigration\":\"Virtual Machine Migration\", \"Configurations\":\"Configurations\"})}), \"resourceTable\":({\"groupBy\":({\"device\":\"Group by Device\"})}), \"validation\":({\"arrayCountRequired\":\"At least {count} {key} {count, plural, =1 {is} other {are}} required, and {key} can not be empty.\"}), \"members\":({\"clusterMemebership\":\"Cluster Membership\", \"projectMembership\":\"Project Membership\"}), \"asyncButton\":({\"createAndStart\":({\"action\":\"Create and Start\"}), \"restart\":({\"action\":\"Save and Restart\", \"success\":\"Restarted\", \"waiting\":\"Restarting…\"})}), \"dialog\":({\"confirmExecution\":({\"title\":\"Are you sure?\", \"andOthers\":\"{count, plural,\\n=0 {}\\n=1 { and one other }\\nother { and {count} other }\\n}\", \"protip\":\"Tip: Hold the {alternateLabel} key while clicking action to bypass this confirmation\", \"stop\":({\"message\":\"Are you sure you want to stop the {type} {names}?\"}), \"pause\":({\"message\":\"Are you sure you want to pause the {type} {names}?\"}), \"restart\":({\"message\":\"Are you sure you want to restart the {type} {names}?\"}), \"softreboot\":({\"message\":\"Are you sure you want to soft reboot the {type} {names}?\"})}), \"promptRemove\":({\"title\":\"Delete {type}\", \"warningMessage\":\"Deleting the selected {type} permanently removes all resources on {thisOrThese} {type}. This action is irreversible. Do you want to continue?\", \"confirmName\":\"Type {nameToMatch} to delete the {type}:\", \"protip\":\"Tip: Hold the {alternateLabel} key while clicking Delete to bypass the confirmation step.\"})}), \"harvester\":({\"branding\":({\"logos\":({\"tip\":\"Upload a logo to replace the Harvester logo in the top-level navigation header. Image height should be 21 pixels with a max width of 200 pixels. Max file size is 20KB. Accepted formats: JPEG, PNG, SVG.\"}), \"favicon\":({\"tip\":\"Upload an icon to replace the Harvester favicon in the browser tab. Max file size is 20KB\"})}), \"productLabel\":\"Harvester\", \"modal\":({\"backup\":({\"success\":\"Backup { backUpName } has been initiated.\", \"addBackup\":\"Add Backup\", \"fileSystemFreezeDeadline\":({\"label\":\"File System Freeze Deadline\"})}), \"quota\":({\"editVMQuota\":\"Edit VM Quota\", \"editQuota\":\"Edit Quota\", \"bannerMessage\":\"Set to empty string or 0 to remove total snapshot size quota.\"}), \"restore\":({\"success\":\"Restore { name } created successfully.\", \"title\":\"Backup and Restore\", \"selectBackup\":\"Select Backup\", \"message\":({\"backup\":\"Please select the backup that needs to be restored.\"})}), \"createTemplate\":({\"title\":\"Generate Template\", \"name\":\"Name\", \"description\":\"Description\", \"message\":({\"tip\":\"Please enter a template name!\", \"success\":\"Template { templateName } created successfully.\", \"failed\":\"Failed generated template!\"})}), \"schedule\":({\"title\":\"Create Schedule\", \"message\":({\"tip\":\"Please enter a schedule name!\", \"success\":\"Schedule { name } created successfully.\", \"failed\":\"Failed create schedule!\"})}), \"cloneVM\":({\"title\":\"Clone Virtual Machine\", \"name\":\"New Virtual Machine Name\", \"type\":\"Clone volume data\", \"action\":({\"create\":\"Create\", \"clone\":\"Clone\"}), \"message\":({\"tip\":\"Please enter a virtual machine name!\", \"success\":\"Virtual machine { name } cloned successfully.\", \"failed\":\"Failed clone virtual machine!\"})}), \"osImage\":({\"title\":\"Delete Image\", \"message\":\"Are you sure you want to delete the image { name } ?\"}), \"downloadImage\":({\"title\":\"Download Image\", \"banner\":\"This action takes a while depending on the image size ({ size }). Please be patient.\", \"startMessage\":\"The download process will auto start once the conversion is complete.\", \"download\":\"Download\"}), \"exportImage\":({\"title\":\"Export to Image\", \"name\":\"Name\", \"namespace\":\"Namespace\", \"message\":({\"success\":\"Image { name } created successfully.\"})}), \"storageMigration\":({\"title\":\"Storage Migration\", \"fields\":({\"sourceVolume\":({\"label\":\"Source Volume\", \"placeholder\":\"Select a source volume\"}), \"targetVolume\":({\"label\":\"Target Volume\", \"placeholder\":\"Select a target volume\"})})}), \"dataMigration\":({\"title\":\"Data Migration\", \"fields\":({\"targetVolumeName\":({\"label\":\"Target Volume Name\", \"placeholder\":\"Enter a target volume name\"}), \"targetStorageClassName\":({\"label\":\"Target Storage Class\", \"placeholder\":\"Select a storage class\"})})}), \"migration\":({\"failedMessage\":\"Latest migration failed!\", \"title\":\"Migration\", \"vmMigrationTitle\":\"{count, plural, one {Migrating # VM} other {Migrating # VMs}}\", \"selectedVMs\":\"The following virtual machine(s) will be migrated to the target node\", \"unknownNode\":\"(unknown node)\", \"alreadyOnTarget\":\"Already on Target\", \"fields\":({\"nodeName\":({\"label\":\"Target Node\", \"placeholder\":\"Choose Target Node\"})})}), \"ejectCDROM\":({\"title\":\"Eject CD-ROM\", \"warnTip\":\"Eject volume will restart the virtual machine.\", \"operationTip\":\"Select the volume you want to delete:\", \"delete\":\"Delete\"}), \"bundle\":({\"title\":\"Generate a Support Bundle\", \"titleDescription\":\"Collect system-related logs in Harvester to assist with troubleshooting and support.\", \"tip\":\"Each field below specifies an aspect of the support bundle. For detailed explanations, please refer to the documentation.\", \"url\":\"Issue URL\", \"description\":\"Description\", \"namespaces\":({\"label\":\"Namespaces\", \"tooltip\":\"Select additional namespaces to include in the support bundle. See docs support-bundle-namespaces for detail.\", \"selectAll\":\"Select All\", \"unselectAll\":\"Unselect All\"}), \"timeout\":({\"label\":\"Timeout\", \"tooltip\":\"Minutes allows for completion of the support bundle generation process. See docs support-bundle-timeout for detail.\"}), \"expiration\":({\"label\":\"Expiration\", \"tooltip\":\"Minutes before deleting packaged but not downloaded support bundle. See docs support-bundle-expiration for detail.\"}), \"nodeTimeout\":({\"label\":\"Node Collection Timeout\", \"tooltip\":\"Minutes allowed for collecting logs/configurations on nodes. See docs support-bundle-node-collection-timeout for detail.\"})}), \"hotplugVolume\":({\"success\":\"Volume { diskName } is mounted to the virtual machine { vm }.\", \"title\":\"Add Volume\"}), \"hotplugNic\":({\"success\":\"The settings have been saved, but the network interface {interfaceName} will be attached only after the virtual machine is migrated.\", \"title\":\"Add Network Interface\", \"vmNetwork\":\"Virtual Machine Network\", \"macAddress\":\"MAC Address\", \"macAddressTooltip\":\"If left blank, the MAC address will be automatically generated.\"}), \"insertCdRomVolume\":({\"success\":\"{ imageName } is inserted into device { deviceName }.\", \"title\":\"Insert Image\", \"image\":\"Image\", \"actionLabel\":\"Insert Image\"}), \"cpuMemoryHotplug\":({\"success\":\"CPU and Memory are updated to the virtual machine { vm }.\", \"title\":\"Edit CPU and Memory\", \"maxResourcesMessage\":\"You can increase the CPU to maximum { maxCpu }C and memory to maximum { maxMemory }.\"}), \"snapshot\":({\"title\":\"Take Snapshot\", \"name\":\"Name\", \"message\":({\"success\":\"Take Snapshot { name } successfully.\"})}), \"volumeClone\":({\"title\":\"Clone Volume\", \"name\":\"Name\", \"message\":({\"success\":\"New Volume { name } cloned successfully.\"})}), \"restoreSnapshot\":({\"title\":\"Restore Snapshot\", \"name\":\"New Volume Name\", \"success\":\"New Volume { name } restored successfully.\"}), \"vmSnapshot\":({\"title\":\"Take Virtual Machine Snapshot\", \"name\":\"Name\", \"success\":\"Take virtual machine Snapshot { name } successfully.\", \"fileSystemFreezeDeadline\":({\"label\":\"File System Freeze Deadline\"})}), \"restart\":({\"title\":\"Restart Virtual Machine\", \"tip\":\"Restart the virtual machine for configuration changes to take effect.\", \"cancel\":\"Save\"})}), \"notification\":({\"title\":({\"succeed\":\"Succeed\", \"info\":\"Info\", \"warning\":\"Warning\", \"error\":\"Error\"}), \"restartRequired\":({\"title\":\"{count} {count, plural, =1 {Virtual Machine is} other {Virtual Machines are}} Pending Restart\", \"message\":\"Please restart { vmNames } to apply updated configurations\"})}), \"action\":({\"createVM\":\"Create Virtual Machine\", \"start\":\"Start\", \"restart\":\"Restart\", \"softreboot\":\"Soft Reboot\", \"stop\":\"Stop\", \"pause\":\"Pause\", \"deepClone\":\"Clone\", \"shallowClone\":\"Clone Template\", \"unpause\":\"Unpause\", \"encryptImage\":\"Encrypt Image\", \"decryptImage\":\"Decrypt Image\", \"ejectCDROM\":\"Eject CD-ROM\", \"editVMQuota\":\"Edit Virtual Machine Quota\", \"launchFormTemplate\":\"Launch instance from template\", \"modifyTemplate\":\"Modify template (Create new version)\", \"setDefaultVersion\":\"Set default version\", \"addTemplateVersion\":\"Add template version\", \"backup\":\"Take Backup\", \"createSchedule\":\"Create Schedule\", \"restore\":\"Restore\", \"restoreNewVM\":\"Restore New\", \"resumeSchedule\":\"Resume\", \"suspendSchedule\":\"Suspend\", \"restoreExistingVM\":\"Replace Existing\", \"migrate\":\"Migrate\", \"vmMigrate\":\"Virtual Machine Migration\", \"cpuAndMemoryHotplug\":\"Edit CPU and Memory\", \"abortMigration\":\"Abort Migration\", \"storageMigration\":\"Storage Migration\", \"cancelStorageMigration\":\"Cancel Storage Migration\", \"dataMigration\":\"Data Migration\", \"createTemplate\":\"Generate Template\", \"enableMaintenance\":\"Enable Maintenance Mode\", \"disableMaintenance\":\"Disable Maintenance Mode\", \"enableCPUManager\":\"Enable CPU Manager\", \"disableCPUManager\":\"Disable CPU Manager\", \"cordon\":\"Cordon\", \"uncordon\":\"Uncordon\", \"addHotplugVolume\":\"Add Volume\", \"addHotplugNic\":\"Hotplug Network Interface\", \"exportImage\":\"Export Image\", \"viewlogs\":\"View Logs\", \"cancelExpand\":\"Cancel Expand\", \"snapshot\":\"Take Snapshot\", \"pvcClone\":\"Clone Volume\", \"vmSnapshot\":\"Take Virtual Machine Snapshot\", \"shutdown\":\"Shut Down\", \"powerOn\":\"Power On\", \"reboot\":\"Reboot\", \"reconnect\":\"Reconnect\", \"forceStop\":\"Force Stop\"}), \"formatters\":({\"hardwareResourceGauge\":({\"allocated\":\"Allocated\", \"consumption\":\"{useful} of {total} {units} {suffix}\", \"cores\":\"CPU\", \"pods\":\"Pods\", \"ram\":\"Memory\", \"used\":\"Used\", \"reserved\":\"Reserved\", \"units\":({\"cores\":\"{count, plural,\\n=1 {core}\\nother {cores}}\"})}), \"harvesterIpAddress\":({\"customIpTooltip\":\"Custom IP (set via annotation)\"})}), \"tableHeaders\":({\"hostNetworkConfig\":({\"underlay\":\"Underlay\", \"underlayTooltip\":\"Allow this interface to act as the underlay for VM overlay networks.\", \"vlanID\":\"VLAN ID\", \"mode\":\"Mode\", \"clusterNetwork\":\"Cluster Network\"}), \"imageEncryption\":\"Encryption\", \"size\":\"Size\", \"virtualSize\":\"Virtual Size\", \"progress\":\"Progress\", \"message\":\"Message\", \"phase\":\"Phase\", \"attachedVM\":\"Attached Virtual Machine\", \"cpuManager\":\"CPU Manager\", \"routeConnectivityTooltip\":\"Connectivity between the VM network and the management network, which the Harvester nodes are connected to.\", \"fingerprint\":\"Fingerprint\", \"value\":\"Value\", \"actions\":\"Actions\", \"readyToUse\":\"Ready To Use\", \"backupTarget\":\"Backup Target\", \"targetVm\":\"Target Virtual Machine\", \"cronExpression\":\"Cron Expression\", \"retain\":\"Retain\", \"scheduleType\":\"Type\", \"configuredProfiles\":\"Configured Profiles\", \"maxFailure\":\"Max Failure\", \"sourceVm\":\"Source Virtual Machine\", \"vmSchedule\":\"Virtual Machine Schedule\", \"hostIp\":\"Host IP\", \"vm\":({\"ipAddress\":\"IP Address\", \"node\":\"Node\", \"defaultVersion\":\"Default Version\"}), \"network\":({\"type\":\"Type\", \"vlan\":\"VLAN ID\"}), \"snapshotTargetVolume\":\"Original Volume\", \"volumeSnapshotCounts\":\"Snapshot Counts\", \"networkState\":\"Network State\", \"totalSnapshotQuota\":\"Total Snapshot Quota\", \"storageClass\":\"Storage Class\", \"restore\":\"Restore\", \"vmImportSourceVm\":\"Source VM\", \"vmImportSourceCluster\":\"Source Cluster\", \"vmImportStatus\":\"Import Status\", \"vmImportSourceVDatacenter\":\"Datacenter\", \"vmImportSourceVEndpoint\":\"Endpoint\", \"vmImportSourceVClusterStatus\":\"Cluster Status\", \"vmImportSourceORegion\":\"Region\", \"vmImportSourceOEndpoint\":\"Endpoint\", \"vmImportSourceOClusterStatus\":\"Cluster Status\", \"vmImportSourceOVAUrl\":\"URL\", \"vmImportSourceOVAStatus\":\"Status\", \"v4ip\":\"V4 IP\", \"v6ip\":\"V6 IP\", \"eipName\":\"EIP Name\", \"vmMigrationProviderType\":\"Type\", \"vmMigrationProviderUrl\":\"URL\", \"vmMigrationMapSourceProvider\":\"Source Provider\", \"vmMigrationMapDestProvider\":\"Destination Provider\", \"vmMigrationPlanTargetNs\":\"Target Namespace\", \"vmMigrationPlanVmCount\":\"VM Count\", \"vmMigrationMigrationPlan\":\"Plan\"}), \"tab\":({\"volume\":\"Volumes\", \"network\":\"Networks\", \"advanced\":\"Advanced Options\", \"accessCredentials\":\"Access Credentials\", \"pciDevices\":\"PCI Devices\", \"vGpuDevices\":\"vGPU Devices\", \"usbDevices\":\"USB Devices\", \"vmScheduling\":\"Virtual Machine Scheduling\", \"quotas\":\"Quotas\", \"snapshots\":\"Snapshots\", \"instanceLabel\":\"Instance Labels\", \"annotations\":\"Annotations\", \"filesystem\":\"Filesystem Volume\"}), \"fields\":({\"version\":\"Version\", \"name\":\"Name\", \"type\":\"Type\", \"image\":\"Image\", \"size\":\"Size\", \"volume\":\"Volume\", \"network\":\"Network\", \"model\":\"Model\", \"macAddress\":\"MAC address\", \"staticIp\":\"Static IP\", \"port\":\"Port\", \"protocol\":\"Protocol\", \"remove\":\"Remove\", \"PhysicalNic\":\"Physical NIC\", \"cpu\":\"CPU\", \"memory\":\"Memory\", \"virtualName\":\"Virtual machine name\", \"promiscuous\":\"Promiscuous\", \"ipv4Address\":\"IPv4 address\", \"filterLabels\":\"Filter labels\", \"filterSchedule\":\"Filter schedule\", \"storageClass\":\"Storage class\", \"dockerImage\":\"Docker image\"}), \"pci\":({\"available\":\"Available Devices\", \"compatibleNodes\":\"Compatible Nodes\", \"impossibleSelection\":\"There are no hosts with all of the selected devices.\", \"howToUseDeviceInVMCreation\":({\"prefix\":\"Use the table below to enable PCI passthrough on each device you want to use in this virtual machine. For vGPU devices, please enable them on the\", \"middle\":\"vGPU Devices\", \"suffix\":\"page first.\"}), \"howToUseDevice\":({\"prefix\":\"Select the device in the table to enable PCI passthrough. For vGPU devices, please enable them on the\", \"middle\":\"vGPU Devices\", \"suffix\":\"page.\"}), \"deviceInTheSameHost\":\"You can only select devices on the same host.\", \"showCompatibility\":\"Show device compatibility matrix\", \"hideCompatibility\":\"Hide device compatibility matrix\", \"claimError\":\"Error enabling passthrough on {name}\", \"unclaimError\":\"Error disabling passthrough on {name}\", \"cantUnclaim\":\"You cannot disable passthrough on a device claimed by another user.\", \"detachWarning\":({\"title\":\"Cannot Disable Passthrough\", \"message\":\"Please detach the device from the VM and save it first before disabling passthrough.\"}), \"enableGroup\":\"Enable Group\", \"disableGroup\":\"Disable Group\", \"labelRequired\":\"This rule should not be manually altered: it ensures that the PCI devices selected for this virtual machine are available on the virtual machine's host.\", \"goSetting\":({\"prefix\":\"The pcidevices-controller add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable the add-on to successfully manage your PCI devices.\"}), \"noPCIPermission\":\"Please contact your system administrator to enable the PCI devices first.\", \"enablePassthroughWarning\":\"Please be careful not to use host-owned PCI devices (e.g., management and VLAN NICs). Incorrect device allocation may cause damage to your cluster, including node failure.\", \"disableResourcePooling\":\"Disable Resource Pooling\", \"disableResourcePoolingDescription\":\"Assigns this device a unique resource name so it can be pinned to a specific VM, instead of sharing the pool with other identical devices.\"}), \"devices\":({\"matrixHostName\":\"Host Name\", \"matrixDeviceClaimName\":\"Device Claim Name\"}), \"generic\":({\"close\":\"Close\", \"open\":\"Open\", \"showMore\":\"Show More\", \"hideMore\":\"Hide More\", \"memory\":\"Memory\", \"cpu\":\"CPU\", \"storage\":\"Storage\", \"noFileChosen\":\"No file chosen\", \"noSchema\":\"Can not find the custom resource definition: {schema}.\"}), \"validation\":({\"custom\":({\"tooLongName\":\"\\\"Name\\\" cannot be more than {max} characters.\"}), \"generic\":({\"hasDelete\":\"{type} \\\"{name}\\\" has been deleted.\", \"maxLength\":\"\\\"{key}\\\" cannot be more than {max} characters\", \"tabError\":\"{prefix}: {message}\", \"maximumSize\":\"Exceed maximum size {max}!\", \"regex\":\"Invalid {lowerType} \\\"{name}\\\": {upperType} must match the regex \\\"{regex}\\\"\"}), \"vm\":({\"name\":\"name is required!\", \"memory\":\"\\\"Memory\\\" is required!\", \"duplicatedName\":\"duplicate {type} name: \\\"{name}\\\"\", \"network\":({\"macFormat\":\"Invalid MAC address format.\", \"upperType\":\"Network name\", \"lowerType\":\"network name\"}), \"volume\":({\"upperType\":\"Volume name\", \"lowerType\":\"volume name\", \"needAtLeastOneBootable\":\"At least one bootable volume is required!\"})}), \"image\":({\"ruleTip\":\"The URL you have entered ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw.\", \"ruleFileTip\":\"The file you have chosen ends in an extension that we do not support. We only accept image files that end in .img, .iso, .qcow, .qcow2, .raw.\"}), \"hash\":({\"sha512\":\"Invalid SHA512 checksum.\"}), \"subnet\":({\"excludeIps\":\"Exclude IPs cannot be empty. Please remove or fill in the exclude IPs.\", \"aclEmptyError\":\"The fields in subnet access control list rule can not be empty.\"})}), \"dashboard\":({\"label\":\"Dashboard\", \"header\":\"Harvester Cluster: {cluster}\", \"hardwareResourceGauge\":({\"cpu\":\"CPU\", \"memory\":\"Memory\", \"storage\":\"Storage\", \"allocated\":\"Allocated\"}), \"sections\":({\"events\":({\"label\":\"Events\"}), \"vmMetrics\":({\"label\":\"Virtual Machine Metrics\"})}), \"version\":\"Version\"}), \"host\":({\"console\":\"Console\", \"label\":\"Hosts\", \"inconsistentIP\":\"Host IP is inconsistent, current IP: { currentIP }, initial IP: { initIP }\", \"noConsoleUrl\":\"Console URL not specified\", \"promote\":({\"none\":\" \", \"running\":\"Promoting\", \"failed\":\"Promote failed\", \"unknown\":\"Promote halted\", \"promoteRestart\":\"Restarting\", \"promoteSucceed\":\"Promote completed\"}), \"tabs\":({\"network\":\"Network\", \"overview\":\"Overview\", \"basics\":\"Basics\", \"instance\":\"Virtual Machines\", \"monitor\":\"Monitor Data\", \"storage\":\"Storage\", \"labels\":\"Labels\", \"ksmtuned\":\"Ksmtuned\", \"hugepages\":\"Hugepages\", \"seeder\":\"Out-of-band Access\"}), \"detail\":({\"kvm\":({\"disableMessage\":\"Hardware-based virtualization is disabled or not supported. Hardware-based virtualization must be enabled before creating any virtual machines.\"}), \"title\":({\"network\":\"Network Configuration\"}), \"hostIP\":\"Host IP\", \"role\":\"Role\", \"os\":\"Operating System\", \"create\":\"Creation Time\", \"update\":\"Last Update Time\", \"customName\":\"Custom Name\", \"consoleUrl\":\"Console URL\", \"more\":\"More Information\", \"uuid\":\"UUID\", \"containerRuntime\":\"Container Runtime\", \"kernel\":\"Kernel\", \"management\":\"Management Node\", \"compute\":\"Compute Node\", \"storage\":\"Storage\", \"nic\":\"Physical NIC\", \"notRecommended\":\"Not recommended\", \"networkType\":\"Type\", \"manufacturer\":\"Manufacturer\", \"serialNumber\":\"Serial Number\", \"model\":\"Model\", \"etcd\":\"Witness Node\", \"cpuManager\":\"CPU Manager\"}), \"enableMaintenance\":({\"title\":\"Enable Maintenance Mode\", \"protip\":\"The operation will migrate all virtual machines on this node to other nodes.\", \"shutDownVMs\":\"Check Force option to shutdown virtual machines which cannot be migrated in live mode.\", \"force\":\"Force\"}), \"cordon\":({\"title\":\"Cordon\", \"protip\":\"This operation will mark the node { node } as unschedulable.\"}), \"ksmtuned\":({\"run\":\"Run Strategy\", \"configure\":\"Configure\", \"mode\":\"Mode\", \"modeLink\":\"Mode \", \"thresCoef\":\"Threshold Coefficient\", \"enableMergeNodes\":\"Enable merging across nodes\", \"enable\":\"Enable\", \"disable\":\"Disable\", \"ksmStatus\":\"KSM Status\", \"modeOption\":({\"standard\":\"Standard\", \"high\":\"High-performance\", \"customized\":\"Customized\"}), \"parameters\":({\"title\":\"Ksmtuned Parameters\", \"boost\":\"Boost\", \"decay\":\"Decay\", \"sleepMsec\":\"Sleep Time (Millisecond)\", \"minPages\":\"Minimum Pages\", \"maxPages\":\"Maximum Pages\", \"description\":({\"boost\":\"The number of scanned pages is incremented each time if the available memory is less than the threshold coefficient.\", \"decay\":\"The number of scanned pages is decremented each time if the available memory is greater than the threshold coefficient.\", \"sleepMsec\":\"The interval between two scans (the minimum value is 10ms), which is calculated by the formula (Sleep Milliseconds * 16 * 1024 * 1024/Total Memory).\", \"minPages\":\"The minimum number of pages per scan, also the configuration for the first run.\", \"maxPages\":\"Maximum number of pages per scan.\"})}), \"statistics\":({\"title\":\"Statistics \", \"sharing\":\"Sharing\", \"shared\":\"Shared\", \"unshared\":\"Unshared\", \"volatile\":\"Volatile\", \"fullScans\":\"Full Scans\", \"stableNodeChains\":\"Stable Node Chains\", \"stableNodeDups\":\"Stable Node Dups\"})}), \"hugepages\":({\"meminfo\":\"Meminfo\", \"transparent\":({\"title\":\"Transparent Hugepages \", \"enabled\":\"Enabled\", \"shmemEnabled\":\"Shared Memory Enabled\", \"defrag\":\"Defragmentation\"}), \"status\":({\"anon\":\"Anonymous Hugepages (bytes)\", \"size\":\"Default Hugepage Size (bytes)\", \"total\":\"Total Hugepages\", \"free\":\"Free Hugepages\", \"rsvd\":\"Reserved Hugepages\", \"surp\":\"Surplus Hugepages\"})}), \"disk\":({\"add\":\"Add Disk\", \"path\":({\"label\":\"Path\"}), \"storageReserved\":({\"label\":\"Storage Reserved\"}), \"allowScheduling\":({\"label\":\"Scheduling\", \"tooltip\":\"Disk {name} ({path}) scheduling is disabled\"}), \"evictionRequested\":({\"label\":\"Eviction Requested\"}), \"forceFormatted\":({\"label\":\"Force Formatted\", \"toolTip\":\"Force formatted will clean up disk data, make sure you backup all available data to prevent data loss.\", \"yes\":\"Yes (Ext4 File System)\"}), \"description\":({\"label\":\"Description\"}), \"lastFormattedAt\":({\"info\":\"The disk has already been force-formatted.\"}), \"notification\":({\"success\":\"Update host \\\"{name}\\\" storage configurations successfully.\"}), \"error\":\"Host has unready or unschedulable disks.\", \"mounted\":\"Already Mounted\", \"fileSystem\":({\"info\":\"Current file system is {system}, You can format it manually.\", \"formatting\":\"Disk is formatting, please wait.\"}), \"tags\":({\"label\":\"Disk Tags\", \"addLabel\":\"Add Disk Tag\"}), \"conditions\":\"Conditions\", \"storageAvailable\":({\"label\":\"Storage Available\"}), \"storageScheduled\":({\"label\":\"Storage Scheduled\"}), \"storageMaximum\":({\"label\":\"Storage Maximum\"}), \"provisioner\":\"Provisioner\", \"lvmVolumeGroup\":({\"label\":\"Volume Group\", \"create\":\"Create New...\"}), \"storage\":({\"longhorn\":({\"LonghornV1\":({\"label\":\"Longhorn V1 (CSI)\"}), \"LonghornV2\":({\"label\":\"Longhorn V2 (CSI)\"})}), \"lvm\":({\"label\":\"LVM\"})})}), \"tags\":({\"label\":\"Host Tags\", \"addLabel\":\"Add Host Tag\"}), \"powerAction\":({\"message\":({\"success\":\"Perform host { name } { operation } successfully.\"})}), \"ntp\":({\"label\":\"NTP Server Addresses\", \"tips\":\"You can configure multiple IPv4 addresses or host addresses.\", \"placeholder\":\"e.g. IPv4\", \"ntpSyncStatus\":({\"isDisabled\":\"NTP is disabled. Please check the NTP service is active.\", \"isUnsynced\":\"NTP is not synchronized with the NTP server {current}.\"})})}), \"virtualMachine\":({\"label\":\"Virtual Machines\", \"osType\":\"OS Type\", \"cpuModel\":({\"label\":\"CPU Model\", \"fetchError\":\"Failed to load CPU model configuration: {error}\", \"optionLabel\":\"{modelName} ({count} {count, plural, one {node} other {nodes}})\"}), \"hotplug\":({\"title\":\"Enable CPU and memory hotplug\", \"tooltip\":\"The default maximum CPU and maximum memory are {hotPlugTimes} times based on CPU and memory.\", \"restartVMMessage\":\"Restart action is required for the virtual machine configuration change to take effect\"}), \"hotUnplug\":({\"actionLabel\":\"Detach\", \"detachVolume\":({\"title\":\"Are you sure that you want to detach volume {name}?\", \"actionLabel\":\"Detach Volume\", \"success\":\"Volume { name } is detached successfully.\"}), \"ejectCdRomVolume\":({\"title\":\"Are you sure that you want to eject image from device {name}?\", \"actionLabel\":\"Eject Image\", \"success\":\"Image from device { name } is ejected successfully.\"}), \"detachNIC\":({\"title\":\"Are you sure that you want to detach network interface {name}?\", \"actionLabel\":\"Detach Network Interface\", \"success\":\"The settings have been saved, but the network interface {name} will be detached only after the virtual machine is migrated.\"})}), \"instance\":({\"singleInstance\":null, \"multipleInstance\":null, \"single\":({\"label\":\"Single Instance\", \"nameLabel\":\"Name\", \"host\":({\"label\":\"Hostname\", \"placeholder\":\"Default to the virtual machine name.\"})}), \"multiple\":({\"label\":\"Multiple Instance\", \"nameNsDescription\":\"Name prefix for each instance\", \"count\":\"Count\", \"countTip\":\"Count should be between 1 and 10\", \"nameLabel\":\"Name Prefix\", \"host\":({\"label\":\"Host Prefix Name\", \"placeholder\":\"Default to the virtual machine name.\"})})}), \"useTemplate\":({\"label\":\"Use the virtual machine template:\", \"template\":({\"label\":\"Template\"}), \"version\":({\"label\":\"Version\"})}), \"console\":({\"novnc\":\"Open in WebVNC\", \"serial\":\"Open in Serial Console\"}), \"promptRemove\":({\"title\":\"Select the volume you want to delete:\", \"deleteAll\":\"Delete All\", \"tips\":\"Warn: The snapshots of the virtual machine will be deleted with virtual machine and the snapshots of volume will be deleted with volume.\"}), \"restartTip\":\"{restart, select,\\n true {Restart}\\n other {Start}\\n} the virtual machine now to take effect of the configuration changes.\", \"runStrategy\":\"Run Strategy\", \"maintenanceStrategy\":({\"label\":\"Maintenance Strategy\", \"options\":({\"Migrate\":\"Migrate\", \"ShutdownAndRestartAfterEnable\":\"Shutdown and Restart After Enable\", \"ShutdownAndRestartAfterDisable\":\"Shutdown and Restart After Disable\", \"Shutdown\":\"Shutdown\"})}), \"cpuPinning\":({\"label\":\"Enable CPU Pinning\", \"tooltip\":\"Enable CPU Pinning brings better performance and reduce latency for the virtual machine\", \"restartVMMessage\":\"Changing the CPU Pinning setting requires a virtual machine reboot for the change to take effect\", \"migrationMessage\":\"This virtual machine can only be migrated to a target node that has CPU Manager enabled, as CPU Pinning is configured.\"}), \"restartNow\":\"{restart, select,\\n true {Restart}\\n other {Start}\\n} Now\", \"createSSHKey\":\"Create a New...\", \"genericLoginError\":\"Authentication failed. Please re-log in and try again.\", \"installAgent\":\"Install guest agent\", \"enableUsb\":\"Enable USB Tablet\", \"advancedOptions\":({\"tpm\":\"Enable TPM\", \"tpmPersistentState\":\"TPM Persistent State\", \"cpuManager\":({\"prefix\":\"You must enable CPU Manager for at least one node in\", \"middle\":\"host page\", \"suffix\":\"to enable CPU Pinning for VM\"}), \"efiEnabled\":\"Booting in EFI mode\", \"efiPersistentState\":\"EFI Persistent State\", \"secureBoot\":\"Secure Boot\"}), \"usbTip\":\"Provides an absolute pointer device which often helps with getting a consistent mouse cursor position in VNC.\", \"sshTitle\":\"Add Public SSH Key\", \"imageTip\":\"An external URL to the .iso, .img, .qcow2 or .raw that the virtual machine should be created from.\", \"volume\":({\"dragTip\":\"Drag and drop volumes, or use the volume's arrows, to change the boot order.\", \"volumeTip\":\"The virtual machine only contains a CD-ROM volume. You may want to add additional disk volumes.\", \"macTip\":\"MAC address as seen inside the guest system.\", \"staticIpTip\":\"Static IP that will be stored to annotation static-ip.harvesterhci.io/{nic_name}.\", \"volumeUpdate\":\"Set volume { name } successfully\", \"type\":\"Type\", \"size\":\"Size\", \"edit\":\"Edit\", \"bus\":\"Bus\", \"readyToUse\":\"Ready To Use\", \"bootOrder\":\"Boot Order\", \"volume\":\"Volume\", \"dockerImage\":\"Docker Image\", \"addVolume\":\"Add Volume\", \"addExistingVolume\":\"Add Existing Volume\", \"addVmImage\":\"Add a Virtual Machine Image\", \"addContainer\":\"Add Container\", \"setFirst\":\"Set as root volume\", \"saveVolume\":\"Update Volume\", \"encryption\":\"Encryption\", \"vmImageVolumeTip\":\"Disk size ({diskSize}) should greater than selected image virtual size ({imageVirtualSize})\", \"lockTooltip\":({\"all\":\"All volumes are encrypted.\", \"partial\":\"Some volumes are encrypted.\"}), \"title\":({\"vmImage\":\"Image Volume\", \"existingVolume\":\"Existing Volume\", \"volume\":\"Volume\", \"container\":\"Container\"}), \"unmount\":({\"title\":\"Are you sure?\", \"message\":\"Are you sure you want to unmount this volume?\"}), \"emptyImage\":\"No media\"}), \"network\":({\"title\":\"Network\", \"addNetwork\":\"Add Network\", \"addPort\":\"Add Port\"}), \"cloudConfig\":({\"title\":\"Cloud Configuration\", \"createTemplateTitle\":\"Create {name}\", \"createNew\":\"Create new...\", \"cloudInit\":({\"label\":\"Cloud Init\", \"placeholder\":\"Select a template\"}), \"user\":({\"label\":\"User Data Template\", \"title\":\"User Data:\", \"tip\":\"You can specify user data to configure an instance or run a configuration script during launch. If you launch more than one instance at a time, the user data is available to all the instances in that reservation. Learn more\"}), \"network\":({\"label\":\"Network Data Template\", \"title\":\"Network Data:\", \"tip\":\"The network-data configuration allows you to customize the instance's networking interfaces by assigning subnet configuration, virtual device creation (bonds, bridges, VLANs) routes and DNS configuration. Learn more\"})}), \"sysprep\":({\"title\":\"Windows Sysprep Configuration\", \"description\":\"Configure Windows automated installation using autounattend.xml. The configuration will be stored in a Kubernetes Secret and mounted as a CD-ROM during installation. Learn more\", \"createNew\":\"Create new...\", \"createNewTitle\":\"Create Windows Sysprep Template\", \"xmlContent\":\"autounattend.xml content\", \"secret\":({\"label\":\"Windows Sysprep Template\"}), \"validation\":({\"invalidXml\":\"Invalid XML syntax\", \"invalidNamespace\":\"Invalid unattend.xml namespace. Expected 'urn:schemas-microsoft-com:unattend'\"})}), \"scheduling\":({\"affinity\":({\"anyNode\":\"Run virtual machine on any available node\", \"schedulingRules\":\"Run virtual machine on node(s) matching scheduling rules\", \"specificNode\":\"Run virtual machine on specific node - (Live migration is not supported)\"}), \"networkNotSupport\":\"Network not support schedule\"}), \"accessCredentials\":({\"resetPwd\":({\"label\":\"Add Basic Auth\"}), \"injectSSH\":({\"label\":\"Add SSH Key\", \"users\":\"Select Users\", \"addUser\":\"Add User\"}), \"tips\":\"qemu-guest-agent must be installed to enable the accessing of credentials. The virtual machine needs to be restarted after credentials added. You need to be in the virtual machine to edit your password or remove an SSH-Key after deleting the credentials.\", \"userTips\":\"The user to be added must already exist; otherwise, the credentials will not take effect.\", \"duplicatedUser\":\"User already exists.\", \"invalidUser\":\"Invalid Username.\"}), \"input\":({\"name\":\"Name\", \"cpu\":\"CPU\", \"maxCpu\":\"Maximum CPU\", \"maxMemory\":\"Maximum Memory\", \"memory\":\"Memory\", \"image\":\"Image\", \"sshKey\":\"SSHKey\", \"sshKeyValue\":\"SSH-Key\", \"MachineType\":\"Machine Type\", \"username\":\"Username\", \"password\":\"Password\", \"reservedMemory\":\"Reserved Memory\", \"customizeDisplayName\":\"Customize virtual machine display name\", \"displayNamePlaceholder\":\"Virtual machine alias name\", \"displayName\":\"Display Name\"}), \"filesystem\":({\"description\":\"Harvester supports filesystem volumes for VM via virtiofs.\", \"type\":\"Filesystem Type\", \"volume\":\"Volume\", \"resource\":\"Resource\", \"add\":\"Add\", \"mountBannerHint\":\"Please update the mount path (e.g. /mnt/appconfigfs) to your preferred location, then add the corresponding commands to the\", \"mountBannerHintLink\":\"runcmd\", \"mountBannerHintSuffix\":\"in Advanced tab User Data.\"}), \"machineTypeTip\":\"Specify a processor architecture to emulate. To see a list of supported architectures, run: qemu-system-x86_64 -cpu ?\", \"detail\":({\"tabs\":({\"overview\":\"Overview\", \"details\":\"Details\", \"environment\":\"Environment\", \"events\":\"Events\", \"migration\":\"Migration\", \"console\":\"Console\", \"networkInterfaces\":\"Network Interfaces\", \"disks\":\"Disks\", \"networks\":\"Networks\", \"basics\":\"Basics\", \"configurations\":\"Configurations\", \"inventory\":\"Inventory\", \"hostBasic\":\"Basic Attributes\", \"instance\":\"Virtual Machines\", \"monitor\":\"Monitor Data\", \"keypairs\":\"SSH Keys\", \"cloudConfig\":\"Cloud Configuration\", \"metrics\":\"Virtual Machine Metrics\"}), \"details\":({\"title\":({\"vmDetails\":\"Virtual Machine Details\", \"requirements\":\"Scheduling and resources requirements\", \"services\":\"Services\", \"users\":\"Logged in users\"}), \"name\":\"Name\", \"totalSnapshotQuota\":\"Total Snapshot Quota\", \"namespace\":\"Namespace\", \"created\":\"Created\", \"hostname\":\"Hostname\", \"node\":\"Node\", \"ipAddress\":\"IP Address\", \"status\":\"Status\", \"pod\":\"Pod\", \"labels\":\"Labels\", \"bootOrder\":\"Boot Order\", \"annotations\":\"Annotations\", \"CDROMs\":\"CD-ROMs\", \"description\":\"Description\", \"operatingSystem\":\"Operating System\", \"template\":\"Template\", \"kernelRelease\":\"Kernel Release\", \"owner\":\"Owner\", \"workloadProfile\":\"Workload Profile\", \"nodeSelector\":\"Node Selector\", \"flavor\":\"Flavor\", \"tolerations\":\"Tolerations\", \"dedicatedResources\":\"Dedicated Resources\", \"down\":\"Virtual machine not running\", \"affinityRules\":\"Affinity Rules\", \"phase\":\"Phase\", \"sourceNode\":\"Source Node\", \"targetNode\":\"Target Node\", \"started\":\"Started\", \"ended\":\"Ended\"}), \"notAvailable\":\"Not available\", \"GuestAgentNotInstalled\":\"Guest agent required\", \"noOwner\":\"No Owner\", \"events\":({\"from\":\"Generated from\", \"down\":\"No events in the past hour\"}), \"console\":({\"down\":\"This virtual machine is down. Please start it to access its console.\", \"shortcutKeys\":\"Shortcut Keys\", \"customShortcutKeys\":\"Custom Shortcut Keys\", \"management\":\"Management Shortcut Keys\", \"record\":({\"start\":\"Record\", \"recording\":\"Recording\", \"stop\":\"Stop Recording\", \"tips\":\"Press the record button to capture your keyboard inputs.\", \"send\":\"Send\", \"preferredKeys\":\"Preferred Custom Shortcut Keys\"})})}), \"terminationGracePeriodSeconds\":({\"label\":\"Termination Grace Period\"}), \"affinity\":({\"addLabel\":\"Add Workload Selector\", \"topologyKey\":({\"placeholder\":\"topology.kubernetes.io/zone\"}), \"thisPodNamespace\":\"This virtual machine's namespace\", \"matchExpressions\":({\"inNamespaces\":\"Workloads in these namespaces\"}), \"namespaces\":({\"label\":\"Namespaces\"})}), \"instanceLabels\":({\"banner\":\"These labels are automatically synchronized to the virtual machine instance.\"}), \"labels\":({\"banner\":\"These key values are added as labels to the virtual machine.\"}), \"annotations\":({\"banner\":\"These key values are added as annotations to the virtual machine.\"})}), \"volume\":({\"label\":\"Volumes\", \"tabs\":({\"basics\":\"Basics\", \"snapshots\":\"Snapshots\", \"datasource\":\"Data Source\", \"details\":\"Details\", \"conditions\":\"Conditions\"}), \"size\":\"Size\", \"volumeMode\":\"Volume Mode\", \"accessModes\":\"Access Modes\", \"createWithDataVolume\":\"Create with DataVolume\", \"createWithDataVolumeTooltip\":\"Create Volume with Kubevirt/Containerized Data Importer way. It can fill accessMode/volumeMode automatically.\", \"showAdvanced\":\"Show Advanced Options\", \"hideAdvanced\":\"Hide Advanced Options\", \"source\":\"Source\", \"kind\":\"Kind\", \"sourceOptions\":({\"new\":\"New\", \"vmImage\":\"Virtual Machine Image\"}), \"image\":\"Image\", \"frontend\":\"Frontend\", \"blockdev\":\"Block Device\", \"attachedNode\":\"Attached Node\", \"endpoint\":\"Endpoint\", \"diskTags\":\"Disk Tags\", \"nodeTags\":\"Node Tags\", \"lastBackup\":\"Last Backup\", \"lastBackupAt\":\"Last Backup At\", \"replicasNumber\":\"Replicas Number\", \"promptRemove\":({\"tips\":\"Warn: The volume's snapshots will be deleted with this volume.\"}), \"externalLink\":({\"tips\":\"Check volume details\"}), \"rebuildingMessage\":\"Rebuilding: {percentage}%\", \"longhorn\":({\"disableResize\":\"Longhorn V2 volumes cannot be resized.\"})}), \"image\":({\"label\":\"Images\", \"tabs\":({\"basics\":\"Basics\"}), \"url\":\"URL\", \"size\":\"Size\", \"isEncryption\":\"Encryption\", \"encryptionSecret\":\"Encryption Secret\", \"virtualSize\":\"Virtual Size\", \"urlTip\":\"Supports the raw and qcow2 image formats which are supported by qemu. Bootable ISO images can also be used and are treated like raw images.\", \"fileName\":\"File Name\", \"uploadFile\":\"Upload File\", \"source\":\"Source Type\", \"sourceType\":({\"download\":\"URL\", \"upload\":\"File\", \"clone\":\"Clone\", \"encrypt\":\"Encrypt\", \"decrypt\":\"Decrypt\"}), \"sourceImage\":\"Source Image\", \"cryptoOperation\":\"Crypto Operation\", \"warning\":({\"uploading\":\"{count, plural,\\n=1 {1 image is uploading, please do not refresh or close the page.}\\nother {{count} images are uploading, please do not refresh or close the page.}\\n}\", \"osUpgrade\":({\"uploading\":\"{name} is uploading, please do not refresh or close the page.\"})}), \"checksum\":\"Checksum\", \"checksumTip\":\"Validate the image using the SHA512 checksum, if specified.\", \"tooltip\":({\"imported\":\"Created automatically by the vm-import-controller\"}), \"errors\":({\"unsupportedBackend\":\"Unsupported backend type: {backend}\"})}), \"vmTemplate\":({\"label\":\"Templates\", \"tabs\":({\"basics\":\"Basics\"}), \"nameNsDescription\":({\"name\":\"Template Name\"}), \"tips\":({\"notExistImage\":({\"title\":\"Image {name} does not exist!\", \"message\":\"Please select a new image.\"}), \"notExistNode\":({\"title\":\"Node {name} does not exist!\", \"message\":\"Please select a new node.\"})})}), \"upgradePage\":({\"upgradeApp\":\"Upgrade Software\", \"upgrade\":\"Upgrade\", \"upgradeTip\":\"Please select the version you want to upgrade to\", \"currentVersion\":\"CURRENT VERSION\", \"versionLabel\":\"AVAILABLE COMPATIBLE VERSIONS\", \"enableLogging\":\"Enable Logging\", \"skipSingleReplicaDetachedVol\":\"Skip checking single-replica detached volumes\", \"upgradeNode\":\"Upgrading Node\", \"upgradeSysService\":\"Upgrading System Service\", \"upgradeImage\":\"Download Upgrade Image\", \"osUpgrade\":\"Cluster Upgrade\", \"uploadNew\":\"Upload New Image\", \"deleteHeader\":\"Please select an image to delete.\", \"deleteExisting\":\"Delete Existing Image\", \"selectExisting\":\"Select Existing Image\", \"createRepository\":\"Creating Upgrade Repository\", \"succeeded\":\"Succeeded\", \"releaseTip\":\"Please read the upgrade documentation carefully. You can view details on the Harvester Release Notes.\", \"checkReady\":\"I have read and understood the upgrade instructions related to this Harvester version.\", \"pending\":\"Pending\", \"upload\":({\"duplicatedFile\":\"The file you are trying to upload already exists.\"}), \"repoInfo\":({\"upgradeStatus\":\"Upgrade Status\", \"os\":\"OS\", \"kubernetes\":\"Kubernetes\", \"monitoringChart\":\"Monitoring Chart\", \"harvesterChart\":\"Harvester Chart\", \"success\":\"Success\", \"fail\":\"Fail\", \"ongoing\":\"On-going\", \"downloadLog\":\"Download Log\", \"logStatus\":\"Log Download Status\"}), \"dismissMessage\":\"Dismiss it\", \"upgradeInfo\":({\"warning\":\"WARNING\", \"doc\":\"Read the documentation before starting the upgrade process. Ensure that you complete procedures that are relevant to your environment and the version you are upgrading to.\", \"tip\":\"Unmet system requirements and incorrectly performed procedures may cause complete upgrade failure and other issues that require manual workarounds.\", \"moreNotes\":\"For more details about the release notes, please visit -\"})}), \"schedule\":({\"label\":\"Virtual Machine Schedules\", \"createTitle\":\"Create Schedule\", \"createButtonText\":\"Create Schedule\", \"scheduleType\":\"Virtual Machine Schedule Type\", \"cron\":({\"label\":\"Cron Schedule\", \"editButton\":\"Edit\"}), \"detail\":({\"namespace\":\"Namespace\", \"sourceVM\":\"Source Virtual Machine\"}), \"tabs\":({\"basic\":\"Basic\", \"backups\":\"Backups\", \"snapshots\":\"Snapshots\"}), \"message\":({\"noSetting\":({\"suffix\":\"before creating a backup schedule\"})}), \"retain\":({\"label\":\"Retain\", \"count\":\"Count\", \"tooltip\":\"Number of up-to-date VM backups to retain. Maximum to 250, minimum to 2.\"}), \"maxFailure\":({\"label\":\"Max Failure\", \"count\":\"Count\", \"tooltip\":\"Max number of consecutive failed backups that could be tolerated. If reach this threshold, Harvester controller will suspend the schedule job. This value should less than retain count\"}), \"virtualMachine\":({\"title\":\"Virtual Machine Name\", \"placeholder\":\"Select a virtual machine\"}), \"type\":({\"snapshot\":\"Snapshot\", \"backup\":\"Backup\"})}), \"backup\":({\"label\":\"Virtual Machine Backups\", \"createText\":\"Restore Backup\", \"title\":\"Restore Virtual Machine\", \"refreshInterval\":({\"label\":\"Refresh Interval\", \"tip\":\"The interval for the backup target to sync data to harvester cluster. Set to 0 to disable refresh mechanism.\"}), \"backupTargetTip\":\"The endpoint used to access the backupstore. NFS and S3 are supported.\", \"message\":({\"noSetting\":({\"prefix\":\"You must configure the backup target\", \"middle\":\"setting\", \"suffix\":\"before creating a new backup.\"}), \"errorTip\":({\"prefix\":\"Backup target value in\", \"middle\":\"setting\", \"suffix\":\"is invalid, error: \"}), \"viewSetting\":({\"prefix\":\"Click\", \"middle\":\"here\", \"suffix\":\"to view the backup configuration.\"}), \"testConnect\":({\"actionLabel\":\"Test connection\", \"waitingLabel\":\"Testing connection...\", \"successLabel\":\"Connection tested\", \"successMessage\":\"Harvester can successfully connect to the endpoint {endpoint}\"})}), \"restore\":({\"backup\":\"Backup\", \"deletePreviousVolumes\":\"Delete Previous Volumes\", \"createNew\":\"Create new\", \"replaceExisting\":\"Replace existing\", \"virtualMachineName\":\"Virtual Machine Name\", \"keepMacAddress\":\"Keep MAC Address\", \"haltAfterRestore\":\"Keep powered off after restore\"}), \"matchTarget\":\"The current backup target does not match the existing one.\", \"progress\":({\"details\":\"Volume details\", \"tooltip\":({\"starting\":\"Backup initiating\", \"progress\":\"Backup in progress\", \"complete\":\"Backup completed\"})})}), \"restore\":({\"progress\":({\"details\":\"Volume details\", \"tooltip\":({\"starting\":\"Restore initiating\", \"progress\":\"Restore in progress\", \"complete\":\"Restore completed\"})})}), \"subnet\":({\"cidrBlock\":({\"tooltip\":\"The subnet range in CIDR notation. Note that the CIDR blocks of different Subnets' within the same VPC cannot overlap.\", \"label\":\"CIDR Block\", \"placeholder\":\"e.g. 172.20.0.0/16\"}), \"protocol\":({\"label\":\"Protocol\"}), \"provider\":({\"tooltip\":\"Network provider for this Subnet. Must be one of the Virtual Machine Networks in OverlayNetwork type.\", \"label\":\"Provider\"}), \"vpc\":({\"label\":\"Virtual Private Cloud\"}), \"gateway\":({\"label\":\"Gateway IP\", \"placeholder\":\"e.g. 172.20.0.1\"}), \"vlan\":({\"label\":\"VLAN\", \"placeholder\":\"Select a VLAN\"}), \"dhcp\":({\"label\":\"Dynamic Host Configuration Protocol (DHCP)\", \"v4Options\":\"DHCPV4Options\", \"v6Options\":\"DHCPV6Options\", \"placeholder\":\"key1=value1, key2=value2\", \"dhcpOptionBanner\":\"DHCP options is a key/value string concatenate with comma. For more detail, please refer to KubOVN document\", \"tooltip\":\"Enable DHCP server for this subnet. When enabled, VMs can automatically obtain IP addresses from this subnet.\"}), \"externalConnectivity\":({\"label\":\"NAT Outgoing\", \"tooltip\":\"Enable NAT for VMs using this subnet to access external networks.\"}), \"private\":({\"label\":\"Private Subnet\", \"tooltip\":\"Enable network isolation for this Subnet. When enabled, VMs can only communicate within this subnet, even if other subnets exist under the same VPC.\"}), \"allowSubnet\":({\"label\":\"Allow Subnets\", \"tooltip\":\"You can specify certain subnets which can communicate with this subnet.\", \"addSubnet\":\"Add Allow Subnet\", \"placeholder\":\"e.g. 172.16.0.0/16\"}), \"excludeIPs\":({\"tooltip\":\"The IP address list to reserve from automatic assignment. The gateway IP address is always excluded and will be automatically added to the list.\", \"placeholder\":\"single IP or 192.168.0.100..192.168.0.200\"}), \"acl\":({\"label\":\"Access Control List\", \"tooltip\":\"The ACL to apply to this Subnet. Must be one of the ACLs in the same namespace.\", \"action\":({\"label\":\"Action\", \"placeholder\":\"Please select an action\"}), \"direction\":({\"label\":\"Direction\", \"placeholder\":\"Please select a direction\"}), \"addRule\":\"Add Rule\", \"priority\":({\"label\":\"Priority\", \"placeholder\":\"Please select a priority\"}), \"match\":({\"label\":\"Match\", \"placeholder\":\"e.g. ip4.dst == 10.10.0.2\"}), \"banner\":\"The supported field in ACL match can refer to KubeOvn Subnet ACL document\"})}), \"vpc\":({\"viewTopology\":\"Topology\", \"topology\":({\"loading\":\"Loading topology...\", \"empty\":\"No resources found\", \"visibility\":({\"vpc\":\"VPC\", \"subnets\":\"Subnets\", \"overlayNetworks\":\"Overlay Networks\", \"vms\":\"VMs\"}), \"labels\":({\"cidr\":\"CIDR\", \"provider\":\"Provider\", \"type\":\"Type\", \"clusterNetwork\":\"Cluster Network\", \"network\":\"Network\", \"subnet\":\"Subnet\", \"ip\":\"IP\", \"mac\":\"MAC\", \"peering\":\"Peering\"})}), \"noAddonEnabled\":({\"prefix\":\"The kubeovn-operator add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable the add-on to successfully create VPC and subnet.\"}), \"label\":\"Virtual Private Cloud\", \"noChild\":\"There is no subnet defined in this Virtual Private Cloud.\", \"createSubnet\":\"Create Subnet\", \"staticRoutes\":({\"label\":\"Static Routes\", \"cidr\":({\"label\":\"CIDR\", \"placeholder\":\"e.g. 172.16.0.0/16\"}), \"nextHopIP\":({\"tooltip\":\"The localConnectIP on the other end of the peering VPC.\", \"label\":\"Next Hop IP\", \"placeholder\":\"e.g. 169.254.0.2\"})}), \"vpcPeerings\":({\"label\":\"VPC Peerings\", \"localConnectIP\":({\"tooltip\":\"The designated IP address in CIDR notation of the VPC peering endpoint. Note that both IP addresses (for the VPC and the other VPC) should belong to the same subnet range and should not conflict with the cidrBlock in any existing subnets.\", \"label\":\"Local Connect IP\", \"placeholder\":\"e.g. 169.254.0.1/16\"}), \"remoteVpc\":({\"label\":\"Remote VPC\"}), \"infoBanner\":\"The static route destination CIDR must cover all subnets CIDR from remote VPC Peer. Read VPC Peering Configuration Examples for more information.\"})}), \"natGateway\":({\"label\":\"Gateways\", \"internalTenantNetwork\":({\"label\":\"Internal Tenant Network\", \"placeholder\":\"Select a Virtual Machine Network\"}), \"vpc\":({\"label\":\"VPC\", \"placeholder\":\"Select a VPC\"}), \"subnet\":({\"label\":\"Subnet\", \"placeholder\":\"Select a subnet\"}), \"lanIp\":({\"label\":\"LAN IP\", \"placeholder\":\"Enter LAN IP\"}), \"externalSubnets\":({\"label\":\"External Subnets\", \"addLabel\":\"Add\", \"placeholder\":\"Select a subnet\"})}), \"externalIP\":({\"label\":\"External IPs\", \"natGateway\":({\"label\":\"VpcNatGateway\", \"placeholder\":\"Select a VpcNatGateway\"}), \"externalSubnet\":({\"label\":\"External Subnet\", \"placeholder\":\"Select an external subnet\"}), \"v4ip\":({\"label\":\"V4 IP\", \"placeholder\":\"public ip from external subnet\"})}), \"snat\":({\"label\":\"Source Rules\", \"eip\":({\"label\":\"EIP\", \"placeholder\":\"Select an external IP\"}), \"internalCIDR\":({\"label\":\"Internal CIDR\", \"placeholder\":\"internal subnet CIDR\"})}), \"dnat\":({\"label\":\"Destination Rules\", \"eip\":({\"label\":\"EIP\", \"placeholder\":\"Select an external IP\"}), \"externalPort\":({\"label\":\"External Port\", \"placeholder\":\"port number\"}), \"internalIp\":({\"label\":\"Internal IP\", \"placeholder\":\"internal IP address\"}), \"internalPort\":({\"label\":\"Internal Port\", \"placeholder\":\"port number\"}), \"protocol\":({\"label\":\"Protocol\", \"placeholder\":\"Select protocol (tcp or udp)\"})}), \"providerNetwork\":({\"label\":\"Provider Networks\", \"defaultInterface\":({\"label\":\"Default Interface\", \"placeholder\":\"Select the interface the same as master interface of external overlay network\"}), \"customInterfaces\":({\"label\":\"Custom Interfaces\", \"addLabel\":\"Add Custom Interface\", \"interface\":({\"label\":\"Network Interface\", \"placeholder\":\"e.g. eth2\"}), \"nodes\":({\"label\":\"Nodes\", \"addLabel\":\"Add Node\", \"placeholder\":\"Select a node\"})}), \"excludedNodes\":({\"label\":\"Excluded Nodes\", \"addLabel\":\"Add Excluded Node\", \"placeholder\":\"Select node to exclude from this provider network\"})}), \"vlanNetwork\":({\"label\":\"VLANs\"}), \"vlan\":({\"id\":({\"label\":\"VLAN ID\", \"placeholder\":\"e.g. 1-4094\"}), \"provider\":({\"label\":\"Provider Network\", \"placeholder\":\"Select a provider network\"})}), \"networkPolicy\":({\"label\":\"Policies\", \"banner\":\"The network policies must be used for VMs attached to overlay networks. Please read the harvester document how the network policy works.\"}), \"network\":({\"label\":\"Virtual Machine Networks\", \"tabs\":({\"basics\":\"Basics\", \"layer3Network\":\"Route\", \"nic\":\"Network Interface Card\"}), \"clusterNetwork\":({\"label\":\"Cluster Network\", \"create\":\"Create a new cluster network\", \"toolTip\":\"Define your custom cluster scope network name\", \"createPlaceholder\":\"Input a new cluster network name\", \"selectOrCreatePlaceholder\":\"Select or create a new cluster network\", \"selectPlaceholder\":\"Select a cluster network\"}), \"layer3Network\":({\"mode\":({\"label\":\"Mode\", \"auto\":\"Auto (DHCP)\", \"manual\":\"Manual\"}), \"serverIPAddr\":({\"label\":\"DHCP Server IP\"}), \"gateway\":({\"label\":\"Gateway\", \"placeholder\":\"e.g. 172.16.0.1\"}), \"cidr\":({\"label\":\"CIDR\", \"placeholder\":\"e.g. 172.16.0.1/24\"})})}), \"sshKey\":({\"label\":\"SSH Keys\", \"keypair\":\"SSH Key\", \"tabs\":({\"basics\":\"Basics\"})}), \"setting\":({\"label\":\"Settings\", \"tabs\":({\"advanced\":\"Advanced\", \"ui\":\"UI\"}), \"validation\":({\"physicalNIC\":\"DefaultPhysicalNIC\"}), \"placeholder\":({\"accessKeyId\":\"Specify your access key ID\", \"secretAccessKey\":\"Specify your secret access key\", \"cert\":\"Upload a self-signed SSL certificate\"}), \"noSearchMatch\":\"No settings match your search.\", \"vlanChangeTip\":\"The newly modified default network interface only applies to newly added nodes, not existing ones.\", \"defaultPhysicalNIC\":\"Default Network Interface\", \"modifiedMessage\":\"Settings that have been customized from default settings are tagged with 'Modified'.\", \"percentTip\":\"The value in parentheses represents the distribution percentage of the network interface on all hosts. If an interface less than 100% is selected, the user needs to manually specify the network interface on the host where the vlan network configuration fails.\", \"message\":({\"ca\":({\"prefix\":\"Click\", \"middle\":\"here\", \"suffix\":\"to add a custom certificate.\"})}), \"sslCertificates\":({\"publicCertificate\":\"Public Certificate\", \"privateKey\":\"Private Key\", \"ca\":\"CA\"}), \"rancherCluster\":({\"kubeConfig\":\"Rancher KubeConfig\", \"removeUpstreamClusterWhenNamespaceIsDeleted\":\"Remove Upstream Cluster When Namespace Is Deleted\"}), \"clusterPodSecurityStandard\":({\"whitelistedNamespaces\":({\"label\":\"Whitelisted Namespaces\"}), \"privilegedNamespaces\":({\"label\":\"Privileged Namespaces\"}), \"restrictedNamespaces\":({\"label\":\"Restricted Namespaces\"})}), \"storageNetwork\":({\"range\":({\"placeholder\":\"e.g. 172.16.0.0/24\", \"label\":\"IP Range\", \"invalid\":\"\\\"Range\\\" is invalid.\"}), \"clusterNetwork\":\"Cluster Network\", \"vlan\":\"VLAN ID\", \"exclusiveVlan\":\"Exclusive VLAN\", \"exclude\":({\"label\":\"Exclude IPs\", \"placeholder\":\"CIDR format, e.g. 172.16.0.10/32\", \"invalid\":\"\\\"Exclude list\\\" is invalid.\", \"addIp\":\"Add Exclude IP\"}), \"warning\":\"WARNING: Any change to storage-network requires shutting down all virtual machines before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.\", \"tip\":\"Specify an IP range in the IPv4 CIDR format. Number of IPs Required = Number of Nodes * 2 + Number of Disks * 2 + Number of Images to Download/Upload . For more information about storage network settings, see the documentation.\"}), \"rwxNetwork\":({\"warning\":\"WARNING: Any change to rwx-network requires longhorn RWX volumes detached before applying this setting. Users have to ensure the cluster network is configured and VLAN Configuration will cover all nodes and ensure the network connectivity is working and expected in all nodes.\", \"shareStorageNetwork\":\"Share Storage Network\", \"dedicatedRwxNetwork\":\"Dedicated RWX Network\", \"shareStorageNetworkWarning\":\"The rwx-network is governed by storage-network, and changes here won't take effect until share-storage-network is set to false.\"}), \"vmForceDeletionPolicy\":({\"period\":\"Period\", \"vmMigrationTimeout\":\"VM Migration Timeout\"}), \"vmMigrationNetwork\":({\"parseError\":\"Failed to parse existing configuration.\", \"fetchError\":\"Failed to load required network resources: {error}. Please refresh the page or try again later.\", \"clusterNetwork\":\"Cluster Network\", \"vlan\":\"VLAN ID\", \"range\":({\"placeholder\":\"e.g. 172.16.0.0/24\", \"label\":\"IP Range\", \"invalid\":\"\\\"Range\\\" is invalid.\"}), \"exclude\":({\"label\":\"Excluded IPs\", \"placeholder\":\"e.g. 172.16.0.1/32\", \"invalid\":\"\\\"Exclude list\\\" is invalid.\", \"addButton\":\"Add Exclude IP\"})}), \"ratio\":\"Ratio\", \"autoRotateRKE2Certs\":({\"expiringInHours\":\"Expiring in\"}), \"httpProxy\":({\"warning\":\"WARNING: If you configure \\\"http-proxy\\\" and \\\"https-proxy\\\", you must also put Harvester node's CIDR into \\\"no-proxy\\\", otherwise the Harvester cluster will be broken.\"}), \"supportBundleImage\":({\"imagePullPolicy\":\"Pull Policy\", \"repo\":\"Repository\", \"tag\":\"Tag\"}), \"csiDriverConfig\":({\"provisioner\":\"Provisioner\", \"volumeSnapshotClassName\":\"Volume Snapshot Class Name\", \"backupVolumeSnapshotClassName\":\"Backup Volume Snapshot Class Name\"}), \"csiOnlineExpandValidation\":({\"provisioner\":\"Provisioner\", \"value\":\"Value\", \"invalidJsonFormat\":\"Configuration value is not a valid JSON format: {error}\", \"failedToLoadDrivers\":\"Failed to load CSI drivers. Error: {error}\"}), \"containerdRegistry\":({\"mirrors\":({\"mirrors\":\"Mirrors\", \"registryName\":\"Registry Name\", \"endpoints\":\"Endpoints\", \"rewrite\":({\"rewrite\":\"Rewrite\", \"addRewrite\":\"Add Rewrite\"}), \"addMirror\":\"Add Mirror\"}), \"configs\":({\"configs\":\"Configurations\", \"registryEDQNorIP\":\"Registry FDQN or IP\", \"registryPlaceholder\":\"myregistry.local:5000\", \"username\":\"Username\", \"password\":\"Password\", \"auth\":\"Auth\", \"identityToken\":\"Identity Token\", \"insecureSkipVerify\":\"InsecureSkipVerify\", \"addConfig\":\"Add Configuration\"})}), \"upgrade\":({\"unknownImageName\":\"Image name is not found.\", \"imageUrl\":\"Please input a valid image URL.\", \"chooseFile\":\"Please select to upload an image.\", \"checksum\":\"Checksum\", \"networkError\":\"Unable to upload the image. Resolve network issues that may have occurred and try again.\", \"cancelUpload\":\"Cancelled the image upload.\", \"uploadSuccess\":\"{name} uploaded successfully. Press Upgrade button to start the cluster upgrade process.\", \"deleteImage\":\"Please select an image to delete.\", \"deleteSuccess\":\"{name} deleted successfully.\", \"imagePreloadStrategy\":\"Image Preload Strategy\", \"nodeUpgradeOption\":\"Node Upgrade Option\", \"restoreVM\":\"Restore VM\", \"strategy\":\"Strategy\", \"pauseNodes\":\"Pause Nodes\", \"strategyType\":\"Strategy Type\", \"concurrency\":\"Concurrency\"}), \"harvesterMonitoring\":({\"label\":\"Harvester Monitoring\", \"section\":({\"prometheus\":\"Prometheus\", \"prometheusNodeExporter\":\"Prometheus Node Exporter\", \"grafana\":\"Grafana\", \"alertmanager\":\"Alertmanager\"}), \"tips\":({\"scrape\":\"Interval between consecutive scrapes\", \"evaluation\":\"Interval between consecutive evaluations\", \"retention\":\"How long to retain metrics\", \"retentionSize\":\"Maximum size of metrics\"})}), \"clusterRegistrationUrl\":({\"url\":\"URL\", \"insecureSkipTLSVerify\":\"Insecure Skip TLS Verify\", \"tip\":({\"prefix\":\"Harvester secures cluster registration via TLS by default. If opt out \\\"Insecure Skip TLS Verify\\\", you must provide custom CA certificates using the\", \"middle\":\"additional-ca\", \"suffix\":\"setting.\"}), \"message\":\"To completely unset the imported Harvester cluster, please also remove it on the Rancher Dashboard UI via the Virtualization Management page.\"}), \"ntpServers\":({\"isNotIPV4\":\"The address you entered is not IPv4 or host. Please enter a valid IPv4 address or a host address.\", \"isDuplicate\":\"There are duplicate NTP server configurations.\"}), \"instanceManagerResources\":({\"parseError\":\"Failed to parse configuration: {error}\", \"v1\":\"V1 Data Engine\", \"v2\":\"V2 Data Engine\"}), \"kubevirtMigration\":({\"parseError\":\"Failed to parse configuration: {error}\", \"parallelMigrationsPerCluster\":\"Parallel Migrations Per Cluster\", \"parallelOutboundMigrationsPerNode\":\"Parallel Outbound Migrations Per Node\", \"bandwidthPerMigration\":\"Bandwidth Per Migration\", \"bandwidthPerMigrationTooltip\":\"0 is KubeVirt default, representing unlimited bandwidth\", \"completionTimeoutPerGiB\":\"Completion Timeout Per GiB\", \"progressTimeout\":\"Progress Timeout\", \"allowAutoConverge\":\"Allow Auto Converge\", \"allowPostCopy\":\"Allow Post Copy\", \"unsafeMigrationOverride\":\"Unsafe Migration Override\", \"allowWorkloadDisruption\":\"Allow Workload Disruption\", \"disableTLS\":\"Disable TLS\", \"matchSELinuxLevelOnMigration\":\"Match SELinux Level On Migration\"})}), \"cloudTemplate\":({\"label\":\"Cloud Configuration Templates\", \"templateType\":\"Template Type\", \"userData\":\"User Data\", \"networkData\":\"Network Data\"}), \"support\":({\"title\":\"Harvester Support\", \"kubeconfig\":({\"title\":\"Download KubeConfig\", \"titleDescription\":\"Download kubeconfig for debugging.\"}), \"internal\":({\"rancher\":({\"title\":\"Access Embedded Rancher UI\", \"titleDescription\":\"You can only use the embedded Rancher UI for debugging and validation purposes. For more information about how Harvester integrates with Rancher, see the documentation.\"}), \"longhorn\":({\"title\":\"Access Embedded Longhorn UI\", \"titleDescription\":\"We only support to use the embedded Longhorn UI for debugging and validation purpose.\"})}), \"community\":({\"learnMore\":\"Find out more about SUSE Harvester support\", \"pricing\":\"Contact us for pricing\"})}), \"namespace\":({\"label\":\"Namespaces\"}), \"projectNamespace\":({\"label\":\"Projects/Namespaces\"}), \"vip\":({\"namespace\":({\"label\":\"Namespace\"}), \"cidr\":({\"label\":\"CIDR/IP Range\", \"invalid\":\"\\\"CIDR/IP Range\\\" is invalid.\", \"toolTip\":\"We can apply multiple pools or ranges by separating them with commas. For example: 192.168.0.200/30,192.168.0.200/29 or 192.168.0.10-192.168.0.11\"}), \"add\":({\"label\":\"Add IP Pools\"})}), \"sslParameters\":({\"protocols\":({\"label\":\"Protocols\"}), \"ciphers\":({\"label\":\"Ciphers\"})}), \"monitoring\":({\"configuration\":({\"label\":\"Configuration\"}), \"alertmanagerConfig\":({\"label\":\"Alertmanager Configurations\", \"diabledMonitoringTips\":({\"prefix\":\"Enable the\", \"middle\":\"monitoring\", \"suffix\":\"add-on first.\"}), \"diabledAlertingTips\":({\"prefix\":\"Enable\", \"middle\":\"Alertmanager\", \"suffix\":\"for configuration to take effect.\"}), \"disabledAddon\":({\"prefix\":\"The monitoring add-on is disabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it.\"})})}), \"logging\":({\"configuration\":({\"section\":({\"fluentbit\":\"Fluentbit\", \"fluentd\":\"Fluentd\"})}), \"clusterFlow\":({\"label\":\"Cluster Flows\"}), \"clusterOutput\":({\"label\":\"Cluster Outputs\"}), \"flow\":({\"label\":\"Flows\"}), \"output\":({\"label\":\"Outputs\"}), \"diabledTips\":({\"prefix\":\"Enable\", \"middle\":\"logging\", \"suffix\":\"for configuration to take effect.\"})}), \"snapshot\":({\"totalSnapshotSize\":\"Total Snapshot Size\", \"label\":\"Volume Snapshots\", \"targetVolume\":\"Original Volume\", \"size\":\"Size\", \"image\":\"Image\"}), \"vmSnapshot\":({\"label\":\"Virtual Machine Snapshots\", \"createText\":\"Restore Snapshot\", \"title\":\"Restore Virtual Machine\", \"snapshot\":\"Snapshot\"}), \"storage\":({\"label\":\"Storage\", \"useDefault\":\"Use the default storage\", \"volumeEncryption\":\"Volume Encryption\", \"secret\":\"Secret\", \"volumeExpansionCheckbox\":\"Enable Expansion\", \"migratable\":({\"label\":\"Migratable\"}), \"numberOfReplicas\":({\"label\":\"Number Of Replicas\"}), \"staleReplicaTimeout\":({\"label\":\"Stale Replica Timeout\"}), \"nodeSelector\":({\"label\":\"Host Selector\"}), \"diskSelector\":({\"label\":\"Disk Selector\"}), \"storageClass\":({\"label\":\"Storage Class\", \"longhorn\":({\"v1\":({\"label\":\"Longhorn V1 (CSI)\"}), \"v2\":({\"label\":\"Longhorn V2 (CSI)\"}), \"versionTooltip\":\"Longhorn V2 is disabled for this node.\"}), \"lvm\":({\"label\":\"LVM\"})}), \"title\":\"Storage Classes\", \"customize\":({\"volumeBindingMode\":({\"later\":\"Bind and provision a persistent volume once a virtual machine using the PersistentVolumeClaim is created\"})}), \"parameters\":({\"numberOfReplicas\":({\"label\":\"Number Of Replicas\"}), \"staleReplicaTimeout\":({\"label\":\"Stale Replica Timeout\"}), \"diskSelector\":({\"label\":\"Disk Selector\", \"no-options\":\"No available tags, please add in the `Host > Storage` page\"}), \"nodeSelector\":({\"label\":\"Node Selector\", \"no-options\":\"No available tags, please add in the `Host > Storage` page\"}), \"migratable\":({\"label\":\"Migratable\"}), \"lvmVolumeGroupType\":({\"label\":\"Volume Group Type\"}), \"lvmVolumeGroup\":({\"label\":\"Volume Group Name\", \"no-options\":\"No available Volume Groups, please add in the `Host > Storage` page\"}), \"node\":({\"label\":\"Node\"})}), \"allowedTopologies\":({\"title\":\"Allowed Topologies\", \"tooltip\":\"Allowed Topologies helps scheduling virtual machines on hosts which match all of below expressions.\"}), \"internal\":({\"label\":\"Internal Storage Class\", \"cannotDeleteTooltip\":\"Internal storage class volumes cannot be deleted\", \"cannotDeleteOrDefaultTooltip\":\"Internal storage classes cannot be deleted or set as default\"}), \"cdiSettings\":({\"label\":\"CDI Settings\", \"volumeModeAccessModes\":({\"label\":\"Volume Mode / Access Modes\", \"tooltip\":\"Specifies the default volume mode and access modes.\", \"add\":\"Add\", \"volumeMode\":\"Volume Mode\", \"accessModes\":({\"label\":\"Access Modes\"})}), \"volumeSnapshotClass\":({\"label\":\"Volume Snapshot Class\", \"tooltip\":\"Sets the Volume Snapshot Class name to be used when taking snapshots of PVCs under this StorageClass.\"}), \"cloneStrategy\":({\"label\":\"Clone Strategy\", \"tooltip\":\"Defines the clone strategy to use for volumes created with this StorageClass.\", \"copy\":\"Copy\", \"snapshot\":\"Snapshot\", \"csiClone\":\"CSI Clone\"}), \"fileSystemOverhead\":({\"label\":\"File System Overhead\", \"tooltip\":\"Specifies the percentage of filesystem overhead to consider when calculating PVC size.\", \"placeholder\":\"e.g. 0.05 (up to 3 decimal places, between 0 and 1)\"})})}), \"vlanConfig\":({\"title\":\"Network Configuration\", \"createNetworkConfig\":\"Create Network Configuration\", \"action\":({\"migrate\":\"Migrate\"}), \"titles\":({\"nodeSelector\":\"Node Selector\", \"uplink\":\"Uplink\", \"bondOptions\":\"Bond Options\", \"attributes\":\"Attributes\", \"host\":\"Selected Hosts\"}), \"scheduling\":({\"affinity\":({\"allNodes\":\"Select all nodes\", \"specificNode\":\"Select specific node\", \"schedulingRules\":\"Select node(s) matching rules\"})}), \"uplink\":({\"nics\":({\"label\":\"NIC\", \"addLabel\":\"Add NIC\", \"overlayWarning\":\"The NIC selected here must match the NIC provided in the provider network.\", \"placeholder\":\"Select a NIC that is available on all the selected nodes\", \"validate\":({\"available\":\"NIC \\\"{nic}\\\" is not available on the selected nodes\"})}), \"linkAttributes\":({\"mtu\":({\"label\":\"MTU\"})}), \"bondOptions\":({\"mode\":({\"label\":\"Mode\"}), \"miimon\":({\"label\":\"Miimon\", \"tooltip\":\"Miimon specifies the MII link monitoring frequency in milliseconds. -1 means to keep the original value.\"})})}), \"nodeSelector\":({\"matchingNodes\":({\"matchesSome\":\"{matched, plural,\\n =0 {Matches 0 of {total, number} Nodes.}\\n =1 {Matches 1 of {total, number} Nodes: \\\"{sample}\\\"}\\n other {Matches {matched, number} of {total, number} existing Nodes, including \\\"{sample}\\\"}\\n}\"})})}), \"vlanStatus\":({\"vlanConfig\":({\"label\":\"Network Configuration\", \"l2VlanMode\":({\"access\":\"Access\", \"trunk\":\"Trunk\", \"label\":\"Mode\"}), \"vlanTrunk\":({\"minId\":\"Minimum VLAN ID\", \"maxId\":\"Maximum VLAN ID\", \"add\":\"Add VLAN Trunk\"})})}), \"clusterNetwork\":({\"title\":\"Cluster Network Configuration\", \"create\":({\"button\":({\"label\":\"Create a Cluster Network\"})}), \"clusterNetwork\":\"There are no network configurations defined.\", \"mgmt\":\"mgmt is a built-in cluster management network and does not support any additional network configurations.\", \"notExist\":\"Cluster Network \\\"{ clusterNetwork }\\\" does not exist\", \"notReady\":\"Cluster Network \\\"{ clusterNetwork }\\\" is not ready\"}), \"addons\":({\"descriptions\":({\"harvester-system/vm-import-controller\":\"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.\", \"harvester-system/pcidevices-controller\":\"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machine and guest clusters.\", \"cattle-logging-system/rancher-logging\":\"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.\", \"harvester-system/rancher-vcluster\":\"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.\", \"cattle-monitoring-system/rancher-monitoring\":\"rancher-monitoring is an add-on that collects Harvester cluster and virtual machine metrics and allows you to view the metrics on an embedded dashboard and send alert(s) to remote servers.\", \"vm-import-controller\":\"vm-import-controller is an add-on to help migrate virtual machine workloads from other source clusters to an existing Harvester cluster.\", \"pcidevices-controller\":\"pcidevices-controller is an add-on to help discover PCI devices for nodes in your cluster and allow users to prepare devices for PCI Passthrough, for use with Harvester virtual machines and guest clusters.\", \"nvidia-driver-toolkit\":\"nvidia-driver-toolkit is an add-on to enable vGPU devices and assign them to Harvester virtual machines.\", \"rancher-logging\":\"rancher-logging is an add-on to collect versatile logs, events, and audits from the Harvester cluster and route them to many kinds of servers based on flows.\", \"rancher-monitoring\":\"rancher-monitoring is an add-on to collect Harvester cluster and virtual machine metrics, view them on the embedded dashboard, and send alert(s) to remote servers.\", \"rancher-vcluster\":\"rancher-vcluster deploys a virtual cluster (vcluster) with Rancher installed.\", \"harvester-seeder\":\"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.\", \"harvester-system/harvester-seeder\":\"harvester-seeder is an add-on that uses IPMI and Redfish to discover hardware information and perform out-of-band operations.\", \"harvester-csi-driver-lvm\":\"harvester-csi-driver-lvm is an add-on allowing users to create PVC through the LVM with local devices.\", \"descheduler\":\"The virtual machine auto balance optimizes workload scheduling by evicting pods that are not optimally placed according to administrator-defined policies.\"}), \"vmMigration\":({\"generic\":({\"unknown\":\"Unknown\", \"identifier\":\"Identifier\", \"podNetwork\":\"Pod Network\", \"usedBy\":\"Used by:\", \"vlan\":\"VLAN {id}\", \"vCpu\":\"{count} vCPU\", \"memoryGb\":\"{value} GB\", \"memoryTb\":\"{value} TB\", \"elapsed\":({\"hoursAndMinutes\":\"{hours} {hours, plural, one {hour} other {hours}} and {minutes} {minutes, plural, one {minute} other {minutes}}\", \"hours\":\"{hours} {hours, plural, one {hour} other {hours}}\", \"minutes\":\"{minutes} {minutes, plural, one {minute} other {minutes}}\"})}), \"errors\":({\"failedLoadPlans\":\"Failed to load migration plans\", \"failedLoadVms\":\"Failed to load virtual machines\", \"failedRefreshVms\":\"Failed to refresh virtual machines\", \"failedLoadProviders\":\"Failed to load providers\", \"failedLoadProvider\":\"Failed to load provider: {error}\", \"failedResolveDetails\":\"Failed to resolve network and datastore details\", \"failedDecodeCredentials\":\"Failed to decode provider credentials\", \"connectionFailed\":\"Connection failed\", \"providerNotReady\":\"Provider not ready\"}), \"labels\":({\"dashboard\":\"Migration Overview\", \"provider\":\"Providers\", \"networkMap\":\"Network Maps\", \"storageMap\":\"Storage Maps\", \"plan\":\"Migration Plans\", \"migration\":\"Migrations\"}), \"providerWizard\":({\"title\":\"Create Provider\", \"editTitle\":\"Edit Provider\"}), \"wizard\":({\"title\":\"VM Migration\", \"steps\":({\"configureProvider\":({\"label\":\"Provider\", \"description\":\"Configure Provider\"}), \"selectVms\":({\"label\":\"VMs\", \"description\":\"Select VMs\"}), \"configureMappings\":({\"label\":\"Mappings\", \"description\":\"Define Mappings\"}), \"reviewMigration\":({\"label\":\"Migration Plan\", \"description\":\"Review Migration Plan\"})})}), \"fields\":({\"username\":\"Username\", \"password\":\"Password\"}), \"configureProvider\":({\"title\":\"Configure Provider\", \"description\":\"Connect to your VMware vCenter or ESXi host to discover virtual machines for migration\", \"connectionDetails\":\"Connection Details\", \"providerSelect\":\"Provider\", \"createNew\":\"Create new provider\", \"requirementsTitle\":\"Requirements\", \"requirementsText\":\"To migrate virtual machines from VMware, you will need a vCenter Server running version 6.5 or higher with a user account that has at least read permissions, and the source environment must be network-accessible from Rancher.\", \"name\":\"Name\", \"urlLabel\":\"vCenter/ESXi URL\", \"urlPlaceholder\":\"https://vcenter.example.com/sdk\", \"urlHint\":\"Enter the full URL including https://\", \"skipSsl\":\"Skip SSL certificate verification\", \"skipSslHint\":\"Not recommended for production environments\", \"testConnection\":({\"action\":\"Test Connection\", \"success\":\"Connection successful\", \"error\":\"Connection failed\", \"waiting\":\"Testing connection...\"}), \"testSuccess\":\"Connection test passed\", \"testFailed\":\"Connection test failed\", \"testMissingFields\":\"Please fill in all required fields before testing\", \"testTimeout\":\"Connection test timed out — the provider did not report a status in time\", \"save\":\"Save Provider and Continue\", \"saveExisting\":\"Check Provider and Continue\"}), \"selectVms\":({\"title\":\"Select Virtual Machines\", \"description\":\"Select the virtual machines you want to migrate from the source provider\", \"discovered\":\"{count} VMs discovered from\", \"lastSynced\":\"Last synced {time} ago • \", \"refreshNow\":\"Refresh now\", \"availableVms\":\"Available Virtual Machines\", \"selected\":\"selected\", \"saveSelection\":\"Save Selection and Continue\", \"selectAllBanner\":({\"pageOnly\":\"Your current selection includes only VMs currently shown on the page.\", \"selectAll\":\"Select all {count} VMs from this provider\", \"allSelected\":\"Your current selection includes all VMs.\", \"clearSelection\":\"Clear Selection\"}), \"manualEntry\":({\"title\":\"Add Virtual Machines\", \"description\":\"No VMs were discovered from the provider inventory. Add VMs manually by entering their IDs and names.\", \"vmId\":\"VM ID\", \"vmIdPlaceholder\":\"e.g. vm-60527\", \"add\":\"Add\", \"added\":\"VMs added\"}), \"columns\":({\"vmName\":\"VM Name\", \"vmId\":\"VM ID\", \"os\":\"Operating System\", \"resources\":\"Resources\", \"powerState\":\"Power State\", \"network\":\"Network\", \"datastore\":\"Datastore\"})}), \"dashboard\":({\"title\":\"Virtual Machine Migration Overview\", \"description\":\"Migrate virtual machines from VMware vSphere to Harvester using cold migration for data consistency. Create a migration plan to select VMs, map networks and storage, and prepare a migration to Harvester.\", \"createPlan\":\"Create Migration\", \"tableTitle\":\"Migrations\", \"columns\":({\"status\":\"Status\", \"plan\":\"Migration Plan\", \"progress\":\"Progress\", \"mappings\":\"Mappings\"}), \"progress\":({\"failed\":\"Failed\", \"migration\":\"Migration\", \"initializingMigration\":\"Initializing migration\", \"finishedSuccessfully\":\"Finished Successfully\", \"step\":\"Step {index}\", \"vmCount\":\"{count} VMs\", \"vmId\":\"id: {id}\"})}), \"configureMappings\":({\"title\":\"Set Mappings\", \"description\":\"Map VMware networks and datastores to Harvester and Longhorn target resources\", \"save\":\"Save Mappings and Continue\", \"noTemplate\":\"Start from scratch\", \"removeMap\":\"Remove Map\", \"networkMapping\":({\"title\":\"Network Mapping\", \"description\":\"Map VMware port groups to Harvester networks\", \"placeholder\":\"Choose a Harvester network\", \"template\":\"Use existing network mapping as template\", \"options\":({\"podNetworking\":\"Management Network\", \"ignored\":\"Ignored\"})}), \"storageMapping\":({\"title\":\"Storage Mapping\", \"description\":\"Map VMware datastores to Harvester storage classes\", \"placeholder\":\"Choose a Longhorn Storage Volume\", \"template\":\"Use existing storage mapping as template\"})}), \"reviewMigration\":({\"title\":\"Review Migration Plan\", \"description\":\"Confirm your migration settings before starting the transfer of VMs to the target cluster.\", \"planName\":\"Name\", \"planNamePlaceholder\":\"e.g. my-migration-plan\", \"migrationDetails\":\"Migration Details\", \"totalVms\":\"Total VMs\", \"vcpu\":\"vCPU\", \"memory\":\"Memory\", \"storage\":\"Storage\", \"source\":\"Source\", \"targetNamespace\":\"Target Namespace\", \"migrationMode\":\"Migration Mode\", \"coldMigration\":\"Cold Migration\", \"virtualMachines\":\"Virtual Machines\", \"warningTitle\":\"Cold Migration Warning\", \"warningMessage\":\"All source VMs will be powered off, and downtime will occur during migration. Plan your maintenance window accordingly and notify relevant stakeholders\", \"startMigration\":\"Start Migration Plan\"}), \"plan\":({\"states\":({\"error\":\"Error\", \"canceled\":\"Canceled\", \"inProgress\":\"In Progress\", \"active\":\"Succeeded\"}), \"actions\":({\"start\":\"Start\", \"restart\":\"Restart\", \"stop\":\"Stop\"})})}), \"vmImport\":({\"titles\":({\"basic\":\"Basic\", \"auth\":\"Authentication\", \"pvc\":\"Volume\", \"networking\":\"Network Mapping\", \"advanced\":\"Advanced\"}), \"labels\":({\"vmimport\":\"Virtual Machine Import\", \"vmimportSourceVMWare\":\"Source VMWare\", \"vmimportSourceOpenStack\":\"Source OpenStack\", \"vmimportSourceOVA\":\"Source OVA\"}), \"fields\":({\"sourceProvider\":\"Source Provider Type\", \"sourceCluster\":\"Source Cluster\", \"vmName\":\"VM Name\", \"targetStorageClass\":\"Target Storage Class\", \"sourceNetwork\":\"Source Network Name\", \"destNetwork\":\"Destination Network\", \"interfaceModel\":\"Interface Model\", \"folder\":\"Folder\", \"diskBus\":\"Default Disk Bus\", \"defaultInterface\":\"Default Network Interface\", \"skipPreflight\":\"Skip Preflight Checks\", \"forcePowerOff\":\"Force Power Off Source VM\", \"username\":\"Username\", \"password\":\"Password\", \"caCert\":\"CA Certificate (PEM)\", \"selectSecret\":\"Select Secret\", \"createSecret\":\"Create New Credentials\", \"useSecret\":\"Use Existing Secret\", \"none\":\"None (Public URL)\"}), \"placeholders\":({\"selectCluster\":\"Select a cluster...\", \"selectProviderFirst\":\"Select a provider type first\", \"matchSource\":\"Must match the name in the source cluster\", \"folderExample\":\"e.g. /Datacenters/DC1/vm\", \"caCert\":\"-----BEGIN CERTIFICATE----- ...\"}), \"options\":({\"useDefault\":\"Use Default\"}), \"actions\":({\"addNetwork\":\"Add Network Mapping\", \"remove\":\"Remove\"}), \"errors\":({\"rfc1123\":\"Invalid format. Name must be lowercase, alphanumeric, and cannot contain spaces (e.g. \\\"my-vm-1\\\"). If your Source VM name does not match this, you must rename it on the Source cluster first.\", \"networkMappingRequired\":\"Every Network Mapping row must have a Source and Destination selected.\"}), \"openstack\":({\"fields\":({\"endpoint\":\"Identity Service Endpoint\", \"region\":\"Region\", \"projectName\":\"Project Name\", \"domainName\":\"Domain Name\", \"retryCount\":\"Upload Image Retry Count\", \"retryDelay\":\"Upload Image Retry Delay\"}), \"placeholders\":({\"endpoint\":\"e.g. https://devstack/identity\", \"region\":\"e.g. RegionOne\", \"projectName\":\"e.g. admin\", \"domainName\":\"e.g. default\", \"retryCount\":\"Default: 30\", \"retryDelay\":\"Default: 10\"})}), \"vmware\":({\"fields\":({\"endpoint\":\"vCenter Endpoint\", \"datacenter\":\"Datacenter\"}), \"placeholders\":({\"endpoint\":\"e.g. https://vscim/sdk\", \"datacenter\":\"e.g. DC0\"}), \"tooltips\":({\"datacenter\":\"The exact name of the Datacenter object in vCenter\"})}), \"ova\":({\"fields\":({\"url\":\"URL\", \"httpTimeout\":\"HTTP Timeout\"}), \"placeholders\":({\"url\":\"e.g. https://download.example.com/images/my-vm.ova\", \"httpTimeout\":\"Default: 600\"})})}), \"rancherVcluster\":({\"accessRancher\":\"Access the Rancher Dashboard\", \"hostname\":\"Hostname\", \"rancherVersion\":\"Rancher Version\", \"password\":\"Bootstrap Password\"}), \"switchFailed\":\"{action} {name} failed!\", \"nvidiaDriverToolkit\":({\"titles\":({\"basic\":\"Controller\", \"image\":\"Image\", \"driver\":\"Driver\"}), \"image\":({\"tag\":\"Image Tag\", \"repository\":\"Image Repository\"}), \"driver\":({\"location\":\"Driver Location\"}), \"enable\":({\"title\":\"Enable NVIDIA Driver Toolkit\"}), \"parsingSpecError\":\"The field 'spec.valuesContent' has invalid format.\"}), \"usbController\":({\"titles\":({\"basic\":\"Basic\"})})}), \"loadBalancer\":({\"label\":\"Load Balancers\", \"tabs\":({\"basic\":\"Basic\", \"listeners\":\"Listeners\", \"healthCheck\":\"Health Check\", \"backendServer\":\"Backend Server Selector\"}), \"workloadType\":({\"label\":\"Workload Type\", \"options\":({\"cluster\":\"Guest Kubernetes Cluster\", \"vm\":\"Virtual Machine\"})}), \"ipam\":({\"label\":\"IPAM\", \"options\":({\"dhcp\":\"DHCP\", \"pool\":\"Pool\"})}), \"ipPool\":({\"label\":\"IP Pool\", \"options\":({\"none\":\"Auto (Select IP Pool automatically)\"})}), \"listeners\":({\"name\":({\"label\":\"Name\"}), \"protocol\":({\"label\":\"Protocol\"}), \"port\":({\"label\":\"Port\"}), \"backendPort\":({\"label\":\"Backend Port\", \"placeholder\":\"e.g. 80\"})}), \"backendServerSelector\":({\"matchingVMs\":({\"matchesSome\":\"{matched, plural,\\n =0 {Matches 0 of {total, number} virtual machines in the namespace where the load balancer is.}\\n =1 {Matches 1 of {total, number} virtual machines in the namespace where the load balancer is: \\\"{sample}\\\"}\\n other {Matches {matched, number} of {total, number} existing virtual machines in the namespace where the load balancer is, including \\\"{sample}\\\"}\\n}\"})}), \"backendServers\":({\"label\":\"Backend Servers\"}), \"healthCheck\":({\"warning\":({\"portInUse\":\"Warning, the Backend Port {port} is in use in Health Check settings. If you need to update the port, update the Health Check settings accordingly.\"})})}), \"ipPool\":({\"label\":\"IP Pools\", \"network\":({\"label\":\"Virtual Machine Network\"}), \"tabs\":({\"range\":\"Range\", \"scope\":\"Scope\", \"selector\":\"Selector\"}), \"subnet\":({\"label\":\"Subnet\"}), \"startIP\":({\"label\":\"Start IP\"}), \"endIP\":({\"label\":\"End IP\"}), \"gateway\":({\"label\":\"Gateway\"}), \"namespace\":({\"label\":\"Namespace\"}), \"project\":({\"label\":\"Project\"}), \"guestCluster\":({\"label\":\"Guest Kubernetes Cluster\"}), \"availableIP\":({\"label\":\"Available IP Count\"}), \"scope\":({\"label\":\"Scope\", \"addLabel\":\"Add Scope\"}), \"priority\":({\"label\":\"Priority\"}), \"cidr\":({\"addLabel\":\"Add CIDR\"}), \"range\":({\"addLabel\":\"Add Range\"})}), \"hostNetworkConfig\":({\"label\":\"Host Networks\", \"mode\":({\"label\":\"Mode\"}), \"tabs\":({\"mode\":\"Mode\", \"nodeSelector\":\"Node Selector\"}), \"nodeSelector\":({\"addButton\":\"Add Node Selector\"}), \"underlay\":({\"label\":\"Underlay\", \"tooltip\":\"Allow this interface to act as the underlay for VM overlay networks.\", \"conflict\":\"`{name}` host network config already has underlay enabled. Only one underlay is allowed in the cluster.\", \"noKubeovn\":({\"prefix\":\"The kubeovn-operator add-on is not enabled. Click\", \"middle\":\"here\", \"suffix\":\"to enable the add-on for overlay networking.\"})}), \"vlanID\":({\"label\":\"VLAN ID\"}), \"ipRange\":({\"label\":\"IP Range ({node})\", \"placeholder\":\"e.g. 192.168.1.10/24\"}), \"ips\":({\"nodeLabel\":\"Node\", \"label\":\"IP\", \"placeholder\":\"e.g. 192.168.1.10/24\"})}), \"service\":({\"healthCheckPort\":({\"label\":\"Health Check Port\"}), \"healthCheckSuccessThreshold\":({\"label\":\"Health Check Success Threshold\", \"description\":\"If the number of times the probe continuously detects an address successfully reaches the success threshold, then the backend server can start to forward traffic.\"}), \"healthCheckFailureThreshold\":({\"label\":\"Health Check Failure Threshold\", \"description\":\"The backend server will stop forwarding traffic if the number of health check failures reaches the failure threshold.\"}), \"healthCheckPeriod\":({\"label\":\"Health Check Period\"}), \"healthCheckTimeout\":({\"label\":\"Health Check Timeout\"}), \"healthCheckEnabled\":({\"label\":\"Health Check\"})}), \"secret\":({\"label\":\"Secrets\"}), \"sriov\":({\"label\":\"SR-IOV Network Devices\", \"nodeName\":\"Node\", \"numVFs\":\"Number Of Virtual Functions\", \"vfAddresses\":\"Virtual Functions Addresses\", \"showMore\":\"Show More\", \"parentSriov\":\"Filter By Parent SR-IOV Netork Device\", \"parentSriovGPU\":\"Filter By Parent SR-IOV GPU Device\"}), \"sriovgpu\":({\"label\":\"SR-IOV GPU Devices\", \"nodeName\":\"Node\", \"numVFs\":\"Number of Virtual Functions\", \"vfAddresses\":\"Virtual Functions Addresses\", \"vGpuDevices\":\"vGPU Devices\", \"showMore\":\"Show More\", \"parentSriov\":\"Filter By Parent SR-IOV GPU\", \"noPermission\":\"Please contact your system administrator to add Harvester add-ons first.\", \"goSetting\":({\"prefix\":\"The nvidia-driver-toolkit add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it to manage your SR-IOV GPU devices.\"})}), \"migconfiguration\":({\"label\":\"vGPU MIG Configurations\", \"status\":({\"outOfSync\":\"Out of Sync\"}), \"infoBanner\":\"To configure the MIG configuration, please disable it first and re-enable after editing the configuration.\", \"profileSpec\":\"Profile Specs\", \"profileStatus\":\"Profile Status\", \"tableHeaders\":({\"profileName\":\"Profile Name\", \"total\":\"Total\", \"vGPUID\":\"vGPU ID\", \"available\":\"Available\", \"requested\":\"Requested\"}), \"requested\":\"Requested\", \"available\":\"Available\", \"total\":\"Total\", \"vGPUID\":\"vGPU ID\", \"goSriovGPU\":({\"prefix\":\"Please enable the supported GPU devices in\", \"middle\":\"SR-IOV GPU Devices\", \"suffix\":\"page to manage the vGPU MIG configurations.\"})}), \"vgpu\":({\"label\":\"vGPU Devices\", \"noPermission\":\"Please contact system administrator to add Harvester add-ons first.\", \"detachWarning\":({\"title\":\"Cannot Disable vGPU\", \"message\":\"Please detach the device from the VM and save it first before disabling this vGPU device.\"}), \"goSetting\":({\"prefix\":\"The nvidia-driver-toolkit add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it to manage your vGPU devices.\"}), \"enableGroup\":\"Enable Group\", \"disableGroup\":\"Disable Group\", \"enable\":({\"title\":\"Select vGPU\", \"type\":\"Type\"}), \"available\":\"Available Devices\", \"compatibleNodes\":\"Compatible Nodes\", \"impossibleSelection\":\"There are no hosts with all of the selected devices.\", \"howToUseDevice\":\"Use the table below to enable vGPU devices you want to use in this virtual machine.\", \"deviceInTheSameHost\":\"You can only select devices on the same host.\"}), \"usb\":({\"label\":\"USB Devices\", \"noPermission\":\"Please contact system admin to add Harvester add-ons first\", \"goSetting\":({\"prefix\":\"The pcidevices-controller add-on is not enabled, click\", \"middle\":\"here\", \"suffix\":\"to enable it to manage your USB devices.\"}), \"enableGroup\":\"Enable Group\", \"disableGroup\":\"Disable Group\", \"available\":\"Available USB Devices\", \"compatibleNodes\":\"Compatible Nodes\", \"impossibleSelection\":\"There are no hosts with all of the selected devices.\", \"howToUseDevice\":\"Use the table below to enable USB passthrough on each device you want to use in this VM.\", \"deviceInTheSameHost\":\"You can only select devices on the same host.\", \"showCompatibility\":\"Show device compatibility matrix\", \"hideCompatibility\":\"Hide device compatibility matrix\", \"claimError\":\"Error enabling passthrough on {name}\", \"unclaimError\":\"Error disabling passthrough on {name}\", \"cantUnclaim\":\"You cannot disable passthrough on a device claimed by another user.\", \"detachWarning\":({\"title\":\"Cannot Disable Passthrough\", \"message\":\"Please detach the device from the VM and save it first before disabling passthrough.\"}), \"enablePassthroughWarning\":\"Please re-enable the USB device if the device path changes in the following situations:  1) Re-plugging the USB device.  2) Rebooting the node.
An incorrect device path may cause passthrough to fail.\", \"classType\":\"Class Type\"}), \"harvesterVlanConfigMigrateDialog\":({\"targetClusterNetwork\":({\"label\":\"Target Cluster Network\", \"placeholder\":\"Choose Target Cluster Network\"})}), \"seeder\":({\"banner\":({\"enable\":({\"prefix\":\"The \\\"harvester-seeder\\\" add-on is disabled.\", \"middle\":\"Click here\", \"suffix\":\"to enable it.\"}), \"noAccess\":\"Please contact your system administrator to enable the Out-of-Band Access first.\", \"noAddon\":\"The \\\"harvester-seeder\\\" add-on does not exist, please check if it is installed.\", \"noInventory\":\"Waiting for \\\"inventories.metal.harvesterhci.io\\\" to be ready.\"}), \"inventory\":({\"host\":({\"label\":\"Host\", \"placeholder\":\"e.g. 172.16.1.1\"}), \"port\":({\"label\":\"Port\", \"placeholder\":\"e.g. 623\"}), \"insecureTLS\":({\"label\":\"Insecure TLS\"}), \"secret\":({\"label\":\"Secret\", \"create\":({\"title\":\"Add Secret\"})}), \"event\":({\"label\":\"Event\"}), \"pollingInterval\":({\"label\":\"Polling Interval\"})})})}), \"typeDescription\":({\"harvester\":\"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos and color scheme.\"}), \"advancedSettings\":({\"experimental\":\"Experimental features allow users to test and evaluate early-access functionality prior to official supported releases\", \"descriptions\":({\"harv-vlan\":\"Default Network Interface name of the VLAN network.\", \"harv-backup-target\":\"Custom backup target to store virtual machine backups.\", \"branding\":\"Branding allows administrators to globally re-brand the UI by customizing the Harvester product name, logos, and color scheme.\", \"harv-csi-driver-config\":\"Configure additional information for CSI drivers.\", \"harv-csi-online-expand-validation\":\"Allow online volume expansion for specific CSI drivers.\", \"harv-containerd-registry\":\"Containerd Registry Configuration to connect private registries.\", \"harv-log-level\":\"Configure Harvester server log level. Defaults to Info.\", \"harv-server-version\":\"Harvester server version.\", \"harv-upgrade-checker-enabled\":\"Specifies whether to enable Harvester upgrade check or not. Default is True.\", \"harv-upgrade-checker-url\":\"Default Harvester upgrade check url. Only used when the upgrade-checker-enabled is equal to True.\", \"harv-ui-source\":\"Configure how to load the UI source. The `External` option is used to load the UI from a ui-index URL, while the `Bundled` option loads the UI from the local Harvester server.\", \"harv-ui-index\":\"HTML index location for the UI.\", \"harv-cluster-registration-url\":\"Registration URL for multi-cluster management.\", \"harv-http-proxy\":\"HTTP proxy for Harvester to access external services.\", \"harv-additional-ca\":\"Custom CA root certificates for TLS validation.\", \"harv-overcommit-config\":\"Resource overcommit configuration.\", \"harv-support-bundle-timeout\":\"Support bundle timeout configuration in minutes, use 0 to disable the timeout.\", \"harv-support-bundle-file-name\":\"Support bundle file name configuration.\", \"harv-support-bundle-expiration\":\"Support bundle expiration configuration in minutes.\", \"harv-support-bundle-node-collection-timeout\":\"Support bundle node collection timeout configuration in minutes.\", \"harv-vm-force-reset-policy\":\"Configuration for the force-reset action when a virtual machine is stuck on a node that is down.\", \"harv-ssl-parameters\":\"Custom SSL Parameters for TLS validation.\", \"harv-storage-network\":\"Longhorn storage-network setting.\", \"harv-rwx-network\":\"Configure RWX network behavior for shared or dedicated storage network usage.\", \"harv-support-bundle-namespaces\":\"Select additional namespaces to include in the support bundle.\", \"harv-auto-disk-provision-paths\":\"Specify the disks(using glob pattern) that Harvester will automatically add as virtual machine storage.\", \"harv-support-bundle-image\":\"Support bundle image configuration. Find different versions in rancher/support-bundle-kit.\", \"harv-release-download-url\":\"This setting allows you to configure the upgrade release download URL address. Harvester will get the ISO URL and checksum value from the ($URL/$VERSION/version.yaml) file hosted by the configured URL.\", \"harv-default-vm-termination-grace-period-seconds\":\"Configure the virtual machine termination grace period for virtual machine stop.\", \"harv-ntp-servers\":\"Configure NTP server. You can configure multiple IPv4 addresses or host addresses.\", \"harv-auto-rotate-rke2-certs\":\"The certificate rotation mechanism relies on Rancher. Harvester will automatically update certificates generation to trigger rotation.\", \"harv-kubeconfig-default-token-ttl-minutes\":\"TTL (in minutes) applied on Harvester administration kubeconfig files. Default is 0, which means to never expire.\", \"harv-longhorn-v2-data-engine-enabled\":\"Enable the Longhorn V2 data engine. Default is false.
Changing this setting will restart RKE2 on all nodes. This will not affect running VM workloads.
If you see \\\"not enough hugepages-2Mi capacity\\\" errors when enabling this setting, wait a minute for the error to clear. If the error remains, reboot the affected node.
\", \"harv-longhorn-v2-data-engine-hugepage-enabled\":\"Enable hugepages when using the Longhorn V2 data engine. Default is true. Disabling hugepages reduces memory pressure on low-spec nodes and increases deployment flexibility. However, performance may be lower compared to running with hugepages.\", \"harv-longhorn-v2-data-engine-memory-size\":\"Configure the amount of memory allocated to the SPDK target daemon when using the Longhorn V2 data engine. Default is 2048 MiB.\", \"harv-additional-guest-memory-overhead-ratio\":\"The ratio for kubevirt to adjust the VM overhead memory. The value could be zero, empty value or floating number between 1.0 and 10.0, default to 1.5.\", \"harv-upgrade-config\":\"Configure image preloading and VM restore options for upgrades. See related fields in settings/upgrade-config\", \"harv-vm-migration-network\":\"Segregated network for VM migration traffic.\", \"harv-rancher-cluster\":\"Configure Rancher cluster integration settings for guest cluster management.\", \"harv-max-hotplug-ratio\":\"The ratio for kubevirt to limit the maximum CPU and memory that can be hotplugged to a VM. The value could be an integer between 1 and 20, default to 4.\", \"harv-kubevirt-migration\":\"Configure cluster-wide KubeVirt live migration parameters.\", \"harv-instance-manager-resources\":\"Configure resource percentage reservations for Longhorn instance manager V1 and V2. Valid instance manager CPU range between 0 - 40.\", \"harv-cluster-pod-security-standard\":\"Enforce Kubernetes Pod Security Standards (PSS) at the cluster level.\"})}), \"typeLabel\":({\"kubevirt.io.virtualmachine\":\"{count, plural,\\n one { Virtual Machine }\\n other { Virtual Machines }\\n}\", \"harvesterhci.io.virtualmachineimage\":\"{count, plural,\\n one { Image }\\n other { Images }\\n}\", \"harvesterhci.io.keypair\":\"{count, plural,\\n one { SSH Key }\\n other { SSH Keys }\\n}\", \"harvesterhci.io.host\":\"{count, plural,\\n one { Host }\\n other { Hosts }\\n}\", \"harvesterhci.io.networkattachmentdefinition\":\"{count, plural,\\n one { Virtual Machine Network }\\n other { Virtual Machine Networks }\\n}\", \"harvesterhci.io.volume\":\"{count, plural,\\n one { Volume }\\n other { Volumes }\\n}\", \"harvesterhci.io.user\":\"{count, plural,\\n one { User }\\n other { Users }\\n}\", \"harvesterhci.io.setting\":\"{count, plural,\\n one { Setting }\\n other { Settings }\\n}\", \"harvesterhci.io.virtualmachinetemplateversion\":\"{count, plural,\\n one { Template }\\n other { Templates }\\n}\", \"harvesterhci.io.schedulevmbackup\":\"{count, plural,\\n one { Virtual Machine Schedule }\\n other { Virtual Machine Schedules }\\n}\", \"harvesterhci.io.virtualmachinebackup\":\"{count, plural,\\n one { Virtual Machine Backup }\\n other { Virtual Machine Backups }\\n}\", \"kubeovn.io.vpc\":\"{count, plural,\\n one { Virtual Private Cloud }\\n other { Virtual Private Clouds }\\n}\", \"kubeovn.io.vlan\":\"{count, plural,\\n one { VLAN Network }\\n other { VLAN Networks }\\n}\", \"kubeovn.io.providernetwork\":\"{count, plural,\\n one { Provider Network }\\n other { Provider Networks }\\n}\", \"kubeovn.io.vpcnatgateway\":\"{count, plural,\\n one { NAT Gateway }\\n other { NAT Gateways }\\n}\", \"kubeovn.io.iptablessnatrule\":\"{count, plural,\\n one { Source Rule }\\n other { Source Rules }\\n}\", \"kubeovn.io.iptablesdnatrule\":\"{count, plural,\\n one { Destination Rule }\\n other { Destination Rules }\\n}\", \"kubeovn.io.iptableseip\":\"{count, plural,\\n one { External IP }\\n other { External IPs }\\n}\", \"networking.k8s.io.networkpolicy\":\"{count, plural,\\n one { Network Policy }\\n other { Network Policies }\\n}\", \"harvesterhci.io.cloudtemplate\":\"{count, plural,\\n one { Cloud Configuration Template }\\n other { Cloud Configuration Templates }\\n}\", \"harvesterhci.io.volumesnapshot\":\"{count, plural,\\n one { Volume Snapshot }\\n other { Volume Snapshots }\\n}\", \"harvesterhci.io.vmsnapshot\":\"{count, plural,\\n one { Virtual Machine Snapshot }\\n other { Virtual Machine Snapshots }\\n}\", \"network.harvesterhci.io.vlanconfig\":\"{count, plural,\\n one { Network Configuration }\\n other { Network Configurations }\\n}\", \"harvesterhci.io.monitoring.alertmanagerconfig\":\"{count, plural,\\n one { Alertmanager Configuration }\\n other { Alertmanager Configurations }\\n}\", \"harvesterhci.io.logging.clusterflow\":\"{count, plural,\\n one { Cluster Flow }\\n other { Cluster Flows }\\n}\", \"harvesterhci.io.logging.clusteroutput\":\"{count, plural,\\n one { Cluster Output }\\n other { Cluster Outputs }\\n}\", \"harvesterhci.io.logging.flow\":\"{count, plural,\\n one { Flow }\\n other { Flows }\\n}\", \"harvesterhci.io.logging.output\":\"{count, plural,\\n one { Output }\\n other { Outputs }\\n}\", \"harvesterhci.io.storage\":\"{count, plural,\\n one { Storage Class }\\n other { Storage Classes }\\n}\", \"devices.harvesterhci.io.pcidevice\":\"{count, plural,\\n one { PCI Device }\\n other { PCI Devices }\\n}\", \"network.harvesterhci.io.clusternetwork\":\"{count, plural,\\n one { Cluster Network }\\n other { Cluster Networks }\\n}\", \"network.harvesterhci.io.hostnetworkconfig\":\"{count, plural,\\n one { Host Network }\\n other { Host Networks }\\n}\", \"harvesterhci.io.addon\":\"{count, plural,\\n one { Add-on }\\n other { Add-ons }\\n}\", \"devices.harvesterhci.io.sriovnetworkdevice\":\"{count, plural,\\n one { SR-IOV Network Device }\\n other { SR-IOV Network Devices }\\n}\", \"devices.harvesterhci.io.sriovgpudevice\":\"{count, plural,\\n one { SR-IOV GPU Device }\\n other { SR-IOV GPU Devices }\\n}\", \"devices.harvesterhci.io.vgpudevice\":\"{count, plural,\\n one { vGPU Device }\\n other { vGPU Devices }\\n}\", \"devices.harvesterhci.io.migconfiguration\":\"{count, plural,\\n one { vGPU MIG Configuration }\\n other { vGPU MIG Configurations }\\n}\", \"harvesterhci.io.secret\":\"{count, plural,\\n one { Secret }\\n other { Secrets }\\n}\", \"harvesterhci.io.blockdevice\":\"{count, plural,\\n one { Disk }\\n other { Disks }\\n}\", \"loadbalancer.harvesterhci.io.loadbalancer\":\"{count, plural,\\n one { Load Balancer }\\n other { Load Balancers }\\n}\", \"loadbalancer.harvesterhci.io.ippool\":\"{count, plural,\\n one { IP Pool }\\n other { IP Pools }\\n}\", \"migration.harvesterhci.io.openstacksource\":\"{count, plural,\\n one { OpenStack Source }\\n other { OpenStack Sources }\\n}\", \"migration.harvesterhci.io.vmwaresource\":\"{count, plural,\\n one { VMware Source }\\n other { VMware Sources }\\n}\", \"migration.harvesterhci.io.ovasource\":\"{count, plural,\\n one { OVA Source }\\n other { OVA Sources }\\n}\", \"migration.harvesterhci.io.virtualmachineimport\":\"{count, plural,\\n one { Virtual Machine Import }\\n other { Virtual Machine Imports }\\n}\", \"forklift.konveyor.io.provider\":\"{count, plural,\\n one { Provider }\\n other { Providers }\\n}\", \"forklift.konveyor.io.networkmap\":\"{count, plural,\\n one { Network Map }\\n other { Network Maps }\\n}\", \"forklift.konveyor.io.storagemap\":\"{count, plural,\\n one { Storage Map }\\n other { Storage Maps }\\n}\", \"forklift.konveyor.io.plan\":\"{count, plural,\\n one { Migration Plan }\\n other { Migration Plans }\\n}\", \"forklift.konveyor.io.migration\":\"{count, plural,\\n one { Migration }\\n other { Migrations }\\n}\"})})];\nmodule.exports = doc.length <= 1 ? doc[0] : doc;"],"names":["doc","module","exports","length"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.496.js.map b/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.496.js.map
index 2680b0de..e58190c2 100644
--- a/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.496.js.map
+++ b/extensions/harvester/1.9.0-rc1/plugin/harvester-1.9.0-rc1.umd.min.496.js.map
@@ -1 +1 @@
-{"version":3,"file":"harvester-1.9.0-rc1.umd.min.496.js","mappings":"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","sources":["webpack://harvester-1.9.0-rc1/./edit/harvesterhci.io.host/HarvesterKsmtuned.vue","webpack://harvester-1.9.0-rc1/./edit/harvesterhci.io.host/HarvesterKsmtuned.vue?c10f","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue?8a0b","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue?2264","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue?5e1c","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue?a2e2","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue?bad2","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue?66f1","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue?917b","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue?59b2","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue?76e0","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue?b372","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue?e7b1","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue?1e8a","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue?a6c8","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue?2baf","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue?1cdc","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue?9a64","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue?afec","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue?2273","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue?d61b","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue?0217","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue?157f","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue?89c5","webpack://harvester-1.9.0-rc1/./mixins/harvester-disk.js","webpack://harvester-1.9.0-rc1/./utils/error.js","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue?ee1e","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue?5ba3","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue?80d9","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue?9d3b","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue?6cbc","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue?f41c","webpack://harvester-1.9.0-rc1/./edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue?2b42"],"sourcesContent":["\n\n\n
\n \n\n \n \n\n \n\n
\n \n
\n \n\n \n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n \n \n
\n\n","import { render } from \"./HarvesterKsmtuned.vue?vue&type=template&id=37cdc92c\"\nimport script from \"./HarvesterKsmtuned.vue?vue&type=script&lang=js\"\nexport * from \"./HarvesterKsmtuned.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n
\n \n\n\n\n","import { render } from \"./StateWithPopover.vue?vue&type=template&id=61fe0c74&scoped=true\"\nimport script from \"./StateWithPopover.vue?vue&type=script&lang=js\"\nexport * from \"./StateWithPopover.vue?vue&type=script&lang=js\"\n\nimport \"./StateWithPopover.vue?vue&type=style&index=0&id=61fe0c74&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-61fe0c74\"]])\n\nexport default __exports__","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".consumption-gauge .numbers{display:flex;flex-direction:row;justify-content:space-between}.consumption-gauge .numbers-stats{display:flex;flex-direction:row;align-items:center;gap:10px;align-self:baseline}.consumption-gauge .numbers .percentage{font-weight:700}.consumption-gauge .numbers .percentage i{margin-right:10px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".copy-to-clipboard-text[data-v-037ba460]{white-space:nowrap}.copy-to-clipboard-text.plain[data-v-037ba460]{color:var(--body-text)}.copy-to-clipboard-text.plain[data-v-037ba460]:hover{text-decoration:none}.copy-to-clipboard-text[data-v-037ba460]:active{color:var(--primary-keyboard-focus)}.copy-to-clipboard-text.copied[data-v-037ba460]{pointer-events:none;color:var(--success)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".parent[data-v-fa34696c]{display:grid;grid-template-areas:\\\"progress text\\\";grid-template-columns:auto 80px;align-items:center}.parent .progress[data-v-fa34696c]{background-color:#b8c3dc;width:100%}.parent .progress-box[data-v-fa34696c]{grid-area:progress}.parent .text[data-v-fa34696c]{grid-area:text;text-align:center}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".state[data-v-af7a018c]{display:flex;justify-content:left}.state .icon-warning[data-v-af7a018c]{margin-top:2px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".badge-state[data-v-61b045e5]{padding:5px 10px;border:1px solid transparent;border-radius:20px}.badge-state.bg-info[data-v-61b045e5]{border-color:var(--primary)}.badge-state.bg-error[data-v-61b045e5]{border-color:var(--error)}.badge-state.bg-warning[data-v-61b045e5]{border-color:var(--warning)}.badge-state.bg-success[data-v-61b045e5]{color:var(--success);border-color:var(--success);background:transparent}.sortable-table TD .badge-state[data-v-61b045e5]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;word-wrap:break-word;display:inline-block;max-width:100%;position:relative;padding:2px 10px 1px 10px;font-size:1em;max-width:200px;font-size:.85em;vertical-align:middle}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vfs[data-v-3622b06f]{min-width:380px}.vfs .show-more[data-v-3622b06f]{font-size:12px}.popover .popover-inner .vfs-popup a[data-v-3622b06f]{color:var(--link)}.popover .popover-inner .vfs-popup a[data-v-3622b06f]:hover{text-decoration:underline;color:var(--body-text)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vgpudevices[data-v-e3909f16]{min-width:380px}.vgpudevices .show-more[data-v-e3909f16]{font-size:12px}.popover .popover-inner .vgpu-popup a[data-v-e3909f16]{color:var(--link)}.popover .popover-inner .vgpu-popup a[data-v-e3909f16]:hover{text-decoration:underline;color:var(--body-text)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".state[data-v-3c767fd4]{display:flex;justify-content:space-between}.state .icon-warning[data-v-3c767fd4]{margin-top:2px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".state[data-v-e0f7fbca]{display:flex}.state .icon-warning[data-v-e0f7fbca]{margin-top:2px}.warning-message[data-v-e0f7fbca]:first-letter{text-transform:uppercase}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".text[data-v-d543d746]{text-align:center}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".state[data-v-61fe0c74]{display:flex}.state .icon-warning[data-v-61fe0c74]{margin-top:2px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a \n","import { render } from \"./Card.vue?vue&type=template&id=52307124&scoped=true&ts=true\"\nimport script from \"./Card.vue?vue&type=script&lang=ts\"\nexport * from \"./Card.vue?vue&type=script&lang=ts\"\n\nimport \"./Card.vue?vue&type=style&index=0&id=52307124&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-52307124\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withKeys as _withKeys, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"switch hand\" }\nconst _hoisted_2 = [\"checked\", \"aria-label\"]\nconst _hoisted_3 = {\n ref: \"switchChrome\",\n class: \"slider round\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: _normalizeClass([\"toggle-container\", {'toggle-disabled': _ctx.disabled}])\n }, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"label no-select hand\", { active: !_ctx.state}]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.toggle(false)))\n }, _toDisplayString(_ctx.offLabel), 3),\n _createElementVNode(\"label\", _hoisted_1, [\n _createElementVNode(\"input\", {\n ref: \"switchInput\",\n type: \"checkbox\",\n role: \"switch\",\n checked: _ctx.state,\n \"aria-label\": _ctx.onLabel,\n onInput: _cache[1] || (_cache[1] = ($event: any) => (_ctx.toggle(null))),\n onKeydown: _cache[2] || (_cache[2] = _withKeys(($event: any) => (_ctx.toggle(null)), [\"enter\"]))\n }, null, 40, _hoisted_2),\n _createElementVNode(\"span\", _hoisted_3, null, 512)\n ]),\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"label no-select hand\", { active: _ctx.state}]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.toggle(true)))\n }, _toDisplayString(_ctx.onLabel), 3)\n ], 2))\n}","\n\n\n \n {{ offLabel }}\n \n {{ onLabel }}\n \n\n\n\n","import { render } from \"./ToggleSwitch.vue?vue&type=template&id=fcfd5604&scoped=true&ts=true\"\nimport script from \"./ToggleSwitch.vue?vue&type=script&lang=ts\"\nexport * from \"./ToggleSwitch.vue?vue&type=script&lang=ts\"\n\nimport \"./ToggleSwitch.vue?vue&type=style&index=0&id=fcfd5604&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fcfd5604\"]])\n\nexport default __exports__","import { ref } from 'vue';\n\n/**\n * Manages a collection of dropdown items. Includes methods for registering\n * dropdown items and providing the collection to descendant components.\n *\n * @returns Dropdown collection methods and state.\n */\nexport const useDropdownCollection = () => {\n const dropdownItems = ref([]);\n const dropdownContainer = ref(null);\n const firstDropdownItem = ref(null);\n const lastDropdownItem = ref(null);\n\n /**\n * Registers the dropdown container and initializes dropdown items.\n * @param target - The dropdown container element.\n */\n const registerDropdownCollection = (target: HTMLElement | null) => {\n dropdownContainer.value = target;\n if (dropdownContainer.value?.firstElementChild instanceof HTMLElement) {\n registerDropdownItems();\n if (dropdownItems.value[0] instanceof HTMLElement) {\n firstDropdownItem.value = dropdownItems.value[0];\n }\n\n const lastItem = dropdownItems.value[dropdownItems.value.length - 1];\n\n if (lastItem instanceof HTMLElement) {\n lastDropdownItem.value = lastItem;\n }\n }\n };\n\n /**\n * Registers dropdown items by querying the dropdown container for elements.\n */\n const registerDropdownItems = () => {\n dropdownItems.value = [];\n const dropdownNodeList = dropdownContainer.value?.querySelectorAll('[dropdown-menu-item]');\n\n dropdownNodeList?.forEach((element) => {\n dropdownItems.value.push(element);\n });\n };\n\n return {\n dropdownItems,\n firstDropdownItem,\n lastDropdownItem,\n dropdownContainer,\n registerDropdownCollection,\n };\n};\n","import { ref, provide, nextTick, EmitFn } from 'vue';\nimport { useDropdownCollection } from './useDropdownCollection';\nimport { RcButtonType } from '@components/RcButton';\n\n/**\n * Composable that provides the context for a dropdown menu. Includes methods\n * and state for managing the dropdown's visibility, focus, and keyboard\n * interactions.\n *\n * @param firstDropdownItem - First item in the dropdown menu.\n * @returns Dropdown context methods and state. Used for programmatic\n * interactions and setting focus.\n */\nexport const useDropdownContext = (emit: EmitFn<['update:open']>) => {\n const {\n dropdownItems,\n firstDropdownItem,\n lastDropdownItem,\n dropdownContainer,\n registerDropdownCollection,\n } = useDropdownCollection();\n\n const isMenuOpen = ref(false);\n\n /**\n * Controls the visibility of the dropdown menu.\n * @param show - Whether to show or hide the dropdown menu.\n */\n const showMenu = (show: boolean) => {\n if (!show) {\n didKeydown.value = false;\n }\n isMenuOpen.value = show;\n emit('update:open', show);\n };\n\n /**\n * A ref for the dropdown trigger element. Used for programmatic\n * interactions and setting focus.\n */\n const dropdownTrigger = ref(null);\n\n /**\n * Registers the dropdown trigger element.\n * @param triggerRef - The dropdown trigger element.\n */\n const registerTrigger = (triggerRef: RcButtonType) => {\n dropdownTrigger.value = triggerRef;\n };\n\n /**\n * Returns focus to the dropdown trigger and closes the menu.\n */\n const returnFocus = () => {\n showMenu(false);\n dropdownTrigger?.value?.focus();\n };\n\n /**\n * Tracks if a keydown event has occurred. Important for distinguishing keyboard\n * events from mouse events.\n */\n const didKeydown = ref(false);\n\n const handleKeydown = () => {\n didKeydown.value = true;\n };\n\n /**\n * Sets focus to the first dropdown item if a keydown event has occurred.\n */\n const setFocus = (direction: 'down' | 'up') => {\n nextTick(() => {\n if (!didKeydown.value) {\n dropdownContainer.value?.focus();\n\n return;\n }\n\n if (direction === 'down') {\n firstDropdownItem.value?.focus();\n } else if (direction === 'up') {\n lastDropdownItem.value?.focus();\n }\n\n didKeydown.value = false;\n });\n };\n\n const setDropdownDimensions = (target: HTMLElement | null) => {\n if (!target) {\n return;\n }\n\n const { top, bottom } = target.getBoundingClientRect();\n const padding = 32;\n\n // The dropdown exceeds the top or bottom edge of the screen (or both).\n if (top - padding < 0 || bottom + padding > window.innerHeight) {\n const height = Math.min(\n bottom,\n window.innerHeight - top,\n window.innerHeight\n );\n\n target.style.height = `${ height - padding }px`;\n }\n };\n\n /**\n * Provides Dropdown Context data and methods to descendants of RcDropdown.\n * Accessed in descendents with the `inject()` function.\n */\n const provideDropdownContext = () => {\n provide('dropdownContext', {\n showMenu,\n registerTrigger,\n isMenuOpen,\n dropdownItems,\n close: () => returnFocus(),\n focusFirstElement: () => {\n setFocus('down');\n },\n handleKeydown,\n });\n };\n\n return {\n isMenuOpen,\n showMenu,\n returnFocus,\n setFocus,\n provideDropdownContext,\n registerDropdownCollection,\n handleKeydown,\n setDropdownDimensions,\n };\n};\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, withModifiers as _withModifiers, withKeys as _withKeys, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\n\nimport { ref } from 'vue';\nimport { useClickOutside } from '@shell/composables/useClickOutside';\nimport { useDropdownContext } from '@components/RcDropdown/useDropdownContext';\n\nimport type { Placement } from 'floating-vue';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'RcDropdown',\n props: {\n ariaLabel: {},\n distance: {},\n placement: { default: 'bottom-end' }\n },\n emits: ['update:open'],\n setup(__props: any, { emit: __emit }) {\n\n/**\n * Offers a list of choices to the user, such as a set of actions or functions.\n * Opened by activating RcDropdownTrigger.\n *\n * Example:\n *\n * \n * \n * \n * \n * \n * \n * Action 1\n * \n * \n * \n * Action 2\n * \n * \n * \n */\n\n\nconst emit = __emit;\n\nconst {\n isMenuOpen,\n showMenu,\n returnFocus,\n setFocus,\n provideDropdownContext,\n registerDropdownCollection,\n handleKeydown,\n setDropdownDimensions\n} = useDropdownContext(emit);\n\nprovideDropdownContext();\n\nconst popperContainer = ref(null);\nconst dropdownTarget = ref(null);\n\nuseClickOutside(dropdownTarget, () => showMenu(false));\n\nconst applyShow = () => {\n setDropdownDimensions(dropdownTarget.value);\n registerDropdownCollection(dropdownTarget.value);\n setFocus('down');\n};\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_v_dropdown = _resolveComponent(\"v-dropdown\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createVNode(_component_v_dropdown, {\n \"no-auto-focus\": \"\",\n triggers: [],\n shown: _unref(isMenuOpen),\n \"auto-hide\": false,\n container: popperContainer.value,\n placement: __props.placement,\n distance: __props.distance,\n onApplyShow: applyShow\n }, {\n popper: _withCtx(() => [\n _createElementVNode(\"div\", {\n ref_key: \"dropdownTarget\",\n ref: dropdownTarget,\n class: \"dropdownTarget\",\n tabindex: \"-1\",\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"dropdown-menu-collection\": \"\",\n \"aria-label\": __props.ariaLabel || 'Dropdown Menu',\n onKeydown: [\n _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_unref(handleKeydown) && _unref(handleKeydown)(...args))),\n _cache[1] || (_cache[1] = _withKeys(_withModifiers(($event: any) => (_unref(setFocus)('down')), [\"prevent\"]), [\"down\"])),\n _cache[2] || (_cache[2] = _withKeys(_withModifiers(($event: any) => (_unref(setFocus)('up')), [\"prevent\"]), [\"up\"]))\n ]\n }, [\n _renderSlot(_ctx.$slots, \"dropdownCollection\")\n ], 40, _hoisted_1)\n ]),\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"shown\", \"container\", \"placement\", \"distance\"]),\n _createElementVNode(\"div\", {\n ref_key: \"popperContainer\",\n ref: popperContainer,\n class: \"popperContainer\",\n onKeydown: [\n _cache[3] || (_cache[3] = _withKeys(($event: any) => (_unref(showMenu)(false)), [\"tab\"])),\n _cache[4] || (_cache[4] = _withKeys(\n//@ts-ignore\n(...args) => (_unref(returnFocus) && _unref(returnFocus)(...args)), [\"escape\"]))\n ]\n }, null, 544)\n ], 64))\n}\n}\n\n})","\n\n\n \n \n \n \n\n \n
\n \n \n \n
\n \n \n
\n \n
\n\n\n\n","import script from \"./RcDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RcDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RcDropdown.vue?vue&type=style&index=0&id=78ba98f8&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-78ba98f8\"]])\n\nexport default __exports__","import { Ref, ref } from 'vue';\nimport type { RcButtonType } from '@components/RcButton';\nimport { ButtonVariant, ButtonSize } from '@components/RcButton/types';\n\nexport type DropdownContext = {\n handleKeydown: () => void;\n showMenu: (show: boolean) => void;\n registerTrigger: (triggerRef: RcButtonType | null) => void;\n dropdownItems: Ref;\n focusFirstElement: () => void;\n isMenuOpen: Ref;\n close: () => void;\n}\n\nexport const defaultContext: DropdownContext = {\n handleKeydown: () => null,\n showMenu: (_show: boolean | null) => null,\n registerTrigger: (_triggerRef: RcButtonType | null) => null,\n dropdownItems: ref([]),\n focusFirstElement: () => null,\n isMenuOpen: ref(false),\n close: () => null,\n};\n\nexport type DropdownOption = {\n action?: string;\n divider?: boolean;\n enabled: boolean;\n icon?: string;\n svg?: string;\n label?: string;\n total: number;\n allEnabled: boolean;\n anyEnabled: boolean;\n available: number;\n bulkable?: boolean;\n bulkAction?: string;\n altAction?: string;\n weight?: number;\n}\n\nexport type RcDropdownMenuComponentProps = {\n options: DropdownOption[];\n buttonVariant?: ButtonVariant;\n buttonSize?: ButtonSize;\n buttonAriaLabel?: string;\n dropdownAriaLabel?: string;\n dataTestid?: string;\n}\n","import { inject } from 'vue';\nimport { DropdownContext, defaultContext } from './types';\n\nexport const useDropdownItem = () => {\n const { dropdownItems, close } = inject('dropdownContext') || defaultContext;\n\n /**\n * Handles keydown events to navigate between dropdown items.\n * @param {KeyboardEvent} e - The keydown event.\n */\n const handleKeydown = (e: KeyboardEvent) => {\n const activeItem = document.activeElement;\n\n const activeIndex = dropdownItems.value.indexOf(activeItem || new HTMLElement());\n\n if (activeIndex < 0) {\n return;\n }\n\n const shouldAdvance = e.key === 'ArrowDown';\n\n const newIndex = findNewIndex(shouldAdvance, activeIndex, dropdownItems.value);\n\n if (dropdownItems.value[newIndex] instanceof HTMLElement) {\n dropdownItems.value[newIndex].focus();\n }\n };\n\n /**\n * Finds the new index for the dropdown item based on the key pressed.\n * @param shouldAdvance - Whether to advance to the next or previous item.\n * @param activeIndex - Current active index.\n * @param itemsArr - Array of dropdown items.\n * @returns The new index.\n */\n const findNewIndex = (shouldAdvance: boolean, activeIndex: number, itemsArr: Element[]) => {\n const newIndex = shouldAdvance ? activeIndex + 1 : activeIndex - 1;\n\n if (newIndex > itemsArr.length - 1) {\n return 0;\n }\n\n if (newIndex < 0) {\n return itemsArr.length - 1;\n }\n\n return newIndex;\n };\n\n /**\n * Handles keydown events to activate the dropdown item.\n * @param e - The keydown event.\n */\n const handleActivate = (e: KeyboardEvent) => {\n if (e?.target instanceof HTMLElement) {\n e?.target?.click();\n }\n };\n\n /**\n * Scroll the item into view smoothly\n * @param event FocusIn Event\n */\n const scrollIntoView = (event: Event) => {\n const target = event.target;\n\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n const t = target as HTMLElement;\n\n // If a button was clicked, then do not scroll into view, as this will scroll to make the button\n // visible and the click will be ignored - so just return, so that the click works as expected\n if (t.tagName === 'BUTTON') {\n return;\n }\n\n target?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n });\n };\n\n return {\n handleKeydown,\n close,\n handleActivate,\n scrollIntoView,\n };\n};\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, withModifiers as _withModifiers, unref as _unref, withKeys as _withKeys, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"disabled\", \"aria-disabled\"]\n\nimport { useDropdownItem } from '@components/RcDropdown/useDropdownItem';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'RcDropdownItem',\n props: { disabled: Boolean },\n emits: ['click'],\n setup(__props, { emit: __emit }) {\n\n/**\n * An item for a dropdown menu. Used in conjunction with RcDropdown.\n */\nconst props = __props;\nconst emits = __emit;\n\nconst {\n handleKeydown,\n close,\n handleActivate,\n scrollIntoView,\n} = useDropdownItem();\n\nconst handleClick = (e: MouseEvent) => {\n if (props.disabled) {\n return;\n }\n\n emits('click', e);\n close();\n};\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref: \"dropdownMenuItem\",\n \"dropdown-menu-item\": \"\",\n tabindex: \"-1\",\n role: \"menuitem\",\n disabled: __props.disabled || null,\n \"aria-disabled\": __props.disabled || false,\n onClick: _withModifiers(handleClick, [\"stop\"]),\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(\n//@ts-ignore\n(...args) => (_unref(handleActivate) && _unref(handleActivate)(...args)), [\"enter\",\"space\"])),\n _cache[1] || (_cache[1] = _withKeys(_withModifiers(\n//@ts-ignore\n(...args) => (_unref(handleKeydown) && _unref(handleKeydown)(...args)), [\"prevent\",\"stop\"]), [\"up\",\"down\"]))\n ],\n onMousedown: _withModifiers(() => {/*We use this to prevent clicks from triggering the @focusin below. When we scroll on a click it prevents the action from occurring on the first click.*/}, [\"prevent\"]),\n onFocusin: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_unref(scrollIntoView) && _unref(scrollIntoView)(...args)))\n }, [\n _renderSlot(_ctx.$slots, \"before\"),\n _renderSlot(_ctx.$slots, \"default\")\n ], 40, _hoisted_1))\n}\n}\n\n})","\n\n\n
{/*We use this to prevent clicks from triggering the @focusin below. When we scroll on a click it prevents the action from occurring on the first click.*/}\"\n @focusin=\"scrollIntoView\"\n >\n \n \n \n \n \n \n
\n\n\n\n","import script from \"./RcDropdownItem.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RcDropdownItem.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RcDropdownItem.vue?vue&type=style&index=0&id=b3f1b0ce&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3f1b0ce\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, unref as _unref, withCtx as _withCtx, createVNode as _createVNode, withModifiers as _withModifiers, withKeys as _withKeys, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"disabled\", \"aria-disabled\"]\n\nimport { Checkbox as RcCheckbox } from '@components/Form/Checkbox';\nimport { useDropdownItem } from '@components/RcDropdown/useDropdownItem';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'RcDropdownItemCheckbox',\n props: { modelValue: Boolean, disabled: Boolean },\n emits: ['click'],\n setup(__props, { emit: __emit }) {\n\n/**\n * An item for a dropdown menu. Used in conjunction with RcDropdown.\n */\nconst props = __props;\nconst emits = __emit;\n\nconst { handleKeydown, handleActivate, scrollIntoView } = useDropdownItem();\n\nconst handleClick = () => {\n if (props.disabled) {\n return;\n }\n\n emits('click', !props.modelValue);\n};\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref: \"dropdownMenuItem\",\n \"dropdown-menu-item\": \"\",\n tabindex: \"-1\",\n role: \"menuitemcheckbox\",\n disabled: __props.disabled || null,\n \"aria-disabled\": __props.disabled || false,\n onClick: _withModifiers(handleClick, [\"stop\"]),\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(\n//@ts-ignore\n(...args) => (_unref(handleActivate) && _unref(handleActivate)(...args)), [\"enter\",\"space\"])),\n _cache[1] || (_cache[1] = _withKeys(_withModifiers(\n//@ts-ignore\n(...args) => (_unref(handleKeydown) && _unref(handleKeydown)(...args)), [\"prevent\",\"stop\"]), [\"up\",\"down\"]))\n ],\n onFocusin: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_unref(scrollIntoView) && _unref(scrollIntoView)(...args)))\n }, [\n _createVNode(_unref(RcCheckbox), { value: __props.modelValue }, {\n label: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"value\"])\n ], 40, _hoisted_1))\n}\n}\n\n})","import script from \"./RcDropdownItemCheckbox.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RcDropdownItemCheckbox.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RcDropdownItemCheckbox.vue?vue&type=style&index=0&id=42e011ee&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-42e011ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withModifiers as _withModifiers, withKeys as _withKeys, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"disabled\", \"aria-disabled\"]\n\nimport LabeledSelect from '@shell/components/form/LabeledSelect';\nimport { useDropdownItem } from '@components/RcDropdown/useDropdownItem';\nimport { ref } from 'vue';\n\ntype LabeledSelectComponent = {\n focusSearch: () => void;\n};\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'RcDropdownItemSelect',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n disabled: Boolean,\n options: {\n type: Array,\n default() {\n return [];\n }\n },\n label: {\n type: String,\n default: ''\n }\n},\n emits: ['click', 'select'],\n setup(__props, { emit: __emit }) {\n\n/**\n * An item for a dropdown menu. Used in conjunction with RcDropdown.\n */\n\nconst emits = __emit;\n\nconst { handleKeydown, handleActivate, scrollIntoView } = useDropdownItem();\n\nconst dropdownMenuItem = ref(null);\nconst menuItemSelect = ref(null);\n\nconst handleClick = () => {\n menuItemSelect?.value?.focusSearch();\n};\n\nconst focusMenuItem = () => {\n dropdownMenuItem?.value?.focus();\n};\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref_key: \"dropdownMenuItem\",\n ref: dropdownMenuItem,\n \"dropdown-menu-item\": \"\",\n tabindex: \"-1\",\n role: \"menuitem\",\n disabled: __props.disabled || null,\n \"aria-disabled\": __props.disabled || false,\n onClick: _withModifiers(handleClick, [\"stop\"]),\n onKeydown: [\n _cache[2] || (_cache[2] = _withKeys(\n//@ts-ignore\n(...args) => (_unref(handleActivate) && _unref(handleActivate)(...args)), [\"enter\",\"space\"])),\n _cache[3] || (_cache[3] = _withKeys(_withModifiers(\n//@ts-ignore\n(...args) => (_unref(handleKeydown) && _unref(handleKeydown)(...args)), [\"prevent\",\"stop\"]), [\"up\",\"down\"]))\n ],\n onFocusin: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_unref(scrollIntoView) && _unref(scrollIntoView)(...args)))\n }, [\n _createVNode(_unref(LabeledSelect), {\n ref_key: \"menuItemSelect\",\n ref: menuItemSelect,\n value: __props.modelValue,\n label: __props.label,\n options: __props.options,\n clearable: false,\n placement: \"top\",\n onKeydown: _cache[0] || (_cache[0] = _withKeys(_withModifiers(() => {}, [\"stop\"]), [\"enter\"])),\n \"onUpdate:value\": _cache[1] || (_cache[1] = ($event: any) => (emits('select', $event))),\n onOnClose: focusMenuItem\n }, null, 8, [\"value\", \"label\", \"options\"])\n ], 40, _hoisted_1))\n}\n}\n\n})","\n \n\n","import { render } from \"./RcDropdownSeparator.vue?vue&type=template&id=84b7c00a\"\nconst script = {}\n\nimport exportComponent from \"../../../../vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, withKeys as _withKeys, withCtx as _withCtx, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { inject, onMounted, ref } from 'vue';\nimport { RcButton, RcButtonType } from '@components/RcButton';\nimport { DropdownContext, defaultContext } from './types';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'RcDropdownTrigger',\n setup(__props, { expose: __expose }) {\n\n/**\n * A button that opens a menu. Used in conjunction with `RcDropdown.vue`.\n */\nconst {\n showMenu,\n registerTrigger,\n isMenuOpen,\n handleKeydown,\n} = inject('dropdownContext') || defaultContext;\n\nconst dropdownTrigger = ref(null);\n\nonMounted(() => {\n registerTrigger(dropdownTrigger.value);\n});\n\nconst focus = () => {\n dropdownTrigger?.value?.focus();\n};\n\n__expose({ focus });\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_unref(RcButton), {\n ref_key: \"dropdownTrigger\",\n ref: dropdownTrigger,\n role: \"button\",\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": _unref(isMenuOpen),\n onKeydown: _withKeys(_unref(handleKeydown), [\"enter\",\"space\"]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_unref(showMenu)(true)))\n }, _createSlots({\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 2\n }, [\n (_ctx.$slots.before)\n ? {\n name: \"before\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"before\")\n ]),\n key: \"0\"\n }\n : undefined,\n (_ctx.$slots.after)\n ? {\n name: \"after\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"after\")\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1032, [\"aria-expanded\", \"onKeydown\"]))\n}\n}\n\n})","\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n","import script from \"./RcDropdownTrigger.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RcDropdownTrigger.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode } from \"vue\"\n\nimport {\n RcDropdown,\n RcDropdownItem,\n RcDropdownSeparator,\n RcDropdownTrigger\n} from '@components/RcDropdown';\nimport { RcDropdownMenuComponentProps, DropdownOption } from './types';\nimport IconOrSvg from '@shell/components/IconOrSvg';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'RcDropdownMenu',\n props: {\n options: {},\n buttonVariant: { default: 'primary' },\n buttonSize: { default: undefined },\n buttonAriaLabel: {},\n dropdownAriaLabel: {},\n dataTestid: {}\n },\n emits: ['update:open', 'select'],\n setup(__props: any, { emit: __emit }) {\n\n\n\nconst emit = __emit;\n\nconst hasOptions = (options: DropdownOption[]) => {\n return options.length !== undefined ? options.length : Object.keys(options).length > 0;\n};\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_unref(RcDropdown), {\n \"aria-label\": __props.dropdownAriaLabel,\n \"onUpdate:open\": _cache[0] || (_cache[0] = (e) => emit('update:open', e))\n }, {\n dropdownCollection: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.options, (a) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: a.label\n }, [\n (!a.divider)\n ? (_openBlock(), _createBlock(_unref(RcDropdownItem), {\n key: 0,\n onClick: (e) => emit('select', e, a)\n }, {\n before: _withCtx(() => [\n (a.icon || a.svg)\n ? (_openBlock(), _createBlock(_unref(IconOrSvg), {\n key: 0,\n icon: a.icon,\n src: a.svg,\n class: \"icon\",\n color: \"header\"\n }, null, 8, [\"icon\", \"src\"]))\n : _createCommentVNode(\"\", true)\n ]),\n default: _withCtx(() => [\n _createTextVNode(\" \" + _toDisplayString(a.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n : (_openBlock(), _createBlock(_unref(RcDropdownSeparator), { key: 1 }))\n ], 64))\n }), 128)),\n (!hasOptions(__props.options))\n ? (_openBlock(), _createBlock(_unref(RcDropdownItem), {\n key: 0,\n disabled: \"\"\n }, {\n default: _withCtx(() => [...(_cache[2] || (_cache[2] = [\n _createTextVNode(\" No actions available \", -1)\n ]))]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n default: _withCtx(() => [\n _createVNode(_unref(RcDropdownTrigger), {\n variant: __props.buttonVariant,\n size: __props.buttonSize,\n \"data-testid\": __props.dataTestid,\n \"aria-label\": __props.buttonAriaLabel\n }, {\n default: _withCtx(() => [...(_cache[1] || (_cache[1] = [\n _createElementVNode(\"i\", { class: \"icon icon-actions\" }, null, -1)\n ]))]),\n _: 1\n }, 8, [\"variant\", \"size\", \"data-testid\", \"aria-label\"])\n ]),\n _: 1\n }, 8, [\"aria-label\"]))\n}\n}\n\n})","\n\n\n emit('update:open', e)\"\n >\n \n \n \n \n \n emit('select', e, a)\"\n >\n \n \n \n {{ a.label }}\n \n \n \n \n No actions available\n \n \n \n\n","import script from \"./RcDropdownMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RcDropdownMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { computed, Ref } from 'vue';\n\nexport const StatusDefinitions = {\n info: {\n primary: '--rc-info',\n secondary: '--rc-info-secondary'\n },\n success: {\n primary: '--rc-success',\n secondary: '--rc-success-secondary'\n },\n warning: {\n primary: '--rc-warning',\n secondary: '--rc-warning-secondary'\n },\n error: {\n primary: '--rc-error',\n secondary: '--rc-error-secondary'\n },\n unknown: {\n primary: '--rc-unknown',\n secondary: '--rc-unknown-secondary'\n },\n none: {\n primary: '--rc-none',\n secondary: '--rc-none-secondary'\n },\n};\n\nexport type Status = keyof typeof StatusDefinitions;\nexport type Style = 'solid' | 'outlined';\n\nexport function wrapIfVar(colorVar: string) {\n return colorVar.startsWith('--') ? `var(${ colorVar })` : colorVar;\n}\n\n/**\n * A composable to make it easier to use status colors in multiple components\n *\n * @param status A Ref containing the status value\n * @param style {@link Style} Will the block of code being using the solid or outlined styling\n * @returns An object containing the relevant style colors\n */\nexport function useStatusColors(status: Ref, style: Style) {\n const statusColors = computed(() => {\n return StatusDefinitions[status.value];\n });\n const isOutlined = style === 'outlined';\n\n const borderColor = computed(() => {\n const colorVar = isOutlined ? statusColors.value.secondary : statusColors.value.primary;\n\n return wrapIfVar(colorVar);\n });\n\n const backgroundColor = computed(() => {\n if (status.value === 'none') {\n return 'none';\n }\n const colorVar = isOutlined ? statusColors.value.secondary : statusColors.value.primary;\n\n return wrapIfVar(colorVar);\n });\n\n const textColor = computed(() => {\n const colorVar = isOutlined ? statusColors.value.primary : statusColors.value.secondary;\n\n return wrapIfVar(colorVar);\n });\n\n return {\n borderColor,\n backgroundColor,\n textColor\n };\n}\n","import { Schema, SchemaAttribute, SchemaAttributeColumn } from '@shell/plugins/steve/schema';\nimport { TableColumn } from '@shell/types/store/type-map';\nimport { VuexStoreGetters } from '@shell/types/store/vuex';\nimport { findBy, insertAt, removeObject } from '@shell/utils/array';\nimport { COUNT } from '@shell/config/types';\nimport { ActionFindAllArgs } from '@shell/types/store/dashboard-store.types';\n\nconst FIELD_REGEX = /^\\$\\.metadata\\.fields\\[([0-9]*)\\]/;\n\ntype StoreColumns = { [schemaId: string]: TableColumn[]}\n\n/**\n * Create the headers used in lists to show a resource\n *\n * These could be\n * - Pre-configured via the product (either non-paginated or paginated)\n * - Generated dynamically from schema's attributes.columns\n *\n * There's also some additional ones like state, age, and at least one of name or id\n *\n * The order of these are massaged as well\n */\nexport function createHeaders(\n ctx: {\n getters: VuexStoreGetters,\n rootGetters: VuexStoreGetters,\n state: any,\n },\n opt: {\n headers: StoreColumns,\n typeOptions: any,\n schema: any, // Once the schema-diet changes go in this can be typed\n columns: {\n /**\n * Always show this column (if showState is true)\n */\n state: TableColumn,\n /**\n * If dynamically creating columns, use specific column for name, if required\n */\n name?: TableColumn,\n /**\n * If dynamically creating columns, use specific column for id, if required\n */\n id?: TableColumn\n /**\n * If dynamically creating columns, use specific column for namespace, if required\n */\n namespace: TableColumn,\n /**\n * If dynamically creating columns, use specific column for age, if required\n */\n age: TableColumn,\n },\n pagination: boolean\n }): TableColumn[] {\n const {\n headers, typeOptions, schema, columns, pagination\n } = opt;\n const {\n state: stateColumn, name: nameColumn, namespace: namespaceColumn, id: idColumn, age: ageColumn\n } = columns;\n const { rootGetters } = ctx;\n const out = typeOptions.showState ? [stateColumn] : [];\n const attributes = (schema?.attributes as SchemaAttribute) || {};\n const columnsFromSchema = attributes?.columns || [];\n\n // A specific list has been provided\n if ( headers?.[schema?.id]?.length ) {\n return headers[schema?.id].map((entry: any) => {\n if ( typeof entry === 'string' ) {\n const col = findBy(columnsFromSchema, 'name', entry);\n\n if ( col ) {\n return headerFromSchemaCol(col, rootGetters, pagination, ageColumn);\n } else {\n return null;\n }\n } else {\n return entry;\n }\n }).filter((col: SchemaAttributeColumn) => !!col);\n }\n\n // Otherwise make one up from schema\n let hasName = false;\n const namespaced = attributes.namespaced || false;\n\n for ( const col of columnsFromSchema ) {\n if ( col.format === 'name' ) {\n hasName = true;\n out.push(nameColumn || headerFromSchemaCol(col, rootGetters, pagination, ageColumn));\n if ( namespaced ) {\n out.push(namespaceColumn);\n }\n } else {\n out.push(headerFromSchemaCol(col, rootGetters, pagination, ageColumn));\n }\n }\n\n // Always try to have an identifier\n if ( !hasName ) {\n insertAt(out, 1, nameColumn || idColumn );\n if ( namespaced ) {\n insertAt(out, 2, namespaceColumn);\n }\n }\n\n // Age always goes last\n const ageColumnActual = out.find((o) => o.name.toLocaleLowerCase() === 'age');\n\n if ( ageColumnActual ) {\n removeObject(out, ageColumnActual);\n if ( typeOptions.showAge ) {\n out.push(ageColumnActual);\n }\n }\n\n return out;\n}\n\n/**\n * Given a schema's attribute.column value create a header\n */\nexport function headerFromSchemaColString(colName: string, schema: Schema, rootGetters: VuexStoreGetters, pagination: boolean, ageColumn: TableColumn): TableColumn {\n if (!schema) {\n throw new Error(`Unable to create header for column '${ colName }' from schema: schema is missing`);\n }\n\n const col = schema.attributes.columns.find((c) => c.name === colName);\n\n if (!col) {\n throw new Error(`Unable to find column '${ colName }' in schema '${ schema.id }'`);\n }\n\n return headerFromSchemaCol(col, rootGetters, pagination, ageColumn);\n}\n\n/**\n * Given a schema's attribute.column value create a header\n */\nexport function headerFromSchemaCol(col: SchemaAttributeColumn, rootGetters: VuexStoreGetters, pagination: boolean, ageColumn: TableColumn): TableColumn {\n let formatter, width, formatterOpts;\n\n if ( (col.format === '' || col.format === 'date' || col.type === 'date') && col.name.toLowerCase() === 'age' && ageColumn ) {\n return ageColumn;\n }\n\n if ( col.format === 'date' || col.type === 'date' ) {\n formatter = 'Date';\n width = 120;\n formatterOpts = { multiline: true };\n }\n\n if ( col.type === 'number' || col.type === 'int' ) {\n formatter = 'Number';\n }\n\n const colName = col.name.includes(' ') ? col.name.split(' ').map((word) => word.charAt(0).toUpperCase() + word.substring(1) ).join('') : col.name;\n\n const exists = rootGetters['i18n/exists'];\n const t = rootGetters['i18n/t'];\n const labelKey = `tableHeaders.${ colName.charAt(0).toLowerCase() + colName.slice(1) }`;\n const description = col.description || '';\n const tooltip = description && description[description.length - 1] === '.' ? description.slice(0, -1) : description;\n\n const path = rowValueGetter(col, false) as string;\n // If we're not paginating use a function to get the value, otherwise use the string path\n const altPath = pagination ? path : rowValueGetter(col, true) as Function;\n\n return {\n name: col.name.toLowerCase(),\n label: exists(labelKey) ? t(labelKey) : col.name,\n value: altPath,\n sort: [path],\n search: path,\n formatter,\n formatterOpts,\n width,\n tooltip\n };\n}\n\n/**\n * Rewrite a JSON Path expression, so that it is compatible with the library we use.\n * Specifically, ensure we can handle path keys that contain an escaped '.' character (\\.)\n *\n * For example, this function re-writes the expression:\n * $.metadata.labels.topology\\.kubernetes\\.io/zone\n * to:\n * $.metadata.labels.[\"topology.kubernetes.io/zone\"]\n *\n * @param path JSON Path expression\n * @returns Re-written JSON Path expression\n */\nfunction rewriteJsonPath(path: any): any {\n // Check if we should re-write, otherwise just return the input expression as is\n if (typeof path === 'string' && path.startsWith('$') && path.includes('\\\\.')) {\n const parts = path.split('.');\n let inField = false;\n let res = '';\n\n parts.forEach((part) => {\n let prefix = res.length ? '.' : '';\n\n if (part.endsWith('\\\\')) {\n if (!inField) {\n inField = true;\n prefix = `${ prefix }[\"`;\n }\n\n res = `${ res }${ prefix }${ part.substr(0, part.length - 1) }`;\n } else {\n const postfix = inField ? '\"]' : '';\n\n res += `${ prefix }${ part }${ postfix }`;\n inField = false;\n }\n });\n\n return res;\n }\n\n return path;\n}\n\nexport function rowValueGetter(col: SchemaAttributeColumn, asFn = true): string | ((row: any) => string) {\n // 'field' comes from the schema - typically it is of the form $.metadata.field[N]\n // We will use JsonPath to look up this value, which is costly - so if we can detect this format\n // Use a more efficient function to get the value\n const value = col.field.startsWith('.') ? `$${ col.field }` : col.field;\n const found = value.match(FIELD_REGEX);\n\n if (found && found.length === 2) {\n const fieldIndex = parseInt(found[1], 10);\n\n if (asFn) {\n return (row: any) => row.metadata?.fields?.[fieldIndex];\n }\n\n return `metadata.fields.${ fieldIndex }`;\n }\n\n return rewriteJsonPath(value);\n}\n\ntype conditionalDepaginateArgs ={\n ctx: { rootGetters: VuexStoreGetters},\n args: { type: string, opt: ActionFindAllArgs},\n};\ntype conditionalDepaginateFn = (args: conditionalDepaginateArgs) => boolean\n\n/**\n * Conditionally determine if a resource should use naive kube pagination api to fetch all results\n * (not just first page)\n */\nexport const conditionalDepaginate = (\n depaginate?: conditionalDepaginateFn | boolean,\n depaginateArgs?: conditionalDepaginateArgs\n): boolean => {\n if (typeof depaginate === 'function') {\n return !!depaginateArgs ? depaginate(depaginateArgs) : false;\n }\n\n return depaginate as boolean;\n};\n\n/**\n * Setup a function that will determine if a resource should use native kube pagination api to fetch all resources\n * (not just the first page)\n */\nexport const configureConditionalDepaginate = (\n { maxResourceCount, isNorman = false }: { maxResourceCount: number, isNorman: boolean },\n): conditionalDepaginateFn => {\n return (fnArgs: conditionalDepaginateArgs ): boolean => {\n const { rootGetters } = fnArgs.ctx;\n const { type } = fnArgs.args;\n const safeType = isNorman ? `management.cattle.io.${ type }` : type;\n\n const inStore = rootGetters['currentStore'](safeType);\n const resourceCounts = rootGetters[`${ inStore }/all`](COUNT)[0]?.counts[safeType];\n const resourceCount = resourceCounts?.summary?.count;\n\n return resourceCount !== undefined ? resourceCount < maxResourceCount : false;\n };\n};\n","export const LABEL_SELECT_KINDS = {\n GROUP: 'group',\n DIVIDER: 'divider',\n NONE: 'none',\n};\n\nexport const LABEL_SELECT_NOT_OPTION_KINDS = [\n LABEL_SELECT_KINDS.GROUP,\n LABEL_SELECT_KINDS.DIVIDER,\n];\n\n/**\n * Options used When LabelSelect requests a new page\n */\nexport interface LabelSelectPaginateFnOptions {\n /**\n * Current page\n */\n pageContent: T[],\n /**\n * page number to fetch\n */\n page: number,\n /**\n * number of items in the page to fetch\n */\n pageSize: number,\n /**\n * filter pagination filter. this is just a text string associated with user entered text\n */\n filter: string,\n /**\n * true if the result should only contain the fetched page, false if the result should be added to the pageContent\n */\n resetPage: boolean,\n}\n\n/**\n * Response that LabelSelect needs when it's requested a new page\n */\nexport interface LabelSelectPaginateFnResponse {\n page: T[],\n pages: number,\n total: number\n}\n\n/**\n * Function called when LabelSelect needs a new page\n */\nexport type LabelSelectPaginateFn = (opts: LabelSelectPaginateFnOptions) => Promise>\n","/**\n * Takes the contents of the POD restarts value `1 (2m47s ago)` and splits it into `1` and `2m47s ago`\n */\nexport const POD_RESTARTS_REG_EX = /^(\\d+)\\s*\\(([^)]+)\\)/;\n\n/**\n * POD restarts value can be split into two (restart count and last restarted).\n *\n * This is a special path that Vai uses to sort/filter on the first part (restart count)\n */\nexport const POD_RESTART_FIELD = 'metadata.fields[3][0]';\n\n/**\n * POD restarts value can be split into two (restart count and last restarted).\n *\n * This is a special path that Vai uses to sort/filter on the first part (last restarted)\n */\nexport const POD_LAST_RESTART_FIELD = 'metadata.fields[3][1]';\n","import { NAMESPACE_FILTER_NS_FULL_PREFIX, NAMESPACE_FILTER_P_FULL_PREFIX } from '@shell/utils/namespace-filter';\nimport { KubeLabelSelector } from '@shell/types/kube/kube-api';\n\n// Pagination Typing\n// These structures are designed to offer both convenience and flexibility based on a common structure and are\n// converted to the url param format as per https://github.com/rancher/steve.\n//\n// Simple use cases such as filtering by a single param should be easy to use.\n// More complex filtering (and'ing and 'or'ing multiple fields) is also supported.\n//\n// The top level object `PaginationArgs` contains all properties that will be converted to url params\n//\n// The two important / complex params are currently\n// - `filter` https://github.com/rancher/steve?tab=readme-ov-file#filter\n// - represented by `PaginationParamFilter extends PaginationParam`\n// - a filter has filter fields which are made up of a field name, equality and value/s\n// - filter=\n// - Examples\n// - filter=metadata.name=123\n// - filter=metadata.name=123,metadata.name=456 (name is 123 OR 456)\n// - filter=metadata.name=123&filter=metadata.namespace=abc (name 123 AND namespace abc)\n// - `projectsornamespaces` https://github.com/rancher/steve?tab=readme-ov-file#projectsornamespaces\n// - represented by `PaginationParamProjectOrNamespace extends PaginationParam`\n// - Examples\n// - projectsornamespaces=123\n// - projectsornamespaces=123,456 (projects or namespaces that have id 123 OR 456)\n//\n//\n// Some of the types below are defined using classes instead of TS types/interfaces\n// - Avoid making complex json objects by using clearer instance constructors\n// - Better documented\n// - Defaults (a lot of the time convenience > utility)\n// - Adds some kind of typing in pure js docs\n// - class ctor links to definition, instead of object just being a random json blob)\n// - helps VSCode jsdoc highlighting\n\n/**\n * Sort the pagination result\n *\n * For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#sort\n */\nexport interface PaginationSort {\n /**\n * Name of field within the object to sort by\n */\n field: string,\n /**\n * Sort direction. `true` for ascending, `false` for descending\n */\n asc: boolean\n}\n\n/**\n * Equalities that can be used with a `filter` query param\n *\n * `filter=`\n *\n * For example\n * - filter=a=b\n * - filter=a!=b\n * - filter=a NOT IN (b,c,d)\n */\nexport const enum PaginationFilterEquality {\n /**\n * Field is in a collection of values\n */\n IN = ' IN ', // eslint-disable-line no-unused-vars\n /**\n * Field is not in a collection of values\n */\n NOT_IN = ' NOTIN ', // eslint-disable-line no-unused-vars\n /**\n * Field matches a value\n */\n EQUALS= '=', // eslint-disable-line no-unused-vars\n /**\n * Field does not match a value\n */\n NOT_EQUALS = '!=', // eslint-disable-line no-unused-vars\n /**\n * Unknown\n */\n STRICT_EQUALS = '==', // eslint-disable-line no-unused-vars\n /**\n * Field must partially match a value\n */\n CONTAINS = '~', // eslint-disable-line no-unused-vars\n /**\n * Field must not partially match a value\n */\n NOT_CONTAINS = '!~', // eslint-disable-line no-unused-vars\n /**\n * Field must be greater than a value\n */\n GREATER_THAN = 'gt', // eslint-disable-line no-unused-vars\n /**\n * Field must be less than a value\n */\n LESS_THAN = 'lt', // eslint-disable-line no-unused-vars\n}\n\n/**\n * Ctor args for a @PaginationFilterField\n */\ntype FilterFieldCtorArgs = {\n /**\n * Name of field within the object to filter by for example the x of x=y\n *\n * This can be optional for some (projectsornamespaces)\n */\n field?: string;\n /**\n * Value of field within the object to filter by for example the y of x=y\n *\n * This can be empty if `exists` is true\n */\n value?: string;\n /**\n * Equality field within the object to filter by for example the `=` or `!=` of x=y\n *\n * @deprecated Please use `equality` instead of equals and exact\n */\n equals?: boolean;\n /**\n * Match the field exactly. False for partial matches\n *\n * Value: pod1\n * Exact: true. \"p\" no, \"pod\", no, \"pod1\" yes\n * Exact: false. \"p\" yes, \"pod\", yes, \"pod1\" yes\n *\n * @deprecated Please use `equality` instead of equals and exact\n */\n exact?: boolean,\n /**\n * Check if the field/property exists, regardless of value\n *\n * If this is false it does not flip the expectation, just doesn't add the field\n */\n exists?: boolean,\n /**\n * Equality symbol used to compare the field with the value\n */\n equality?: PaginationFilterEquality\n}\n\n/**\n * Filter the pagination result by these specific fields\n *\n * In format of ``\n *\n * For example\n *\n * - metadata.name=test\n * - metadata.namespace!=system\n *\n * These are sub items for {@link PaginationParam}, for example `filter=`\n *\n * For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#query-parameters\n */\nexport class PaginationFilterField {\n /**\n * Name of field within the object to filter by for example the x of x=y\n *\n * This can be optional for some (projectsornamespaces)\n */\n field?: string;\n /**\n * Value of field within the object to filter by for example the y of x=y\n *\n * This can be empty if `exists` is true\n */\n value?: string;\n /**\n * Equality field within the object to filter by for example the `=` or `!=` of x=y\n *\n * @deprecated Please use `equality` instead of equals and exact\n */\n equals?: boolean;\n /**\n * Match the field exactly. False for partial matches\n *\n * Value: pod1\n * Exact: true. \"p\" no, \"pod\", no, \"pod1\" yes\n * Exact: false. \"p\" yes, \"pod\", yes, \"pod1\" yes\n *\n * @deprecated Please use `equality` instead of equals and exact\n */\n exact?: boolean;\n /**\n * Equality symbol used to compare the field with the value\n */\n equality?: PaginationFilterEquality;\n /**\n * Check if the field/property exists, regardless of value\n *\n * If this is false it does not flip the expectation, just doesn't add the field\n */\n exists?: boolean;\n\n constructor(args: FilterFieldCtorArgs) {\n const {\n field, value = '', equals = true, exact = true, equality = undefined, exists = false\n } = args;\n\n this.field = field;\n this.value = value;\n this.equals = equals;\n this.exact = exact;\n this.exists = exists;\n\n const _equality = PaginationFilterField.safeEquality({\n field, value, equals, exact, equality, exists\n });\n\n if (_equality) {\n this.equality = _equality;\n } else {\n throw new Error('A pagination filter must have either equals or equality set');\n }\n }\n\n /**\n * Determine equality for this field.\n *\n * Mainly to ensure legacy objects using deprecated fields instead of new equality field fall back on something sensible\n */\n static safeEquality(args: FilterFieldCtorArgs | PaginationFilterField): PaginationFilterEquality | undefined {\n if (args.equality) {\n return args.equality;\n }\n\n if (args.equals === true) {\n if (args.exact === true) {\n return PaginationFilterEquality.EQUALS;\n } else {\n return PaginationFilterEquality.CONTAINS;\n }\n } else if (args.equals === false) {\n if (args.exact === true) {\n return PaginationFilterEquality.NOT_EQUALS;\n } else {\n return PaginationFilterEquality.NOT_CONTAINS;\n }\n }\n }\n}\n\n/**\n * Represents filter like params, for example\n *\n * - `filter=abc!=xyz&def=123`\n * - `projectsornamespace!=p-3456`\n *\n * ### Params\n * #### Filter\n * - For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#filter\n *\n * #### Projects Or Namespace\n * - For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#projectsornamespaces\n *\n * ### Combining Params\n * Params can be combined in two logical ways\n *\n * 1) AND\n * - Used when you would like to filter by something like a=1 AND b=2 AND c=3\n * - To do this multiple instances of `PaginationParam` are used in an array\n * - Object Structure\n * ```\n * [\n * PaginationParam,\n * PaginationParam,\n * PaginationParam\n * ]\n * ```\n * - Results in url\n * ```\n * filter=a=1&filter=b=2&filter=c=3\n * ```\n * - Examples\n * - `filter=metadata.namespace=abc&filter=metadata.name=123,property=123`\n * 2) OR\n * - Used when you would like to filter by something like a=1 OR b=2 OR c=3\n * - To do this multiple fields within a single PaginationParam is used\n * - Object Structure\n * ```\n * [\n * PaginationParam {\n * PaginationFilterField,\n * PaginationFilterField,\n * PaginationFilterField\n * }\n * ]\n * ```\n * - Results in url\n * ```\n * filter=a=1,b=2,c=3\n * ```\n *\n * - For example `filter=a=1,b=2,c=3`\n *\n *\n * This structure should give enough flexibility to cover all uses.\n *\n *\n */\nexport abstract class PaginationParam {\n /**\n * Query Param. For example `filter` or `projectsornamespaces`\n */\n param: string;\n /**\n * should fields equal param.\n *\n * For example projectsornamexspaces=x or projectsornamexspaces!=x\n */\n equals: boolean;\n /**\n * Fields to filter by\n *\n * For example metadata.namespace=abc OR metadata.namespace=xyz\n */\n fields: PaginationFilterField[];\n\n constructor(\n { param, equals = true, fields = [] }:\n {\n param: string;\n /**\n * should param equal fields\n *\n * For definition see {@link PaginationParam} `equals`\n */\n equals?: boolean;\n /**\n * Collection of fields to filter by\n *\n * For definition see {@link PaginationParam} `fields`\n */\n fields?: PaginationFilterField[];\n }) {\n this.param = param;\n this.equals = equals;\n this.fields = fields;\n }\n}\n\n/**\n * This is a convenience class for the `filter` param which works some magic, adds defaults and converts to the required PaginationParam format.\n *\n * for example\n *\n * - filter=???\n *\n * including `fields` this could be\n *\n * - filter=a=b\n *\n * See description for {@link PaginationParam} for how multiple of these can be combined together to AND or OR together\n *\n * For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#filter\n */\nexport class PaginationParamFilter extends PaginationParam {\n constructor(\n { equals = true, fields = [] }:\n {\n /**\n * should param equal fields\n *\n * For definition see {@link PaginationParam} `equals`\n */\n equals?: boolean;\n /**\n * Collection of fields to filter by.\n *\n * Fields are ORd together\n *\n * For definition see {@link PaginationParam} `fields`\n */\n fields?: PaginationFilterField[];\n }\n ) {\n super({\n param: 'filter',\n equals,\n fields\n });\n }\n\n /**\n * Convenience method when you just want an instance of {@link PaginationParamFilter} with a simple `filter=x=y` param\n */\n static createSingleField(field: FilterFieldCtorArgs): PaginationParam {\n return new PaginationParamFilter({ fields: [new PaginationFilterField(field)] });\n }\n\n /**\n * Convenience method when you just want an instance of {@link PaginationParamFilter} with a simple `filter=a=1,b=2,c=3` PaginationParam\n *\n * These will be OR'd together\n */\n static createMultipleFields(fields: PaginationFilterField[]): PaginationParam {\n return new PaginationParamFilter({ fields });\n }\n}\n\n/**\n * This is a convenience class for the `projectsornamespaces` param which works some magic, adds defaults and converts to the required PaginationParam format\n *\n * See description for {@link PaginationParam} for how multiple of these can be combined together to AND or OR together\n *\n * For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#projectsornamespaces\n */\nexport class PaginationParamProjectOrNamespace extends PaginationParam {\n constructor(\n { equals = true, projectOrNamespace = [] }:\n {\n /**\n * should param equal fields\n * For definition see {@link PaginationParam} `equals`\n */\n equals?: boolean;\n /**\n * Collection of projects / namespace id's to filter by\n *\n * These are OR'd together\n *\n * For clarification on definition see {@link PaginationFilterField}\n */\n projectOrNamespace?: string[];\n }\n ) {\n const safeFields = projectOrNamespace.map((f) => {\n return new PaginationFilterField({\n value: f\n .replace(NAMESPACE_FILTER_NS_FULL_PREFIX, '')\n .replace(NAMESPACE_FILTER_P_FULL_PREFIX, '')\n });\n });\n\n super({\n param: 'projectsornamespaces',\n equals,\n fields: safeFields\n });\n }\n}\n\n/**\n * Pagination settings sent to actions and persisted to store\n *\n * Use this for making pagination requests that utilise the new vai cache backed API\n */\nexport class PaginationArgs {\n /**\n * Page number to fetch\n */\n page: number | null;\n /**\n * Number of results in the page\n */\n pageSize?: number | null;\n /**\n * Sort the results\n *\n * For more info see {@link PaginationSort}\n */\n sort: PaginationSort[];\n /**\n * A collection of traditional `filter` params covering logic such as x is y, x is like y, x is not y\n *\n * For more info see {@link PaginationParamFilter}\n */\n filters: PaginationParamFilter[];\n /**\n * A collection of `projectsornamespace` params\n *\n * For more info see {@link PaginationParamProjectOrNamespace}\n */\n projectsOrNamespaces: PaginationParamProjectOrNamespace[];\n\n /**\n * Traditional Kube labelSelector consisting of matchLabels and matchExpressions\n */\n labelSelector?: KubeLabelSelector;\n\n /**\n * Creates an instance of PaginationArgs.\n *\n * Contains defaults to avoid creating complex json objects all the time\n */\n constructor({\n page = 1,\n pageSize = 10,\n sort = [],\n filters = [],\n projectsOrNamespaces = [],\n labelSelector = undefined,\n }:\n // This would be neater as just Partial but we lose all jsdoc\n {\n /**\n * For definition see {@link PaginationArgs} `page`\n */\n page?: number | null,\n /**\n * For definition see {@link PaginationArgs} `pageSize`\n */\n pageSize?: number | null,\n /**\n * For definition see {@link PaginationArgs} `sort`\n */\n sort?: PaginationSort[],\n /**\n * Automatically wrap if not an array\n *\n * For definition see {@link PaginationArgs} `filters`\n */\n filters?: PaginationParamFilter | PaginationParamFilter[],\n /**\n * Automatically wrap if not an array\n *\n * For definition see {@link PaginationArgs} `projectsOrNamespaces`\n */\n projectsOrNamespaces?: PaginationParamProjectOrNamespace | PaginationParamProjectOrNamespace[],\n /**\n * Traditional Kube labelSelector consisting of matchLabels and matchExpressions\n */\n labelSelector?: KubeLabelSelector,\n }) {\n this.page = page;\n this.pageSize = pageSize;\n this.sort = sort;\n if (filters) {\n this.filters = Array.isArray(filters) ? filters : [filters];\n } else {\n this.filters = [];\n }\n if (projectsOrNamespaces) {\n this.projectsOrNamespaces = Array.isArray(projectsOrNamespaces) ? projectsOrNamespaces : [projectsOrNamespaces];\n } else {\n this.projectsOrNamespaces = [];\n }\n this.labelSelector = labelSelector;\n }\n}\n\n/**\n * Wrapper around {@link PaginationArgs}\n *\n * Use this for making requests that utilise filtering backed by the new vai cache backed API\n */\nexport class FilterArgs extends PaginationArgs {\n /**\n * Creates an instance of PaginationArgs.\n *\n * Contains defaults to avoid creating complex json objects all the time\n */\n constructor({\n sort = [],\n filters = [],\n projectsOrNamespaces = [],\n labelSelector = undefined,\n }:\n // This would be neater as just Partial but we lose all jsdoc\n {\n /**\n * For definition see {@link PaginationArgs} `sort`\n */\n sort?: PaginationSort[],\n /**\n * Automatically wrap if not an array\n *\n * For definition see {@link PaginationArgs} `filters`\n */\n filters?: PaginationParamFilter | PaginationParamFilter[],\n /**\n * Automatically wrap if not an array\n *\n * For definition see {@link PaginationArgs} `projectsOrNamespaces`\n */\n projectsOrNamespaces?: PaginationParamProjectOrNamespace | PaginationParamProjectOrNamespace[],\n /**\n * Traditional Kube labelSelector consisting of matchLabels and matchExpressions\n */\n labelSelector?: KubeLabelSelector\n }) {\n super({\n page: null, pageSize: null, sort, filters, projectsOrNamespaces, labelSelector\n });\n }\n}\n\n/**\n * Overall result of a pagination request.\n *\n * Does not contain actual resources but overall stats (count, pages, etc)\n */\nexport interface StorePaginationResult {\n count: number,\n pages: number,\n /**\n * The last time the resource was updated. Used to assist list watching for changes\n */\n timestamp: number,\n revision: string,\n}\n\nexport interface StorePaginationRequest {\n /**\n * The single namespace to filter results by (as part of url path, not pagination params)\n */\n namespace?: string,\n\n /**\n * The set of pagination args used to create the request\n */\n pagination: PaginationArgs,\n\n /**\n * Does this request stem from a list with manual refresh?\n */\n hasManualRefresh?: boolean,\n\n /**\n * When making a supporting HTTP request include associated resource data\n */\n includeAssociatedData?: boolean,\n}\n\n/**\n * Pagination settings\n * - what was requested\n * - what was received (minus actual resources)\n *\n * Object is persisted to store\n */\nexport interface StorePagination {\n /**\n * Collection of args that is used to make the request\n */\n request: StorePaginationRequest,\n\n /**\n * Information in the response outside of the actual resources returned\n */\n result: StorePaginationResult\n}\n\n/**\n * The resource and context that the pagination request will be used\n *\n * Used to determine if the request is supported\n*/\nexport interface PaginationResourceContext {\n store: string,\n resource?: {\n id: string,\n context?: string,\n }\n}\n","/* eslint-disable no-unused-vars */\nexport enum STEVE_WATCH_MODE {\n DEFAULT = '',\n RESOURCE_CHANGES = 'resource.changes'\n}\n/* eslint-enable no-unused-vars */\n\n/* eslint-disable no-unused-vars */\nexport enum STEVE_WATCH_EVENT_TYPES {\n START = 'resource.start',\n CREATE = 'resource.create',\n CHANGE = 'resource.change',\n CHANGES = 'resource.changes',\n REMOVE = 'resource.resource.remove',\n ERROR = 'resource.error',\n STOP = 'resource.stop',\n}\n/* eslint-enable no-unused-vars */\n\nexport type STEVE_WATCH_EVENT_TYPES_NAMES = `${ STEVE_WATCH_EVENT_TYPES }`;\n\n/**\n * The content of the web socket messages sent (and partially received back from) steve\n */\nexport interface STEVE_WATCH_PARAMS {\n type: string,\n selector?: string,\n id?: string,\n revision?: string,\n namespace?: string,\n stop?: boolean,\n force?: boolean,\n forceWatch?: boolean,\n mode?: STEVE_WATCH_MODE\n}\n","\n/**\n * interface for type-map's' definition for table headers/columns\n */\nexport interface TableColumn {\n name: string,\n label?: string,\n value: any,\n sort?: string | string[],\n formatter?: string,\n formatterOpts?: any,\n width?: number,\n tooltip?: string,\n search?: string | boolean,\n}\n\nexport const COLUMN_BREAKPOINTS = {\n /**\n * Only show column if at tablet width or wider\n */\n TABLET: 'tablet',\n /**\n * Only show column if at laptop width or wider\n */\n LAPTOP: 'laptop',\n /**\n * Only show column if at desktop width or wider\n */\n DESKTOP: 'desktop'\n};\n","import xor from 'lodash/xor';\nimport { get, isEqual } from '@shell/utils/object';\n\nexport function removeObject(ary: T[], obj: T): T[] {\n const idx = ary.indexOf(obj);\n\n if ( idx >= 0 ) {\n ary.splice(idx, 1);\n }\n\n return ary;\n}\n\nexport function removeObjects(ary: T[], objs: T[]): T[] {\n let i;\n let indexes = [];\n\n for ( i = 0 ; i < objs.length ; i++ ) {\n let idx = ary.indexOf(objs[i]);\n\n // Find multiple copies of the same value\n while ( idx !== -1 ) {\n indexes.push(idx);\n idx = ary.indexOf(objs[i], idx + 1);\n }\n }\n\n if ( !indexes.length ) {\n // That was easy...\n return ary;\n }\n\n indexes = indexes.sort((a, b) => a - b);\n\n const ranges = [];\n let first: number;\n let last: number;\n\n // Group all the indexes into contiguous ranges\n while ( indexes.length ) {\n first = indexes.shift() as number;\n last = first;\n\n while ( indexes.length && indexes[0] === last + 1 ) {\n last = indexes.shift() as number;\n }\n\n ranges.push({ start: first, end: last });\n }\n\n // Remove the items by range\n for ( i = ranges.length - 1 ; i >= 0 ; i--) {\n const { start, end } = ranges[i];\n\n ary.splice(start, end - start + 1);\n }\n\n return ary;\n}\n\nexport function addObject(ary: T[], obj: T): void {\n const idx = ary.indexOf(obj);\n\n if ( idx === -1 ) {\n ary.push(obj);\n }\n}\n\nexport function addObjects(ary: T[], objs: T[]): void {\n const unique: T[] = [];\n\n for ( const obj of objs ) {\n if ( !ary.includes(obj) && !unique.includes(obj) ) {\n unique.push(obj);\n }\n }\n\n ary.push(...unique);\n}\n\nexport function insertAt(ary: T[], idx: number, ...objs: T[]): void {\n ary.splice(idx, 0, ...objs);\n}\n\nexport function isArray(thing: T[] | unknown): boolean {\n return Array.isArray(thing);\n}\n\nexport function removeAt(ary: T[], idx: number, length = 1): T[] {\n if ( idx < 0 ) {\n throw new Error('Index too low');\n }\n\n if ( idx + length > ary.length ) {\n throw new Error('Index + length too high');\n }\n\n ary.splice(idx, length);\n\n return ary;\n}\n\nexport function clear(ary: T[]): void {\n ary.splice(0, ary.length);\n}\n\nexport function replaceWith(ary: T[], ...values: T[]): void {\n ary.splice(0, ary.length, ...values);\n}\n\nfunction findOrFilterBy(\n method: 'filter', ary: T[] | null, keyOrObj: string | K, val?: V\n): T[];\nfunction findOrFilterBy(\n method: 'find', ary: T[] | null, keyOrObj: string | K, val?: V\n): T;\nfunction findOrFilterBy(\n method: keyof T[], ary: T[] | null, keyOrObj: string | K, val?: V\n): T[] {\n ary = ary || [];\n\n if ( typeof keyOrObj === 'object' ) {\n return (ary[method] as Function)((item: T) => {\n for ( const path in keyOrObj ) {\n const want = keyOrObj[path];\n const have = get(item, path);\n\n if ( typeof want === 'undefined' ) {\n if ( !have ) {\n return false;\n }\n } else if ( have !== want ) {\n return false;\n }\n }\n\n return true;\n });\n } else if ( val === undefined ) {\n return (ary[method] as Function)((item: T) => !!get(item, keyOrObj));\n } else {\n return (ary[method] as Function)((item: T) => get(item, keyOrObj) === val);\n }\n}\n\nexport function filterBy(\n ary: T[] | null, keyOrObj: string | K, val?: V\n): T[] {\n return findOrFilterBy('filter', ary, keyOrObj, val);\n}\n\nexport function findBy(\n ary: T[] | null, keyOrObj: string | K, val?: V\n): T {\n return findOrFilterBy('find', ary, keyOrObj, val);\n}\n\nexport function findStringIndex(items: string[], item: string, trim = true): number {\n return items.indexOf(trim ? item?.trim() : item);\n}\n\nexport function hasDuplicatedStrings(items: string[], caseSensitive = true): boolean {\n const normalizedItems = items.map((i) => (caseSensitive ? i : i.toLowerCase()).trim());\n\n for (let i = 0; i < items.length; i++) {\n const index = findStringIndex(\n normalizedItems,\n (caseSensitive ? items[i] : items[i].toLowerCase()),\n );\n\n if (i !== index) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function sameContents(aryA: T[], aryB: T[]): boolean {\n return xor(aryA, aryB).length === 0;\n}\n\nexport function sameArrayObjects(aryA: T[], aryB: T[], positionAgnostic = false): boolean {\n if (!aryA && !aryB) {\n // catch calls from js (where props aren't type checked)\n return false;\n }\n if (aryA?.length !== aryB?.length) {\n // catch one null and not t'other, and different lengths\n return false;\n }\n\n if (positionAgnostic) {\n const consumedB: { [pos: number]: boolean } = {};\n\n aryB.forEach((_, index) => {\n consumedB[index] = false;\n });\n\n for (let i = 0; i < aryA.length; i++) {\n const a = aryA[i];\n\n const validA = aryB.findIndex((arB, index) => isEqual(arB, a) && !consumedB[index] );\n\n if (validA >= 0) {\n consumedB[validA] = true;\n } else {\n return false;\n }\n }\n } else {\n for (let i = 0; i < aryA.length; i++) {\n if (!isEqual(aryA[i], aryB[i])) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function uniq(ary: T[]): T[] {\n const out: T[] = [];\n\n addObjects(out, ary);\n\n return out;\n}\n\nexport function concatStrings(a: string[], b: string[]): string[] {\n return [...a.map((aa) => b.map((bb) => aa.concat(bb)))].reduce((acc, arr) => [...arr, ...acc], []);\n}\n\n/**\n * Join list as string into a new string without duplicates\n * @param {string} a 'a b c'\n * @param {string} b 'b c d'\n * @param {string} [separator=' ']\n * @return {string} 'a b c d'\n */\nexport const joinStringList = (a: string, b: string, separator = ' '): string => {\n const all = a.split(separator).concat(b.split(separator));\n\n return [...new Set(all)].join(separator);\n};\n","export const waitFor = (testFn: Function, msg = '', timeoutMs = 3000000, intervalMs = 500, log = false): Promise => {\n gatedLog('Starting wait for', msg);\n\n return new Promise((resolve, reject) => {\n if (testFn()) {\n gatedLog('Wait for', msg || 'unknown', 'done immediately');\n resolve(this);\n }\n const timeout = setTimeout(() => {\n gatedLog('Wait for', msg, 'timed out');\n clearInterval(interval);\n clearTimeout(timeout);\n reject(new Error(msg ? `Failed waiting for: ${ msg }` : `waitFor timed out after ${ timeoutMs / 1000 } seconds`));\n }, timeoutMs);\n const interval = setInterval(() => {\n if ( testFn() ) {\n gatedLog('Wait for', msg, 'done');\n clearInterval(interval);\n clearTimeout(timeout);\n resolve(this);\n } else if (msg) {\n gatedLog('Wait for', msg, 'not done yet');\n }\n }, intervalMs);\n });\n\n function gatedLog(...args: any[]) {\n if (log) {\n console.log(...args); // eslint-disable-line no-console\n }\n }\n};\n\nexport const wait = (milliseconds: number): Promise => new Promise((resolve) => setTimeout(resolve, milliseconds));\n","import { requireJson } from '@shell/utils/require-asset';\n\n/**\n * Brand/Theme metadata\n */\nexport interface BrandMeta {\n // Does the banner have a stylesheet?\n hasStylesheet?: string;\n banner?: {\n // Text alignment for the banner text overlayed on the banner image\n textAlign?: string;\n }\n}\n\n/**\n * Get the brand/theme meta information for the specified brand\n *\n * @param brand - The brand identifier\n * @returns Brand meta information or empty object if none available\n */\nexport function getBrandMeta(brand: string): BrandMeta {\n let brandMeta: BrandMeta = {};\n\n if (brand) {\n try {\n brandMeta = requireJson(`~shell/assets/brand/${ brand }/metadata.json`) as BrandMeta;\n } catch {}\n }\n\n return brandMeta;\n}\n","import { isEmpty, isEqual } from 'lodash';\nimport {\n BundleDeploymentResource,\n BundleResourceKey,\n BundleDeployment,\n BundleDeploymentStatus,\n Condition,\n} from '@shell/types/resources/fleet';\nimport { mapStateToEnum, STATES_ENUM, STATES } from '@shell/plugins/dashboard-store/resource-class';\nimport { FLEET as FLEET_LABELS, CAPI } from '@shell/config/labels-annotations';\nimport { NAME as EXPLORER_NAME } from '@shell/config/product/explorer';\nimport { FleetDashboardState, FleetResourceState, Target, TargetMode } from '@shell/types/fleet';\nimport { FLEET, VIRTUAL_HARVESTER_PROVIDER } from '@shell/config/types';\n\ninterface Resource extends BundleDeploymentResource {\n state: string,\n}\n\ntype Labels = {\n [key: string]: string,\n}\n\nfunction resourceKey(r: BundleResourceKey): string {\n return `${ r.kind }/${ r.namespace }/${ r.name }`;\n}\n\nfunction conditionIsTrue(conditions: Condition[] | undefined, type: string): boolean {\n if (!conditions) {\n return false;\n }\n\n return !!conditions.find((c) => c.type === type && c.status.toLowerCase() === 'true');\n}\n\nclass Application {\n /**\n * gitrepos/helmops are already restricted to clusters in their own namespace\n *\n * this empty selector means all applicable clusters will be selected\n */\n includeAllWorkgroupRule = { clusterSelector: { matchExpressions: [] } }\n\n excludeHarvesterRule = {\n clusterSelector: {\n matchExpressions: [{\n key: CAPI.PROVIDER,\n operator: 'NotIn',\n values: [\n VIRTUAL_HARVESTER_PROVIDER\n ],\n }],\n },\n };\n\n getTargetMode(targets: Target[], namespace: string, areHarvesterHostsVisible: boolean): TargetMode {\n if (namespace === 'fleet-local') {\n return 'local';\n }\n\n if (!targets.length) {\n return 'none';\n }\n\n let mode: TargetMode = 'all';\n\n for (const target of targets) {\n const {\n clusterName,\n clusterSelector,\n clusterGroup,\n clusterGroupSelector,\n } = target;\n\n if (clusterGroupSelector) {\n return 'advanced';\n }\n\n if (clusterName || clusterGroup) {\n mode = 'clusters';\n }\n\n if (!isEmpty(clusterSelector)) {\n mode = 'clusters';\n }\n }\n\n const normalized = [...targets].map((target) => {\n delete target.name;\n\n return target;\n });\n\n // Check if targets contains only harvester rule or no rule at all after name normalizing\n // That means the ALL option has been selected previously\n // one case for feature harvester-baremetal-container-workload ON\n // and another for feature harvester-baremetal-container-workload OFF\n if (isEqual(normalized, [this.includeAllWorkgroupRule]) || isEqual(normalized, [this.excludeHarvesterRule])) {\n mode = 'all';\n }\n\n return mode;\n }\n}\n\nclass Fleet {\n resourceIcons = {\n [FLEET.GIT_REPO]: 'icon icon-github',\n [FLEET.HELM_OP]: 'icon icon-helm',\n };\n\n dashboardIcons = {\n [FLEET.GIT_REPO]: 'icon icon-git',\n [FLEET.HELM_OP]: 'icon icon-helm',\n };\n\n dashboardStates: FleetDashboardState[] = [\n {\n index: 0,\n id: 'error',\n label: 'Error',\n color: '#F64747',\n icon: 'icon icon-error',\n stateBackground: 'bg-error'\n },\n {\n index: 1,\n id: 'warning',\n label: 'Warning',\n color: '#DAC342',\n icon: 'icon icon-warning',\n stateBackground: 'bg-warning'\n },\n {\n index: 2,\n id: 'success',\n label: 'Active',\n color: '#5D995D',\n icon: 'icon icon-checkmark',\n stateBackground: 'bg-success'\n },\n {\n index: 3,\n id: 'info',\n label: 'Pending',\n color: '#3d98d3',\n icon: 'icon icon-warning',\n stateBackground: 'bg-info'\n },\n ];\n\n Application = new Application();\n\n GIT_HTTPS_REGEX = /^https?:\\/\\/github\\.com\\/(.*?)(\\.git)?\\/*$/;\n GIT_SSH_REGEX = /^git@github\\.com:.*\\.git$/;\n HTTP_REGEX = /^(https?:\\/\\/[^\\s]+)$/;\n OCI_REGEX = /^oci:\\/\\//;\n\n quacksLikeAHash(str: string) {\n if (str.match(/^[a-f0-9]{40,}$/i)) {\n return true;\n }\n\n return false;\n }\n\n parseSSHUrl(url: string) {\n const parts = (url || '').split(':');\n\n const sshUserAndHost = parts[0];\n const repoPath = parts[1]?.replace('.git', '');\n\n return {\n sshUserAndHost,\n repoPath\n };\n }\n\n resourceId(r: BundleResourceKey): string {\n return r.namespace ? `${ r.namespace }/${ r.name }` : r.name;\n }\n\n /**\n * resourceType normalizes APIVersion and Kind from a Resources into a single string\n */\n resourceType(r: Resource): string {\n // ported from https://github.com/rancher/fleet/blob/v0.10.0/internal/cmd/controller/grutil/resourcekey.go#L116-L128\n const type = r.kind.toLowerCase();\n\n if (!r.apiVersion || r.apiVersion === 'v1') {\n return type;\n }\n\n return `${ r.apiVersion.split('/', 2)[0] }.${ type }`;\n }\n\n detailLocation(r: Resource, mgmtClusterName: string): any {\n const location = mapStateToEnum(r.state) === STATES_ENUM.MISSING ? undefined : {\n name: `c-cluster-product-resource${ r.namespace ? '-namespace' : '' }-id`,\n params: {\n product: EXPLORER_NAME,\n cluster: mgmtClusterName,\n resource: this.resourceType(r),\n namespace: r.namespace,\n id: r.name,\n },\n };\n\n // Having an undefined param can yield a console warning like [Vue Router warn]: Discarded invalid param(s) \"namespace\" when navigating\n if (location && !location.params.namespace) {\n delete location.params.namespace;\n }\n\n return location;\n }\n\n /**\n * resourcesFromBundleDeploymentStatus extracts the list of resources deployed by a BundleDeployment\n */\n resourcesFromBundleDeploymentStatus(status: BundleDeploymentStatus): Resource[] {\n // status.resources includes of resources that were deployed by Fleet *and still exist in the cluster*\n // Use a map to avoid `find` over and over again\n const resources = (status?.resources || []).reduce((res, r) => {\n res[resourceKey(r)] = Object.assign({ state: STATES_ENUM.READY }, r);\n\n return res;\n }, {} as { [resourceKey: string]: Resource });\n\n const modified: Resource[] = [];\n\n for (const r of status?.modifiedStatus || []) {\n const state = r.missing ? STATES_ENUM.MISSING : r.delete ? STATES_ENUM.ORPHANED : STATES_ENUM.MODIFIED;\n const found: Resource = resources[resourceKey(r)];\n\n // Depending on the state, the same resource can appear in both fields\n if (found) {\n found.state = state;\n } else {\n modified.push(Object.assign({ state }, r));\n }\n }\n for (const r of status?.nonReadyStatus || []) {\n const state = r.summary?.state || STATES_ENUM.UNKNOWN;\n const found: Resource = resources[resourceKey(r)];\n\n if (found) {\n found.state = state;\n }\n }\n\n return modified.concat(Object.values(resources));\n }\n\n clusterIdFromBundleDeploymentLabels(labels?: Labels): string {\n const clusterNamespace = labels?.[FLEET_LABELS.CLUSTER_NAMESPACE];\n const clusterName = labels?.[FLEET_LABELS.CLUSTER];\n\n return `${ clusterNamespace }/${ clusterName }`;\n }\n\n bundleIdFromBundleDeploymentLabels(labels?: Labels): string {\n const bundleNamespace = labels?.[FLEET_LABELS.BUNDLE_NAMESPACE];\n const bundleName = labels?.[FLEET_LABELS.BUNDLE_NAME];\n\n return `${ bundleNamespace }/${ bundleName }`;\n }\n\n bundleDeploymentState(bd: BundleDeployment): string {\n // Ported from https://github.com/rancher/fleet/blob/534dbfdd6f74caf97bccd4cf977e42c5009b2432/internal/cmd/controller/summary/summary.go#L89\n if (bd.status?.appliedDeploymentId !== bd.spec.deploymentId) {\n return conditionIsTrue(bd.status?.conditions, 'Deployed') ? STATES_ENUM.WAIT_APPLIED : STATES_ENUM.ERR_APPLIED;\n } else if (!bd.status?.ready) {\n return STATES_ENUM.NOT_READY;\n } else if (bd.spec.deploymentId !== bd.spec.stagedDeploymentId) {\n return STATES_ENUM.OUT_OF_SYNC;\n } else if (!bd.status?.nonModified) {\n return STATES_ENUM.MODIFIED;\n } else {\n return STATES_ENUM.READY;\n }\n }\n\n getResourcesDefaultState(labelGetter: (key: string, args: any, fallback: any) => Record, stateKey: string): Record {\n return [\n STATES_ENUM.READY,\n STATES_ENUM.NOT_READY,\n STATES_ENUM.WAIT_APPLIED,\n STATES_ENUM.MODIFIED,\n STATES_ENUM.MISSING,\n STATES_ENUM.ORPHANED,\n STATES_ENUM.UNKNOWN,\n ].reduce((acc: Record, state) => {\n acc[state] = {\n count: 0,\n color: STATES[state].color,\n label: labelGetter(`${ stateKey }.${ state }`, null, STATES[state].label ),\n status: state\n };\n\n return acc;\n }, {});\n }\n\n getBundlesDefaultState(labelGetter: (key: string, args: any, fallback: any) => Record, stateKey: string): Record {\n return [\n STATES_ENUM.READY,\n STATES_ENUM.INFO,\n STATES_ENUM.WARNING,\n STATES_ENUM.NOT_READY,\n STATES_ENUM.ERROR,\n STATES_ENUM.ERR_APPLIED,\n STATES_ENUM.WAIT_APPLIED,\n STATES_ENUM.UNKNOWN,\n ].reduce((acc: Record, state) => {\n acc[state] = {\n count: 0,\n color: STATES[state].color,\n label: labelGetter(`${ stateKey }.${ state }`, null, STATES[state].label ),\n status: state\n };\n\n return acc;\n }, {});\n }\n\n getDashboardStateId(resource: { stateColor: string }): string {\n return resource?.stateColor?.replace('text-', '') || 'warning';\n }\n\n getDashboardState(resource: { stateColor: string }): FleetDashboardState | {} {\n const stateId = this.getDashboardStateId(resource);\n\n return this.dashboardStates.find(({ id }) => stateId === id) || {};\n }\n}\n\nconst instance = new Fleet();\n\nexport default instance;\n","export type GC_PREFERENCES = {\n enabled: boolean,\n enabledInterval: boolean,\n interval: number,\n enabledOnNavigate: boolean,\n ageThreshold: number,\n countThreshold: number\n}\n\nexport const GC_DEFAULTS: GC_PREFERENCES = {\n enabled: false,\n\n // When GC Runs\n enabledInterval: true,\n interval: 1 * 60 * 5,\n enabledOnNavigate: true,\n\n // How GC handles resources when GC'ing\n ageThreshold: 1 * 60 * 2,\n countThreshold: 500,\n};\n","import { SETTING } from '@shell/config/settings';\nimport { COUNT, MANAGEMENT } from '@shell/config/types';\nimport { GC_DEFAULTS, GC_PREFERENCES } from './gc-types';\n\nclass GarbageCollect {\n private static ENABLE_DEBUG_LOGGING = false;\n\n /**\n * Don't run GC if it's been run within 5 seconds\n */\n private static GC_RE_RUN_GAP = 1000 * 5;\n\n private cachedGcPrefs: GC_PREFERENCES = GC_DEFAULTS;\n\n private cachedGcPrefsStamp = '';\n\n private debugLog = (...args: any) => {\n if (GarbageCollect.ENABLE_DEBUG_LOGGING) {\n console.debug('GC', ...args); // eslint-disable-line no-console\n }\n };\n\n /**\n * Time the GC last ran\n */\n private gcLastRun: number | null = 0;\n\n /**\n * To avoid JSON.parse on the `ui-performance` setting keep a local cache\n */\n private getUiPerfGarbageCollection = (rootState: any) => {\n const uiPerfSetting = rootState.management.types[MANAGEMENT.SETTING]?.list?.find((s: any) => s.id === SETTING.UI_PERFORMANCE);\n\n if (!uiPerfSetting || !uiPerfSetting.value) {\n // Could be in the process of logging out\n return undefined;\n }\n const stamp = `${ uiPerfSetting.metadata.generation }-${ uiPerfSetting.metadata.resourceVersion }`;\n\n if (this.cachedGcPrefsStamp !== stamp) {\n this.debugLog(`Updating ${ SETTING.UI_PERFORMANCE } cache`);\n this.cachedGcPrefsStamp = stamp;\n const uiPerfSettingParsed = JSON.parse(uiPerfSetting.value);\n\n this.cachedGcPrefs = uiPerfSettingParsed.garbageCollection;\n }\n\n return this.cachedGcPrefs;\n };\n\n /**\n * The last time a resource was accessed by either find or getters style functions\n */\n private lastAccessedCache: {\n [store: string]: {\n [type: string]: number;\n }\n } = {}\n\n /**\n * Track when a logged in route changes.\n */\n private lastRouteChange = 0;\n\n // ------------- GC Enabled ---------------------\n\n gcEnabledAll(pseudoCtx: any, type: string) {\n return this.gcEnabledForStore(pseudoCtx.state) && this.gcEnabledSetting(pseudoCtx) && this.gcEnabledForType(pseudoCtx, type);\n }\n\n gcEnabledSetting(pseudoCtx: any) {\n const { rootState } = pseudoCtx;\n\n // Don't use a getter... as we'll end up triggering ourselves again\n const uiPerfGarbageCollection = this.getUiPerfGarbageCollection(rootState);\n\n return uiPerfGarbageCollection?.enabled;\n }\n\n gcEnabledForStore(state: any) {\n return state?.config?.supportsGc;\n }\n\n /**\n * Store can require certain types are not GC'd (for example `cluster` and `schema`s, `counts`, etc)\n */\n gcEnabledForType(pseudoCtx: any, type: string) {\n const { getters } = pseudoCtx;\n\n if (!type || getters.gcIgnoreTypes[type]) {\n return false;\n }\n\n return true;\n }\n\n gcEnabledInterval(pseudoCtx: any) {\n const { rootState } = pseudoCtx;\n\n // Don't use a getter... as we'll end up triggering ourselves again\n const uiPerfGarbageCollection = this.getUiPerfGarbageCollection(rootState);\n\n return {\n enabled: uiPerfGarbageCollection?.enabledInterval,\n interval: uiPerfGarbageCollection?.interval || 0\n };\n }\n\n gcEnabledRoute(pseudoCtx: any) {\n const { rootState } = pseudoCtx;\n\n // Don't use a getter... as we'll end up triggering ourselves again\n const uiPerfGarbageCollection = this.getUiPerfGarbageCollection(rootState);\n\n return uiPerfGarbageCollection?.enabledOnNavigate;\n }\n\n // ------------- GC (actual) ---------------------\n\n /**\n * Remove stale resource types from the store and stop watching them for changes\n */\n garbageCollect(ctx: any, ignoreTypes: {[type: string]: boolean} = {}) {\n const now = new Date().getTime();\n\n // Is gc currently running OR has run in the past GC_RE_RUN_GAP return early\n if (this.gcLastRun === null || now - this.gcLastRun < GarbageCollect.GC_RE_RUN_GAP) {\n this.debugLog('Skipping (running or recently run)', this.gcLastRun ? new Date(this.gcLastRun) : 'running');\n\n return;\n }\n\n this.gcLastRun = null;\n const gcd: {[type: string]: number} = {};\n\n try {\n const { getters, rootState, dispatch } = ctx;\n\n if (!rootState.clusterReady) {\n this.debugLog('Skipping (cluster not ready)');\n this.gcLastRun = new Date().getTime();\n\n return ;\n }\n this.debugLog(`------ Started ------`);\n\n const uiPerfGarbageCollection = this.getUiPerfGarbageCollection(rootState);\n\n if (!uiPerfGarbageCollection) {\n return ;\n }\n const maxAge = uiPerfGarbageCollection.ageThreshold * 1000;\n const maxCount = uiPerfGarbageCollection.countThreshold;\n\n this.debugLog(`Max Age: ${ maxAge }. Max Count: ${ maxCount }`);// , 'Cache', this.lastAccessedCache\n\n const store = ctx.state.config.namespace;\n\n // this.debugLog('Cache', this.lastAccessedCache);\n\n Object.entries((this.lastAccessedCache[store] || {})).forEach(([type, lastAccessed]) => {\n if (!lastAccessed) {\n // There's no last accessed time... gc is probably disabled in another way\n this.debugLog(`${ type }: Skipping (no accessed time)`);\n\n return;\n }\n\n if (!this.gcEnabledForType(ctx, type)) {\n // This specific store is telling us to ignore the type (for example `cluster` store will not GC schema's, counts, etc)\n this.debugLog(`${ type }: Skipping (type ignored by store)`);\n\n return;\n }\n\n if (ignoreTypes[type]) {\n // We're going to a place that needs the resource\n this.debugLog(`${ type }: Skipping (navigating to type)`);\n\n return;\n }\n\n if (now - lastAccessed <= maxAge) {\n // The resource was recently accessed\n\n this.debugLog(`${ type }: Skipping (recently accessed)`);\n\n return;\n }\n\n if (this.lastRouteChange !== undefined && this.lastRouteChange < lastAccessed ) {\n // The resource is being used in the current route/page\n this.debugLog(`${ type }: Skipping (used in current route/page)`);\n\n return;\n }\n\n const countFromResource = getters.all(COUNT)[0].counts[type]?.summary.count;\n const currentCount = countFromResource ?? 0;\n\n if (currentCount === undefined || currentCount < maxCount) {\n // There's too few resources, we might as well keep them to avoid a network request when we need them again\n this.debugLog(`${ type }: Skipping (too few of resource)`);\n\n return;\n }\n\n this.debugLog(`${ type }: Removing from store`);\n dispatch('forgetType', type);\n gcd[type] = currentCount;\n });\n\n this.gcLastRun = new Date().getTime();\n } catch (e) {\n this.debugLog(`: Error`, e);\n this.gcLastRun = new Date().getTime();\n }\n\n if (Object.keys(gcd).length > 0) {\n console.info('Garbage Collected Resources', gcd); // eslint-disable-line no-console\n }\n\n this.debugLog(`------ Finished ------`);\n }\n\n // ------------- GC Update local cache ---------------------\n\n /**\n * Update the time that the resource type was accessed\n * This needs to run after any type initialisation (aka registerType)\n */\n gcUpdateLastAccessed(pseudoCtx: any, type: string) {\n if (!this.gcEnabledAll(pseudoCtx, type)) {\n return;\n }\n const store = pseudoCtx.state.config.namespace;\n\n if (!this.lastAccessedCache[store]) {\n this.lastAccessedCache[store] = {};\n }\n\n this.lastAccessedCache[store][type] = new Date().getTime();\n }\n\n /**\n * Update the time the user last changed routes\n */\n gcUpdateRouteChanged() {\n this.lastRouteChange = new Date().getTime();\n }\n\n // ------------- GC reset ---------------------\n\n /**\n * Remove all cached access times for the given store\n */\n gcResetStore(state: any) {\n const store = state.config.namespace;\n\n delete this.lastAccessedCache[store];\n\n this.debugLog('Forgetting Store:', store);\n }\n\n /**\n * Remove cached access time for the given resource type\n */\n gcResetType(state: any, type: string) {\n const store = state.config.namespace;\n\n if (!this.lastAccessedCache[store]) {\n return;\n }\n delete this.lastAccessedCache[store][type];\n\n this.debugLog('Forgetting Type:', store, type);\n }\n}\n\nconst gc = new GarbageCollect();\n\nexport default gc;\n","import {\n PaginationFeature, PaginationFeatureHomePageClusterConfig, PaginationFeatureName, PaginationSettings, PaginationSettingsFeatures, PaginationSettingsStore, PaginationSettingsStores\n} from '@shell/types/resources/settings';\nimport {\n NAMESPACE_FILTER_ALL_USER as ALL_USER,\n NAMESPACE_FILTER_ALL as ALL,\n NAMESPACE_FILTER_ALL_SYSTEM as ALL_SYSTEM,\n NAMESPACE_FILTER_NAMESPACED_YES as NAMESPACED_YES,\n NAMESPACE_FILTER_NAMESPACED_NO as NAMESPACED_NO,\n NAMESPACE_FILTER_KINDS,\n NAMESPACE_FILTER_NS_FULL_PREFIX,\n NAMESPACE_FILTER_P_FULL_PREFIX,\n} from '@shell/utils/namespace-filter';\nimport { PaginationArgs, PaginationResourceContext, PaginationParam, PaginationSort } from '@shell/types/store/pagination.types';\nimport { sameArrayObjects } from '@shell/utils/array';\nimport { isEqual } from '@shell/utils/object';\nimport { STEVE_CACHE } from '@shell/store/features';\nimport { getPerformanceSetting } from '@shell/utils/settings';\nimport { PAGINATION_SETTINGS_STORE_DEFAULTS } from '@shell/plugins/steve/steve-pagination-utils';\nimport { MANAGEMENT } from '@shell/config/types';\nimport { VuexStore } from '@shell/types/store/vuex';\nimport { ServerSidePaginationExtensionConfig } from '@shell/core/types';\nimport { EXT_IDS } from '@shell/core/plugin';\nimport { ExtensionManager } from '@shell/types/extension-manager';\nimport { DEFAULT_PERF_SETTING } from '@shell/config/settings';\n\n// This feature will be removed soon - https://github.com/rancher/dashboard/issues/17323\nconst homePageClusterFeature: PaginationFeature = {\n version: 1,\n enabled: false,\n configuration: {\n threshold: 500, results: 250, pagesPerRow: 25\n }\n};\nconst PAGINATION_SETTINGS_FEATURE_DEFAULTS: PaginationSettingsFeatures = { homePageCluster: homePageClusterFeature };\n\n/**\n * Helper functions for server side pagination\n */\nclass PaginationUtils {\n /**\n * In places where we're using paginated features but not in a page... this is what the max results should be\n */\n readonly defaultPageSize = 100000;\n /**\n * When a ns filter isn't one or more projects/namespaces... what are the valid values?\n *\n * This basically blocks 'Not in a Project'.. which would involve a projectsornamespaces param with every ns not in a project.\n */\n readonly validNsProjectFilters = [ALL, ALL_SYSTEM, ALL_USER, ALL_SYSTEM, NAMESPACE_FILTER_KINDS.NAMESPACE, NAMESPACE_FILTER_KINDS.PROJECT, NAMESPACED_YES, NAMESPACED_NO];\n\n private getSettings({ rootGetters }: any): PaginationSettings {\n const perf = getPerformanceSetting(rootGetters);\n\n return perf.serverPagination;\n }\n\n public getStoreSettings(ctx: any): PaginationSettingsStores\n public getStoreSettings(serverPagination: PaginationSettings): PaginationSettingsStores\n public getStoreSettings(arg: any | PaginationSettings): PaginationSettingsStores {\n const serverPagination: PaginationSettings = arg?.rootGetters !== undefined ? this.getSettings(arg) : arg;\n\n // Ensure we use the current default store settings if\n // 1. from 2.11.0 user saved `ui-performance` setting and it's applied the default pagination settings containing useDefaultStores\n // 2. before 2.11.0 user has saved `ui-performance` setting and it's applied an obsolete pagination settings that lack useDefaultStore\n // 3. user has manually set the `ui-performance` pagination setting useDefaultStores value\n if (serverPagination?.useDefaultStores || serverPagination?.useDefaultStores === undefined) {\n return this.getStoreDefault();\n }\n\n return serverPagination?.stores || this.getStoreDefault();\n }\n\n public getStoreDefault(): PaginationSettingsStores {\n return PAGINATION_SETTINGS_STORE_DEFAULTS;\n }\n\n isSteveCacheEnabled({ rootGetters }: any): boolean {\n // We always get Feature flags as part of start up (see `dispatch('features/loadServer')` in loadManagement)\n return rootGetters['features/get']?.(STEVE_CACHE);\n }\n\n /**\n * Determine if the downstream cluster has vai enabled\n *\n * Almost all the time the downstream cluster vai state will align with upstream (it manages it)\n * ... unless it's harvester then weird things happen\n */\n async isDownstreamSteveCacheEnabled({ dispatch }: any, clusterId: string): Promise {\n const url = `/k8s/clusters/${ clusterId }/v1/${ MANAGEMENT.FEATURE }s/${ STEVE_CACHE }`;\n const entry = await dispatch('cluster/request', { url });\n\n if (entry.status.lockedValue !== null) {\n return entry.status.lockedValue;\n }\n\n return (entry.spec.value !== null) ? entry.spec.value : entry.status.default;\n }\n\n /**\n * Helper - check if a specific resource in a specific store is enabled given the provided settings\n */\n private isEnabledInStore({\n ctx: { rootGetters },\n storeSettings,\n enabledFor\n }: {\n ctx: Partial,\n storeSettings: PaginationSettingsStore,\n enabledFor: PaginationResourceContext\n }): boolean {\n // No pagination setting for target store, not enabled\n if (!storeSettings) {\n return false;\n }\n\n // Not interested in a resource, so just top level settings are checked\n if (!enabledFor.resource) {\n return true;\n }\n\n // Store says all resources are enabled\n if (storeSettings.resources.enableAll) {\n return true;\n }\n\n // given a resource... but no id... invalid\n if (!enabledFor.resource.id) {\n return false;\n }\n\n // Store says only some (those that have pagination columns not from schema and no custom list)\n const isGeneric =\n !rootGetters['type-map/configuredHeaders'](enabledFor.resource.id) &&\n !rootGetters['type-map/configuredPaginationHeaders'](enabledFor.resource.id) &&\n !rootGetters['type-map/hasCustomList'](enabledFor.resource.id);\n\n // Store says generic resource with no custom pagination settings are supported\n if (storeSettings.resources.enableSome?.generic && isGeneric) {\n return true;\n }\n\n // Store says some specific resources are enabled\n if (storeSettings.resources.enableSome?.enabled?.find((setting) => {\n if (typeof setting === 'string') {\n return setting === enabledFor.resource?.id;\n }\n\n if (setting.resource === enabledFor.resource?.id) {\n // Store says only specific usages of this resource are enabled\n if (!!setting.context) {\n return enabledFor.resource?.context ? setting.context.includes(enabledFor.resource.context) : false;\n }\n\n return true;\n }\n\n return false;\n })) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Is pagination enabled at a global level or for a specific resource\n */\n isEnabled({ rootGetters, $extension }: any, enabledFor: PaginationResourceContext) {\n // Cache must be enabled to support pagination api\n if (!this.isSteveCacheEnabled({ rootGetters })) {\n return false;\n }\n\n const settings = this.getSettings({ rootGetters });\n\n // No setting, not enabled\n if (!settings) {\n return false;\n }\n\n // Missing required params, not enabled\n if (!enabledFor) {\n return false;\n }\n\n // Does an extension say this type is enabled?\n const plugin = $extension as ExtensionManager;\n const paginationExtensionPoints = plugin.getAll()[EXT_IDS.SERVER_SIDE_PAGINATION_RESOURCES];\n\n if (paginationExtensionPoints) {\n const allowed = Object.entries(paginationExtensionPoints).find(([_, settingsFn]) => {\n if (!settingsFn) {\n return false;\n }\n\n const settings: ServerSidePaginationExtensionConfig = settingsFn();\n const allowed = Object.entries(settings).find(([store, settings]) => {\n if (store !== enabledFor.store) {\n return false;\n }\n\n return this.isEnabledInStore({\n ctx: { rootGetters },\n storeSettings: settings,\n enabledFor\n });\n });\n\n if (allowed) {\n return true;\n }\n });\n\n if (allowed) {\n return true;\n }\n }\n\n const storeSettings = this.getStoreSettings(settings)?.[enabledFor.store];\n\n return this.isEnabledInStore({\n ctx: { rootGetters },\n storeSettings,\n enabledFor\n });\n }\n\n listAutoRefreshToggleEnabled({ rootGetters }: any): boolean {\n return this.isFeatureEnabled({ rootGetters }, 'listAutoRefreshToggle');\n }\n\n isListManualRefreshEnabled({ rootGetters }: any): boolean {\n return this.isFeatureEnabled({ rootGetters }, 'listManualRefresh');\n }\n\n getFeature({ rootGetters }: any, featureName: PaginationFeatureName): PaginationFeature | undefined {\n // Cache must be enabled to support pagination api\n if (!this.isSteveCacheEnabled({ rootGetters })) {\n return undefined;\n }\n\n const settings = this.getSettings({ rootGetters });\n\n return settings.features?.[featureName] || PAGINATION_SETTINGS_FEATURE_DEFAULTS[featureName];\n }\n\n private isFeatureEnabled({ rootGetters }: any, featureName: PaginationFeatureName): boolean {\n return !!this.getFeature({ rootGetters }, featureName)?.enabled;\n }\n\n resourceChangesDebounceMs({ rootGetters }: any): number | undefined {\n const settings = this.getSettings({ rootGetters });\n\n return settings.resourceChangesDebounceMs || DEFAULT_PERF_SETTING.serverPagination.resourceChangesDebounceMs;\n }\n\n validateNsProjectFilters(nsProjectFilters: string[]) {\n return nsProjectFilters?.every((f) => this.validateNsProjectFilter(f));\n }\n\n validateNsProjectFilter(nsProjectFilter: string) {\n if (nsProjectFilter.startsWith(NAMESPACE_FILTER_NS_FULL_PREFIX) || nsProjectFilter.startsWith(NAMESPACE_FILTER_P_FULL_PREFIX)) {\n return true;\n }\n\n return this.validNsProjectFilters.includes(nsProjectFilter);\n }\n\n paginationFilterEqual(a: PaginationParam, b: PaginationParam): boolean {\n if (a.param !== b.param || a.equals !== b.equals) {\n return false;\n }\n\n return sameArrayObjects(a.fields, b.fields, true);\n }\n\n paginationFiltersEqual(a: PaginationParam[], b: PaginationParam[]): boolean {\n if (!!a && a?.length !== b?.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!this.paginationFilterEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n paginationEqual(a?: PaginationArgs, b?: PaginationArgs): boolean {\n const {\n filters: aFilter = [], sort: aSort = [], projectsOrNamespaces: aPN = [], ...aPrimitiveTypes\n } = a || {};\n const {\n filters: bFilter = [], sort: bSort = [], projectsOrNamespaces: bPN = [], ...bPrimitiveTypes\n } = b || {};\n\n return isEqual(aPrimitiveTypes, bPrimitiveTypes) &&\n this.paginationFiltersEqual(aFilter, bFilter) &&\n this.paginationFiltersEqual(aPN, bPN) &&\n sameArrayObjects(aSort, bSort, false);\n }\n}\n\nexport default new PaginationUtils();\n","import { PerfSettings } from '@shell/config/settings';\n\ntype PaginationSupersedesSettings = 'incrementalLoading' | 'manualRefresh'\n\nclass _Utils {\n private setting: PaginationSupersedesSettings;\n constructor(setting: PaginationSupersedesSettings) {\n this.setting = setting;\n }\n\n /**\n * This is a centralised point to ensure SSP takes precedence over the performance setting\n */\n isEnabled(paginationEnabled: boolean, perfSettings: PerfSettings): boolean {\n return !paginationEnabled && perfSettings[this.setting].enabled;\n }\n}\n\nexport default {\n /**\n * Helper functions for the 'incremental loading indicator' performance settings\n */\n incrementalLoadingUtils: new _Utils('incrementalLoading'),\n /**\n * Helper functions for the 'manual refresh' performance settings\n */\n manualRefreshUtils: new _Utils('manualRefresh'),\n};\n","/**\n * Utility to replace dynamic require() calls for image/asset imports.\n *\n * Uses webpack's require.context to resolve assets at compile time,\n * then provides lookup functions by path.\n *\n * When migrating to Vite, replace the require.context calls below with:\n *\n * const imgCtx = import.meta.glob(\n * '@shell/assets/**\\/*.{svg,png,jpg,jpeg,gif,ico,webp}',\n * { eager: true, query: '?url', import: 'default' }\n * );\n *\n * const jsonCtx = import.meta.glob(\n * '@shell/assets/**\\/*.json',\n * { eager: true }\n * );\n */\n\n// --- Webpack: require.context type declarations ---\n\ninterface WebpackRequireContext {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key: string): any;\n keys(): string[];\n resolve(key: string): string;\n id: string;\n}\n\n// --- Webpack: require.context (compile-time transform) ---\n\nlet imgCtx: WebpackRequireContext | null = null;\nlet jsonCtx: WebpackRequireContext | null = null;\n\ntry {\n // @ts-expect-error — require.context is a webpack compile-time transform, not visible to TypeScript\n imgCtx = require.context('@shell/assets', true, /\\.(svg|png|jpe?g|gif|ico|webp)$/);\n} catch (e) {}\n\ntry {\n // @ts-expect-error — require.context is a webpack compile-time transform, not visible to TypeScript\n jsonCtx = require.context('@shell/assets', true, /\\.json$/);\n} catch (e) {}\n\n/**\n * Convert an asset path to a require.context key.\n *\n * Input: '~shell/assets/images/providers/aws.svg' or '@shell/assets/images/providers/aws.svg'\n * Output: './images/providers/aws.svg'\n */\nexport function toContextKey(path: string): string {\n return `./${ path.replace(/^[~@]shell\\/assets\\//, '') }`;\n}\n\n/**\n * Look up an image asset URL by path, similar to Webpack's require() for images.\n *\n * Accepts paths with ~shell/ or @shell/ prefix.\n * Throws if the asset is not found (matching the original require() behavior),\n * so callers can use try/catch for fallback logic.\n */\nexport function requireAsset(path: string): string {\n if (!imgCtx) {\n // Throw to match original require() behavior — callers rely on try/catch for fallback logic\n throw new Error(`Asset context not available for: ${ path }`);\n }\n\n const key = toContextKey(path);\n\n return imgCtx(key);\n}\n\n/**\n * Load a JSON file from @shell/assets.\n *\n * Throws if the JSON file is not found (matching the original require() behavior),\n * so callers can use try/catch for fallback logic.\n */\nexport function requireJson(path: string): object {\n if (!jsonCtx) {\n // Throw to match original require() behavior — callers rely on try/catch for fallback logic\n throw new Error(`JSON context not available for: ${ path }`);\n }\n\n const key = toContextKey(path);\n const mod = jsonCtx(key);\n\n return mod.default || mod;\n}\n\n// Exported for testing — allows injecting mock contexts\nexport function _setContexts(img: WebpackRequireContext | null, json: WebpackRequireContext | null): void {\n imgCtx = img;\n jsonCtx = json;\n}\n","import { COUNT } from '@shell/config/types';\nimport { KubeLabelSelector, KubeLabelSelectorExpression } from '@shell/types/kube/kube-api';\nimport { ActionFindPageArgs } from '@shell/types/store/dashboard-store.types';\nimport { FilterArgs, PaginationFilterField, PaginationParamFilter } from '@shell/types/store/pagination.types';\nimport { isEmpty } from '@shell/utils/object';\nimport { convert, matching as rootMatching } from '@shell/utils/selector';\n\ntype MatchingResponse = {\n matched: number,\n matches: any[],\n none: boolean,\n sample: any,\n total: number,\n}\n\n/**\n * Find resources that match a labelSelector. This behaves differently if vai based pagination is on\n * a) Pagination Enabled - fetch matching resources filtered on backend - findPage\n * b) Pagination Disabled - fetch all resources and then filter locally - findAll --> root `matching` fn\n *\n * This is a much smarter version of root matching fn `matching` from shell/utils/selector.js (which just does local filtering)\n *\n * If fetching all of a resource should be avoided or we don't want to mess around with the cache the action `findLabelSelector` should be used\n * - sometimes some legacy code expects all resources are fetched\n * - sometimes we want to fetch a resource but not override the cache\n * - already have a pods list cached, don't want to overwrite that when finding pods associated with a service\n *\n * Resources are returned in a common format which includes metadata\n */\nexport async function matching({\n labelSelector,\n type,\n inStore,\n $store,\n inScopeCount = undefined,\n namespace = undefined,\n transient = true,\n}: {\n /**\n * Standard kube label selector object.\n *\n * If this is 'empty' (no matchLabels or matchExpressions) it will return all results\n *\n * If this is 'null' it will return no results\n */\n labelSelector: KubeLabelSelector,\n /**\n * Resource type\n */\n type: string,\n /**\n * Store in which resources will be cached\n */\n inStore: string,\n /**\n * Standard vuex store object\n */\n $store: any,\n /**\n * Number of resources that are applicable when filtering.\n *\n * Used to skip any potential http request if we know the result will be zero\n *\n * If this property is not supplied we'll try and discover it from the COUNTS resource.\n */\n inScopeCount?: number\n /**\n * Optional namespace or namespaces to apply selector to\n *\n * If this is undefined then namespaces will totally be ignored\n *\n * If this is provided all resources must be within them. If an empty array is provided then no resources will be matched\n *\n */\n namespace?: string | string[],\n /**\n * Should the result bypass the store?\n */\n transient?: boolean,\n}): Promise {\n const isNamespaced = $store.getters[`${ inStore }/schemaFor`](type)?.attributes.namespaced;\n const safeNamespaces = Array.isArray(namespace) ? namespace : !!namespace ? [namespace] : [];\n const filterByNamespaces = isNamespaced && !!namespace ; // Result set must come from a resource in a namespace\n\n // Determine if there's actually anything to filter on\n if (typeof inScopeCount === 'undefined') {\n const counts = $store.getters[`${ inStore }/all`](COUNT)?.[0]?.counts || {};\n\n if (filterByNamespaces) {\n inScopeCount = 0;\n safeNamespaces.forEach((n) => {\n inScopeCount += counts?.[type]?.namespaces[n]?.count || 0;\n });\n } else {\n inScopeCount = counts?.[type]?.summary?.count || 0;\n }\n }\n\n // Exit early if there are any situations that always return nothing\n const noCandidates = (inScopeCount || 0) === 0;\n const filterByNamespaceButNoNamespace = isNamespaced && !!namespace && (!safeNamespaces || safeNamespaces.length === 0);\n const explicityNullLabelSelector = labelSelector === null || (labelSelector?.matchLabels === null && !labelSelector.matchExpressions === null);\n\n // If we have matchLabels or matchExpression entries they must have a key\n const matchLabelKeys = Object.keys(labelSelector.matchLabels || {});\n const invalidMatchLabelKeys = matchLabelKeys.length && matchLabelKeys.filter((k) => !k).length;\n const invalidMatchExpressionKeys = labelSelector?.matchExpressions?.length && labelSelector.matchExpressions.filter((me) => !me.key).length;\n\n if (noCandidates || filterByNamespaceButNoNamespace || explicityNullLabelSelector || invalidMatchLabelKeys || invalidMatchExpressionKeys) {\n return generateMatchingResponse([], inScopeCount || 0);\n }\n\n if ($store.getters[`${ inStore }/paginationEnabled`]?.()) {\n if (isLabelSelectorEmpty(labelSelector) && (!!namespace && !safeNamespaces?.length)) {\n // no namespaces - ALL resources are candidates\n // no labels - return all candidates\n // too many to fetch...\n throw new Error('Either populated labelSelector or namespace/s must be supplied in order to call findPage');\n }\n\n const findPageArgs: ActionFindPageArgs = {\n pagination: new FilterArgs({\n labelSelector,\n filters: PaginationParamFilter.createMultipleFields(\n safeNamespaces.map(\n (n) => new PaginationFilterField({\n field: 'metadata.namespace', // API only compatible with steve atm...\n value: n,\n })\n )\n ),\n }),\n transient,\n };\n\n let match = await $store.dispatch(`${ inStore }/findPage`, { type, opt: findPageArgs });\n\n if (transient) {\n match = match.data;\n }\n\n return generateMatchingResponse(match, inScopeCount || 0);\n } else {\n // Start off with everything as a candidate\n let candidates = await $store.dispatch(`${ inStore }/findAll`, { type });\n\n inScopeCount = candidates.length;\n\n // Filter out namespace specific stuff\n if (isNamespaced && safeNamespaces?.length > 0) {\n candidates = candidates.filter((e: any) => safeNamespaces.includes(e.metadata?.namespace));\n inScopeCount = candidates.length;\n }\n\n // Apply labelSelector\n if (labelSelector.matchLabels || labelSelector.matchExpressions) {\n candidates = matches(candidates, labelSelector, 'metadata.labels');\n }\n\n return generateMatchingResponse(candidates, inScopeCount || 0);\n }\n}\n\nconst generateMatchingResponse = (match: T[], inScopeCount: number): MatchingResponse => {\n const matched = match.length || 0;\n const sample = match[0]?.nameDisplay;\n\n return {\n matched,\n matches: match,\n none: matched === 0,\n sample,\n total: inScopeCount || 0,\n };\n};\n\n/**\n * This is similar to shell/utils/selector.js `matches`, but accepts a kube labelSelector\n */\nfunction matches(candidates: T[], labelSelector: KubeLabelSelector, labelKey: string): T[] {\n const convertedObject = convert(labelSelector.matchLabels, labelSelector.matchExpressions);\n\n return rootMatching(candidates, convertedObject, labelKey);\n}\n\nexport function isLabelSelectorEmpty(labelSelector?: KubeLabelSelector): boolean {\n return !labelSelector?.matchExpressions?.length && isEmpty(labelSelector?.matchLabels);\n}\n\nexport function labelSelectorToSelector(labelSelector?: KubeLabelSelector): string {\n if (isLabelSelectorEmpty(labelSelector)) {\n return '';\n }\n\n const res: string[] = [];\n\n Object.entries(labelSelector?.matchLabels || {}).forEach(([key, value]) => {\n res.push(`${ key }=${ value }`);\n });\n\n (labelSelector?.matchExpressions || []).forEach((value: KubeLabelSelectorExpression) => {\n if (value.operator === 'In' && value.values !== undefined) {\n if (value.values?.length === 1) {\n res.push(`${ value.key }=${ value.values[0] }`);\n } else {\n res.push(`${ value.key } in (${ value.values.join(',') })`);\n }\n } else {\n throw new Error(`Unsupported matchExpression found when converting to selector string. ${ value }`);\n }\n });\n\n return res.join(',');\n}\n","import { MANAGEMENT } from '@shell/config/types';\nimport { Store } from 'vuex';\nimport { DEFAULT_PERF_SETTING, PerfSettings, SETTING } from '@shell/config/settings';\nimport { pluralize } from '@shell/utils/string';\nimport { _MULTI } from '@shell/plugins/dashboard-store/actions';\nimport { ClusterProvisionerContext } from '@shell/core/types';\n\nexport const fetchOrCreateSetting = async(store: Store, id: string, val: string, save = true): Promise => {\n let setting;\n\n try {\n setting = await store.dispatch('management/find', { type: MANAGEMENT.SETTING, id });\n } catch {\n const schema = store.getters['management/schemaFor'](MANAGEMENT.SETTING);\n const url = schema.linkFor('collection');\n\n setting = await store.dispatch('management/create', {\n type: MANAGEMENT.SETTING, metadata: { name: id }, value: val, default: val || ''\n });\n if ( save ) {\n await setting.save({ url });\n }\n }\n\n return setting;\n};\n\n/**\n * Fetch a specific setting that might not exist\n * We fetch all settings - reality is Rancher will have done this already, so there's no overhead in doing\n * this - but if we fetch a specific setting that does not exist, we will get a 404, which we don't want\n */\nexport const fetchSetting = async(store: Store, id: string): Promise => {\n const all = await store.dispatch('management/findAll', { type: MANAGEMENT.SETTING });\n const setting = (all || []).find((setting: any) => setting.id === id);\n\n return setting;\n};\n\n/**\n * Carefully fetch mgmt settings\n *\n * Ensures that\n * - Concurrent calls to this function will only result in a single http request\n * - Subsequent calls, when either logged in or logged out, will only result in a single http request\n * - Logged out call will fetch partial settings, after logging in another call will fetch all settings\n *\n * Will be used in many places, particularly multiple times when loading the dashboard\n *\n * Note - We need to specify the url for cases where it can't be determined (i.e. we haven't fetched schemas)\n */\nexport const fetchInitialSettings = async(store: Store): Promise => {\n const generation = store.getters['management/generation'](MANAGEMENT.SETTING);\n // We use this as it copies the previous mechanism this was based on (in findAll)\n // There is the getter `auth/loggedInAs` (which is set given `fromHeader`), but that's initialised after the first call to here (see `authenticated`)\n const header = store.getters['auth/fromHeader'];\n const authed = `${ header }` === 'true' || `${ header }` === 'none';\n\n if (authed) {\n // We're authed, we will always get the full list\n return await store.dispatch('management/findAll', {\n type: MANAGEMENT.SETTING,\n opt: {\n url: `/v1/${ pluralize(MANAGEMENT.SETTING) }`,\n watch: false, // Watch requires FF and Settings, see `loadManagement` to see how this is handled\n }\n } );\n }\n\n if (!generation) {\n // We're not authed, and haven't previously fetched settings (no generation)\n // Fetch settings, put them in the store, but don't say we've got all yet (so subsequent calls will run)\n return await store.dispatch('management/findAll', {\n type: MANAGEMENT.SETTING,\n opt: {\n url: `/v1/${ pluralize(MANAGEMENT.SETTING) }`,\n load: _MULTI,\n redirectUnauthorized: false\n }\n });\n }\n\n // We're not authed, but have a previous value, no need to make a http request to fetch again\n return store.getters['management/all'](MANAGEMENT.SETTING);\n};\n\nexport const setSetting = async(store: Store, id: string, val: string): Promise => {\n const setting = await fetchOrCreateSetting(store, id, val, false);\n\n setting.value = val;\n await setting.save();\n\n return setting;\n};\n\nexport const getPerformanceSetting = (rootGetters: Record any>): PerfSettings => {\n const perfSettingResource = rootGetters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE);\n let perfSetting = {};\n\n if (perfSettingResource?.value) {\n try {\n perfSetting = JSON.parse(perfSettingResource.value);\n } catch (e) {\n console.warn('ui-performance setting contains invalid data'); // eslint-disable-line no-console\n }\n }\n\n // Start with the default and overwrite the values from the setting - ensures we have defaults for newly added options\n const safeDefaults = Object.assign({}, DEFAULT_PERF_SETTING);\n\n return Object.assign(safeDefaults, perfSetting || {});\n};\n\nexport const isProviderEnabled = (context: ClusterProvisionerContext, provider: string): boolean => {\n const providerTypesJSON = context.getters['management/byId'](MANAGEMENT.SETTING, SETTING.KEV2_OPERATORS )?.value;\n const providerTypes = providerTypesJSON ? JSON.parse(providerTypesJSON) : [];\n\n for ( let i = 0; i < providerTypes.length; i++) {\n if ( providerTypes[i].name === provider) {\n return providerTypes[i].active;\n }\n }\n\n // We want to have providers enabled by default unless they are turned off by a setting\n return true;\n};\n","export type StateColor = 'success' | 'warning' | 'error' | 'info' | 'disabled';\nexport const ALL_STATE_COLORS: StateColor[] = ['success', 'warning', 'error', 'info', 'disabled'];\n\nexport function stateColorCssVar(color: StateColor) {\n return `var(--${ color })`;\n}\n\nexport function toBgColor(color?: StateColor) {\n const withDefaultColor = color || 'info';\n\n return `bg-${ withDefaultColor }`;\n}\n\n/**\n * Checks if 'a' is considered a higher alert than 'b'\n * @param a target\n * @param b comparison\n * @returns true if 'a' is a higher alert than 'b' and false otherwise.\n */\nexport function isHigherAlert(a: StateColor, b: StateColor) {\n const order: StateColor[] = ['info', 'success', 'warning', 'error'];\n\n const aIndex = order.indexOf(a);\n const bIndex = order.indexOf(b);\n\n return aIndex > bIndex;\n}\n\nexport function getHighestAlertColor(colors: StateColor[]) {\n let highestAlert: StateColor = 'info';\n\n for (const color of colors) {\n if (isHigherAlert(color, highestAlert)) {\n highestAlert = color;\n }\n }\n\n return highestAlert;\n}\n\n// 1x1 transparent image as a placeholder image\nexport const BLANK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n/**\n * Checks if the given element's text is truncated.\n *\n * @param element The DOM element to check for truncation\n * @returns boolean indicating if the element's text is truncated\n */\nexport function isTruncated(element: HTMLElement | null): boolean {\n if (!element) {\n return false;\n }\n\n const isHorizontallyTruncated = element.scrollWidth > element.clientWidth;\n const isVerticallyTruncated = element.scrollHeight - element.clientHeight > 1;\n\n return isHorizontallyTruncated || isVerticallyTruncated;\n}\n","import day from 'dayjs';\nimport { escapeHtml } from '@shell/utils/string';\nimport { DATE_FORMAT, TIME_FORMAT } from '@shell/store/prefs';\nimport { type Store } from 'vuex';\nimport { ZERO_TIME } from '@shell/config/types';\n\nexport function isMissingDate(date: string | undefined | null): boolean {\n return !date || date === ZERO_TIME;\n}\n\nconst FACTORS = [60, 60, 24];\nconst LABELS = ['sec', 'min', 'hour', 'day'];\n\n// Diff two dates and return an object with values for presentation\n// If 't' is also passed, 'string' property is set on the return object with the diff formatted as a string\n// e.g. formats a date difference to return '1 day', '20 hours' etc\nexport function diffFrom(value: any, from: any, t: any) {\n const now = day();\n\n from = from || now;\n const diff = value.diff(from, 'seconds');\n\n let absDiff = Math.abs(diff);\n\n let next = 1;\n let label: any = '?';\n\n let i = 0;\n\n while ( absDiff >= FACTORS[i] && i < FACTORS.length ) {\n absDiff /= FACTORS[i];\n next *= Math.floor(FACTORS[i] / 10);\n i++;\n }\n\n if ( absDiff < 5 ) {\n label = Math.floor(absDiff * 10) / 10;\n } else {\n label = Math.floor(absDiff);\n }\n const ret: any = {\n diff,\n absDiff,\n label,\n // i18n-uses unit.day, unit.hour, unit.min, unit.sec\n unitsKey: `unit.${ LABELS[i] }`,\n units: LABELS[i],\n next,\n };\n\n if (!!t) {\n ret.string = `${ ret.label } ${ t(ret.unitsKey, { count: ret.label }) }`;\n }\n\n return ret;\n}\n\nexport function safeSetTimeout(timeout: any, callback: any, that: any) {\n if (timeout <= 2147483647) {\n // Max value setTimeout can take is max 32 bit int (about 24.9 days)\n return setTimeout(() => {\n callback.apply(that);\n }, timeout);\n }\n}\n\nexport function getSecondsDiff(startDate: any, endDate: any) {\n return Math.round(\n Math.abs(Date.parse(endDate) - Date.parse(startDate)) / 1000\n );\n}\n\n/**\n * return { diff: number; label: string }\n *\n * diff: update frequency in seconds\n * label: content of the cell's column\n */\nexport function elapsedTime(seconds: any) {\n if (!seconds) {\n return {};\n }\n\n if (seconds < 120) {\n return {\n diff: 1,\n label: `${ seconds }s`\n };\n }\n\n const minutes = Math.floor(seconds / 60);\n\n if (minutes < 10) {\n return {\n diff: 1,\n label: `${ minutes }m${ seconds - (minutes * 60) }s`\n };\n }\n\n const hours = Math.floor(seconds / 3600);\n\n if (hours < 3) {\n return {\n diff: 60,\n label: `${ minutes }m`,\n };\n }\n\n const days = Math.floor(seconds / (3600 * 24));\n\n if (days > 1) {\n return {\n diff: 60,\n label: `${ days }d${ hours - (days * 24) }h`,\n };\n }\n\n if (hours > 7) {\n return {\n diff: 60,\n label: `${ hours }h`,\n };\n }\n\n return {\n diff: 60,\n label: `${ hours }h${ minutes - (hours * 60) }m`,\n };\n}\n\n/**\n * Format date and time using user preferences\n * @param value Date string to format\n * @returns Formatted date string\n */\nexport const dateTimeFormat = (value: string | undefined, store: Store): string => {\n if (!value) return '';\n\n const dateFormat = escapeHtml( store.getters['prefs/get'](DATE_FORMAT));\n const timeFormat = escapeHtml( store.getters['prefs/get'](TIME_FORMAT));\n\n const format = `${ dateFormat } ${ timeFormat }`;\n\n return day(value).format(format);\n};\n","type UriField = 'source' | 'protocol' | 'authority' | 'userInfo' | 'user' | 'password' | 'host' | 'port' | 'relative' | 'path' | 'directory' | 'file' | 'queryStr' | 'anchor'\ntype UriFields = {\n [key in UriField]: string; // eslint-disable-line no-unused-vars\n}\nexport type QueryParams = {\n [key: string]: string\n}\n\ninterface ParsedUri extends UriFields {\n query: QueryParams;\n}\n\nexport function addParam(url: string, key: string, val: string | string[]): string {\n let out = url + (url.includes('?') ? '&' : '?');\n\n // val can be a string or an array of strings\n if ( !Array.isArray(val) ) {\n val = [val];\n }\n out += val.map((v) => {\n if ( v === null ) {\n return `${ encodeURIComponent(key) }`;\n } else {\n return `${ encodeURIComponent(key) }=${ encodeURIComponent(v) }`;\n }\n }).join('&');\n\n return out;\n}\n\nexport function addParams(url: string, params: QueryParams): string {\n if ( params && typeof params === 'object' ) {\n Object.keys(params).forEach((key) => {\n url = addParam(url, key, params[key]);\n });\n }\n\n return url;\n}\n\nexport function removeParam(url: string, key: string): string {\n const parsed = parse(url);\n\n if ( parsed.query?.[key] ) {\n delete parsed.query[key];\n }\n\n return stringify(parsed);\n}\n\nexport function parseLinkHeader(str: string): Record {\n const out: { [key: string]: string} = { };\n const lines = (str || '').split(',');\n\n for ( const line of lines ) {\n const match = line.match(/^\\s*<([^>]+)>\\s*;\\s*rel\\s*=\"(.*)\"/);\n\n if ( match ) {\n out[match[2].toLowerCase()] = match[1];\n }\n }\n\n return out;\n}\n\nexport function isMaybeSecure(port: number, proto: string): boolean {\n const protocol = proto.toLowerCase();\n\n return portMatch([port], [443, 8443], ['443']) || protocol === 'https';\n}\n\nexport function portMatch(ports: number[], equals: number[], endsWith: string[]): boolean {\n for (let i = 0; i < ports.length; i++) {\n const port = ports[i];\n\n if (equals.includes(port)) {\n return true;\n }\n\n for (let j = 0; j < endsWith.length; j++) {\n const suffix = `${ endsWith[j] }`;\n const portStr = `${ port }`;\n\n if (portStr !== suffix && portStr.endsWith(suffix)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n// parseUri 1.2.2\n// (c) Steven Levithan \n// https://javascriptsource.com/parseuri/\n// MIT License\nexport function parse(str: string): ParsedUri {\n const o = parse.options;\n const m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\n if (!m) {\n throw new Error(`Cannot parse as uri: ${ str }`);\n }\n const uri = {} as ParsedUri;\n let i = 14;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri.query = {};\n uri.queryStr.replace(o.q.parser, (_, $1: string, $2: string): string => {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n\n return '';\n });\n\n return uri;\n}\n\nparse.options = {\n strictMode: false,\n key: ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'queryStr', 'anchor'],\n q: {\n name: 'query',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n} as {\n strictMode: boolean,\n key: UriField[],\n q: {\n name: 'query',\n parser: RegExp\n },\n parser: {\n strict: RegExp,\n loose: RegExp\n }\n};\n\nexport function stringify(uri: ParsedUri): string {\n let out = `${ uri.protocol }://`;\n\n if ( uri.user && uri.password ) {\n out += `${ uri.user }:${ uri.password }@`;\n } else if ( uri.user ) {\n out += `${ uri.user }@`;\n }\n\n out += uri.host;\n\n if ( uri.port ) {\n out += `:${ uri.port }`;\n }\n\n out += uri.path || '/';\n\n out = addParams(out, uri.query || {});\n\n if ( uri.anchor ) {\n out += `#${ uri.anchor }`;\n }\n\n return out;\n}\n","import semver from 'semver';\nimport { parse } from '@shell/utils/url';\nimport { RBAC } from '@shell/config/types';\nimport { HCI } from '@shell/config/labels-annotations';\nimport isEmpty from 'lodash/isEmpty';\nimport has from 'lodash/has';\nimport { Translation } from '@shell/types/t';\nimport {\n isHttps, isLocalhost, hasTrailingForwardSlash, isDomainWithoutProtocol, isValidUrl\n} from '@shell/utils/validators/setting';\nimport { cronScheduleRule } from '@shell/utils/validators/cron-schedule';\n\n// import uniq from 'lodash/uniq';\n\n/**\n * Fixed validation rule which require only the value to be evaluated\n * @param value\n * @returns { string | undefined }\n */\nexport type Validator = (value: any, arg?: any) => T;\n\n/**\n * Factory function which returns a validation rule\n * @param arg Argument used as part of the validation rule process, not necessarily as parameter of the validation rule\n * @param value Value to be evaluated\n * @returns { Validator }\n */\nexport type ValidatorFactory = (arg: any, value?: any) => Validator\n\ntype ServicePort = {\n name?: string,\n nodePort?: string | number,\n port?: string | number,\n targetPort?: string | number,\n idx: number\n}\n\nexport class Port {\n empty: boolean;\n int: number;\n string: string;\n isNumber: boolean;\n isInt: boolean;\n constructor(port: number | string | undefined) {\n this.string = String(port);\n this.int = parseInt(this.string, 10);\n this.empty = (!port && this.int !== 0);\n this.isNumber = !isNaN(this.int) && !this.string.includes('e'); // leaving out the exponent edge case to keep the logic simple and because port numbers aren't that big...\n this.isInt = this.isNumber && !this.string.includes('.');\n }\n}\n\nconst runValidators = (val: any, validators: Validator[]) => {\n for (const validator of validators) {\n const message = validator(val);\n\n if (message) {\n return message;\n }\n }\n};\n\nexport interface ValidationOptions {\n key?: string,\n}\n\n/**\n * @param t the function name we use for getting a translated string\n * @param key the argument passed to the translation to reference the label\n * @returns { Validator | ValidatorFactory } A dictionary of actual validation functions or factories (require parameter)\n * @description\n * This function returns a set of validators that can be used in the form validation process.\n * @example\n * const validators = formRulesGenerator(t, { key: 'MyLabel' });\n * validators.required(); // '\"MyLabel\" is required'\n * validators.minLength(5)('123'); // '\"MyLabel\" must contain more than 5 characters'\n */\nexport default function(\n t: Translation,\n { key = 'Value' }: ValidationOptions\n): { [key: string]: Validator | ValidatorFactory } {\n // utility validators these validators only get used by other validators\n const startDot: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '.' ? t(`validation.dns.${ label }.startDot`, { key }) : undefined;\n\n const endDot = (label: string): Validator => (val: string) => val?.slice(-1) === '.' ? t(`validation.dns.${ label }.endDot`, { key }) : undefined;\n\n const startNumber: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1)?.match(/[0-9]/) ? t(`validation.dns.${ label }.startNumber`, { key }) : undefined;\n\n const startHyphen: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '-' ? t(`validation.dns.${ label }.startHyphen`, { key }) : undefined;\n\n const endHyphen: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(-1) === '-' ? t(`validation.dns.${ label }.endHyphen`, { key }) : undefined;\n\n const minValue: ValidatorFactory = (min: string) => (val: string | number) => Number(val) < Number(min) ? t('validation.minValue', { key, min }) : undefined;\n\n const maxValue: ValidatorFactory = (max: string) => (val: string | number) => Number(val) > Number(max) ? t('validation.maxValue', { key, max }) : undefined;\n\n const betweenValues: ValidatorFactory = ([min, max]: string[]) => (val: string | number) => minValue(min)(val) || maxValue(max)(val) ? t('validation.betweenValues', {\n key, min, max\n }) : undefined;\n\n const minLength: ValidatorFactory = (min: string) => (val: string) => val.length < Number(min) ? t('validation.minLength', { key, min }) : undefined;\n\n const maxLength: ValidatorFactory = (max: string) => (val: string) => val.length > Number(max) ? t('validation.maxLength', { key, max }) : undefined;\n\n const betweenLengths: ValidatorFactory = ([min, max]: string[]) => (val: string) => minLength(min)(val) || maxLength(max)(val) ? t('validation.betweenLengths', {\n key, min, max\n }) : undefined;\n\n const requiredInt: Validator = (val: string) => isNaN(parseInt(val, 10)) ? t('validation.number.requiredInt', { key }) : undefined;\n\n const isInteger: Validator = (val: string | number) => !Number.isInteger(+val) || `${ val }`.match(/\\.+/g) ? t('validation.number.requiredInt', { key }) : undefined;\n\n const isPositive: Validator = (val: string | number) => +val < 0 ? t('validation.number.isPositive', { key }) : undefined;\n\n const isOctal: Validator = (val: string | number) => {\n const valueString = `${ val }`;\n const isValid = valueString.match(/(^0+)(.+)/);\n\n return isValid ? t('validation.number.isOctal', { key }) : undefined;\n };\n\n const portNumber: Validator = (val: string) => parseInt(val, 10) < 1 || parseInt(val, 10) > 65535 ? t('validation.number.between', {\n key, min: '1', max: '65535'\n }) : undefined;\n\n const dnsChars: Validator = (val: string) => {\n const matchedChars = val?.match(/[^${'A-Za-z0-9-'}]/g);\n\n if (matchedChars) {\n return t('validation.chars', {\n key, count: matchedChars.length, chars: matchedChars.map((char) => char === ' ' ? 'Space' : `\"${ char }\"`).join(', ')\n });\n }\n\n return undefined;\n };\n\n // the weird edge case here deals with internationalized domain names which are prepended with 'xn--'\n // https://datatracker.ietf.org/doc/html/rfc5891#section-4.2.3.1\n const dnsDoubleDash: Validator = (val: string) => (val?.substr(2, 2) === '--' && val?.substr(0, 2) !== 'xn') ? t(`validation.dns.doubleHyphen`, { key }) : undefined;\n\n const dnsIanaServiceNameDoubleDash: Validator = (val: string) => (val?.substr(2, 2) === '--' && val?.substr(0, 2) !== 'xn') ? t(`validation.dns.doubleHyphen`, { key }) : undefined;\n\n const dnsEmpty: ValidatorFactory = (label: string): Validator => (val = '') => val.length === 0 ? t(`validation.dns.${ label }.emptyLabel`, { key, min: 1 }) : undefined;\n\n const dnsTooLong: ValidatorFactory = (label: string, length = 63): Validator => (val = '') => val.length > length ? t(`validation.dns.${ label }.tooLongLabel`, { key, max: length }) : undefined;\n\n // eslint-disable-next-line no-unused-vars\n const hostnameEmpty: Validator = (val = '') => val.length === 0 ? t('validation.dns.hostname.empty', { key }) : undefined;\n\n const hostnameTooLong: Validator = (val = '') => val.length > 253 ? t('validation.dns.hostname.tooLong', { key, max: 253 }) : undefined;\n\n const absolutePath: Validator = (val = '') => val[0] !== '/' && val.length > 0 ? t('validation.path', { key }) : undefined;\n\n const required: Validator = (val: any) => !val && val !== false ? t('validation.required', { key }) : undefined;\n\n const noUpperCase: Validator = (val = '') => val.toLowerCase() !== val ? t('validation.noUpperCase', { key }) : undefined;\n\n const cronSchedule: Validator = (val: string) => {\n try {\n cronScheduleRule.validation(val);\n } catch (e) {\n return t(cronScheduleRule.message);\n }\n };\n\n const https: Validator = (val: string) => val && !isHttps(val) ? t('validation.setting.serverUrl.https') : undefined;\n\n const awsStyleEndpoint: Validator = (val: string) => val && !isDomainWithoutProtocol(val) ? t('validation.setting.serverUrl.awsStyleEndpoint') : undefined;\n\n const localhost: Validator = (val: string) => isLocalhost(val) ? t('validation.setting.serverUrl.localhost') : undefined;\n\n const trailingForwardSlash: Validator = (val: string) => hasTrailingForwardSlash(val) ? t('validation.setting.serverUrl.trailingForwardSlash') : undefined;\n\n const url: Validator = (val: string) => val && !isValidUrl(val) ? t('validation.setting.serverUrl.url') : undefined;\n\n const genericUrl: Validator = (val: string) => val && !isValidUrl(val) ? t('validation.genericUrl') : undefined;\n\n const urlRepository: Validator = (url: string) => {\n const message = t('validation.repository.url');\n\n if (!url) {\n return message;\n }\n\n if (url.includes(' ')) {\n return message;\n }\n\n const {\n protocol,\n authority,\n host,\n port,\n path\n } = parse(url);\n\n // Test duplicate protocol\n if (!host || protocol === host) {\n return message;\n }\n\n // Test http(s)/ssh protocol\n if (protocol && (!/^(http|https|ssh)$/gm.test(protocol) || (!url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('ssh://')))) {\n return message;\n }\n\n // Test ssh, authority must be valid (SSH user + host)\n if (!protocol && !port && (!authority.endsWith(':') || path.startsWith('/'))) {\n return message;\n }\n\n // Encoded space characters (%20) are allowed only in the path\n const hostAndPath = `${ host }${ path.replaceAll('%20', '') }`;\n\n // Test host/path\n if (!/^([\\w\\.@\\:\\/\\-]+)([\\d\\/\\w.-]+?)(.git){0,1}(\\/)?$/gm.test(hostAndPath)) {\n return message;\n }\n\n return undefined;\n };\n\n const ociRegistry: Validator = (url: string) => {\n const message = t('validation.oci.url');\n\n if (!url) {\n return message;\n }\n\n if (url.includes(' ')) {\n return message;\n }\n\n const {\n protocol,\n host,\n path\n } = parse(url);\n\n // Test duplicate protocol\n if (!host || protocol === host) {\n return message;\n }\n\n // Test oci protocol\n if (!url.startsWith('oci://')) {\n return message;\n }\n\n // Test host/path\n if (!/^([\\w\\.@\\:\\/\\-]+)([\\d\\/\\w.-]+?)(\\/)?$/gm.test(`${ host }${ path }`)) {\n return message;\n }\n\n return undefined;\n };\n\n const version: Validator = (value: string) => {\n return value && !semver.valid(value) ? t('validation.version') : undefined;\n };\n\n const semanticVersion: Validator = (value: string) => {\n return value && !semver.validRange(value) ? t('validation.semanticVersion') : undefined;\n };\n\n const alphanumeric: Validator = (val: string) => val && !/^[a-zA-Z0-9]+$/.test(val) ? t('validation.alphanumeric', { key }) : undefined;\n\n const interval: Validator = (val: string) => !/^\\d+[hms]$/.test(val) ? t('validation.monitoring.route.interval', { key }) : undefined;\n\n const containerImage: Validator = (val: any) => !val?.image ? t('workload.validation.containerImage', { name: val.name }) : undefined;\n\n const localhostProfile: Validator = (val: any) => (val?.securityContext?.seccompProfile?.type === 'Localhost' && !val?.securityContext.seccompProfile?.localhostProfile && !val?.securityContext?.privileged) ? t('workload.validation.localhostProfile', { name: val.name }) : undefined;\n\n const containerImages: Validator = (val: any | [any]) => {\n const containers = val.jobTemplate ? val?.jobTemplate?.spec?.template?.spec?.containers : val?.template?.spec?.containers;\n\n if (!containers || !containers.length) {\n return t('validation.required', { key: t('workload.container.titles.containers') });\n }\n\n // making sure each container has an image name\n return containers.map((container: any) => containerImage(container)).find((containerError: string) => containerError);\n };\n\n const registryUrl = (privateRegistryURL: string) => {\n if (!privateRegistryURL) {\n return;\n }\n\n const pattern = new RegExp('^([a-z\\\\-0-9]+:\\\\/\\\\/?)?' + // scheme (optional, https://, http://, file:/, admin:/)\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // ip address\n '(\\\\:\\\\d+)?'); // port\n\n const isValid = pattern.test(privateRegistryURL);\n\n return isValid ? undefined : t('cluster.privateRegistry.privateRegistryUrlError');\n };\n\n const dnsLabel: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startHyphen('label'),\n endHyphen('label'),\n dnsDoubleDash,\n // dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label')\n ];\n\n return runValidators(val, validators);\n };\n\n const dnsLabelIanaServiceName: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startHyphen('label'),\n endHyphen('label'),\n dnsIanaServiceNameDoubleDash,\n dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label', 15)\n ];\n\n return runValidators(val, validators);\n };\n\n const dnsLabelRestricted: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startNumber('label'),\n startHyphen('label'),\n endHyphen('label'),\n dnsDoubleDash,\n dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label')\n ];\n\n return runValidators(val, validators);\n };\n\n const hostname: Validator = (val: string) => {\n if (val) {\n const validators = [\n startDot('hostname'),\n hostnameTooLong,\n endDot('hostname')\n ];\n\n const hostNameMessage = runValidators(val, validators);\n\n if (hostNameMessage) {\n return hostNameMessage;\n }\n\n const labels = val.split('.');\n const labelValidators = [\n dnsChars,\n startHyphen('hostname'),\n endHyphen('hostname'),\n dnsDoubleDash,\n dnsEmpty('hostname'),\n dnsTooLong('hostname')\n ];\n\n for ( let i = 0; i < labels.length; i++ ) {\n const labelMessage = runValidators(labels[i], labelValidators);\n\n if (labelMessage) {\n return labelMessage;\n }\n }\n }\n };\n\n const wildcardHostname: Validator = (val: string) => {\n // allow wildcard in first part of hostname\n val = val ? val.replace(/^\\*\\./, '') : val;\n\n return hostname(val);\n };\n\n const externalName: Validator = (val: string) => {\n if (isEmpty(val)) {\n return t('validation.service.externalName.none');\n } else {\n return hostname(val);\n }\n };\n\n const testRule = (val: string | undefined) => {\n return 'This is an error returned by the testRule validator';\n };\n\n const ruleGroups: Validator = (val: {groups?: any}) => isEmpty(val?.groups) ? t('validation.prometheusRule.groups.required') : undefined;\n\n const clusterName: ValidatorFactory = (isRke2: boolean): Validator => (val: string | undefined) => isRke2 && (val || '')?.match(/^(c-.{5}|local)$/i) ? t('validation.cluster.name') : undefined;\n\n const servicePort: Validator = (val: ServicePort) => {\n const {\n name,\n idx\n } = val;\n\n const nodePort = new Port(val.nodePort);\n const listeningPort = new Port(val.port);\n const targetPort = new Port(val.targetPort);\n\n if (isEmpty(name)) {\n return t('validation.service.ports.name.required', { position: idx + 1 });\n }\n\n if (!nodePort.empty) {\n if (!nodePort.isInt) {\n return t('validation.service.ports.nodePort.requiredInt', { position: idx + 1 });\n } else if (nodePort.int < 1 || nodePort.int > 65535) {\n return t('validation.service.ports.nodePort.between', { position: idx + 1 });\n }\n }\n\n if (!listeningPort.empty) {\n if (!listeningPort.isInt) {\n return t('validation.service.ports.port.requiredInt', { position: idx + 1 });\n } else if (listeningPort.int < 1 || listeningPort.int > 65535) {\n return t('validation.service.ports.port.between', { position: idx + 1 });\n } else if (listeningPort.string?.includes('.')) {\n return listeningPort;\n }\n } else {\n return t('validation.service.ports.port.required', { position: idx + 1 });\n }\n\n if (!targetPort.empty) {\n if (!targetPort.isInt) {\n const ianaServiceNameErrors = dnsLabelIanaServiceName(targetPort.string);\n\n if (ianaServiceNameErrors) {\n return ianaServiceNameErrors;\n }\n } else if (targetPort.int < 1 || targetPort.int > 65535) {\n return t('validation.service.ports.targetPort.between', { position: idx + 1 });\n }\n } else {\n return t('validation.service.ports.targetPort.required', { position: idx + 1 });\n }\n\n return undefined;\n };\n\n const groupIsValid: Validator = (val, readableIndex) => {\n let returnMessage: string | undefined;\n\n if (isEmpty(val?.name)) {\n return t('validation.prometheusRule.groups.valid.name', { index: readableIndex });\n }\n\n if (isEmpty(val.rules)) {\n return t('validation.prometheusRule.groups.valid.singleEntry', { index: readableIndex });\n } else {\n val.rules.forEach((rule: any, idx: number) => {\n const readableRuleIndex = idx + 1;\n\n if (has(rule, 'alert') && isEmpty(rule?.alert) && !returnMessage) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.alertName', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n } else if (has(rule, 'record') && isEmpty(rule?.record)) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.recordName', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n\n if ((has(rule, 'expr') && isEmpty(rule.expr) && !returnMessage) || (!has(rule, 'expr') && !returnMessage)) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.expr', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n\n if (has(rule, 'alert')) {\n if (\n (has(rule, 'labels') && isEmpty(rule.labels) && !returnMessage) ||\n (!has(rule, 'labels') && !returnMessage)\n ) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.labels', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n }\n });\n }\n\n return returnMessage;\n };\n\n const groupsAreValid: Validator = (val) => {\n const groups = [...val]; // making a new array in the function because I'm gonna mutate it later...\n let message;\n\n groups.forEach((group, idx, arr) => {\n message = groupIsValid(group, idx + 1);\n if (!!message) {\n arr.length = idx + 1; // this is a tricksy way of breaking a forEach loop since we just want the first message\n }\n });\n\n return message;\n };\n\n const matching: Validator = (val) => {\n if (isEmpty(val?.match) && isEmpty(val?.['match_re'])) {\n return t('validation.monitoring.route.match');\n }\n };\n\n const roleTemplateRules: ValidatorFactory = (type): Validator => (val = []) => {\n if (val.some((rule: any) => isEmpty(rule.verbs))) {\n return t('validation.roleTemplate.roleTemplateRules.missingVerb');\n }\n\n if (val.some((rule: any) => rule.resources?.length && rule.nonResourceURLs?.length)) {\n return t('validation.roleTemplate.roleTemplateRules.noResourceAndNonResource');\n }\n\n if (type === RBAC.ROLE) {\n if (val.some((rule: any) => isEmpty(rule.resources))) {\n return t('validation.roleTemplate.roleTemplateRules.missingResource');\n }\n\n if (val.some((rule: any) => isEmpty(rule.apiGroups))) {\n return t('validation.roleTemplate.roleTemplateRules.missingApiGroup');\n }\n } else if (val.some((rule: any) => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs))) {\n return t('validation.roleTemplate.roleTemplateRules.missingOneResource');\n }\n\n return undefined;\n };\n\n // The existing validator for clusterIp never actually returns an error\n const clusterIp: Validator = (val) => undefined;\n\n const backupTarget: Validator = (val) => {\n const parseValue = JSON.parse(val);\n const type = parseValue.type;\n\n if (!type) {\n return t('validation.required', { key: 'Type' });\n }\n\n if (type === 's3') {\n if (!parseValue.accessKeyId) {\n return t('validation.required', { key: 'accessKeyId' });\n }\n\n if (!parseValue.secretAccessKey) {\n return t('validation.required', { key: 'secretAccessKey' });\n }\n\n if (!parseValue.bucketRegion) {\n return t('validation.required', { key: 'bucketRegion' });\n }\n\n if (!parseValue.bucketName) {\n return t('validation.required', { key: 'bucketName' });\n }\n }\n\n return undefined;\n };\n\n const imageUrl: Validator = (val) => {\n const VM_IMAGE_FILE_FORMAT = ['qcow', 'qcow2', 'raw', 'img', 'iso'];\n\n if (!val || val === '') {\n return undefined;\n }\n\n const urlSlug = val.split('/').pop();\n const fileExtension = urlSlug.split('.').pop().toLowerCase();\n\n if (!VM_IMAGE_FILE_FORMAT.includes(fileExtension)) {\n return t('harvester.validation.image.ruleTip');\n }\n\n return undefined;\n };\n\n const fileRequired: Validator = (val = {}) => {\n if (!val[HCI.IMAGE_NAME]) {\n return t('validation.required', { key: t('harvester.image.fileName') });\n }\n };\n\n const subDomain: Validator = (val) => {\n const matchedChars = val?.match(/[^a-z0-9.-]/g);\n\n if (matchedChars) {\n return t('validation.chars', {\n key, count: matchedChars.length, chars: matchedChars.map((char: string) => char === ' ' ? 'Space' : `\"${ char }\"`).join(', ')\n });\n }\n\n return runValidators(val, [startHyphen('label'), endHyphen('label'), startDot('label'), endDot('label'), required]);\n };\n\n return {\n absolutePath,\n alphanumeric,\n backupTarget,\n betweenLengths,\n betweenValues,\n clusterIp,\n clusterName,\n containerImage,\n containerImages,\n localhostProfile,\n cronSchedule,\n dnsLabel,\n dnsLabelIanaServiceName,\n dnsLabelRestricted,\n externalName,\n fileRequired,\n urlRepository,\n groupsAreValid,\n hostname,\n imageUrl,\n interval,\n https,\n awsStyleEndpoint,\n localhost,\n trailingForwardSlash,\n url,\n genericUrl,\n matching,\n maxLength,\n maxValue,\n minLength,\n minValue,\n noUpperCase,\n ociRegistry,\n portNumber,\n registryUrl,\n required,\n requiredInt,\n isInteger,\n isPositive,\n isOctal,\n roleTemplateRules,\n ruleGroups,\n semanticVersion,\n servicePort,\n subDomain,\n testRule,\n version,\n wildcardHostname\n };\n}\n","export const PRODUCT_NAME = 'harvester';\nexport const BLANK_CLUSTER = '_';\nexport const LOGO = require(`@shell/assets/images/providers/harvester.svg`);\n","export const HCI_SETTING = {\n BACKUP_TARGET: 'backup-target',\n CONTAINERD_REGISTRY: 'containerd-registry',\n LOG_LEVEL: 'log-level',\n SERVER_VERSION: 'server-version',\n UI_INDEX: 'ui-index',\n UPGRADE_CHECKER_ENABLED: 'upgrade-checker-enabled',\n UPGRADE_CHECKER_URL: 'upgrade-checker-url',\n VLAN: 'vlan',\n UI_SOURCE: 'ui-source',\n UI_PL: 'ui-pl',\n HTTP_PROXY: 'http-proxy',\n ADDITIONAL_CA: 'additional-ca',\n OVERCOMMIT_CONFIG: 'overcommit-config',\n CLUSTER_REGISTRATION_URL: 'cluster-registration-url',\n DEFAULT_STORAGE_CLASS: 'default-storage-class',\n SUPPORT_BUNDLE_TIMEOUT: 'support-bundle-timeout',\n SUPPORT_BUNDLE_EXPIRATION: 'support-bundle-expiration',\n SUPPORT_BUNDLE_FILE_NAME: 'support-bundle-file-name',\n SUPPORT_BUNDLE_IMAGE: 'support-bundle-image',\n SUPPORT_BUNDLE_NODE_COLLECTION_TIMEOUT: 'support-bundle-node-collection-timeout',\n STORAGE_NETWORK: 'storage-network',\n RWX_NETWORK: 'rwx-network',\n VM_FORCE_RESET_POLICY: 'vm-force-reset-policy',\n SSL_CERTIFICATES: 'ssl-certificates',\n SSL_PARAMETERS: 'ssl-parameters',\n SUPPORT_BUNDLE_NAMESPACES: 'support-bundle-namespaces',\n AUTO_DISK_PROVISION_PATHS: 'auto-disk-provision-paths',\n RELEASE_DOWNLOAD_URL: 'release-download-url',\n CCM_CSI_VERSION: 'harvester-csi-ccm-versions',\n CSI_DRIVER_CONFIG: 'csi-driver-config',\n CSI_ONLINE_EXPAND_VALIDATION: 'csi-online-expand-validation',\n VM_TERMINATION_PERIOD: 'default-vm-termination-grace-period-seconds',\n NTP_SERVERS: 'ntp-servers',\n AUTO_ROTATE_RKE2_CERTS: 'auto-rotate-rke2-certs',\n KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES: 'kubeconfig-default-token-ttl-minutes',\n LONGHORN_V2_DATA_ENGINE_ENABLED: 'longhorn-v2-data-engine-enabled',\n LONGHORN_V2_DATA_ENGINE_HUGEPAGE_ENABLED: 'longhorn-v2-data-engine-hugepage-enabled',\n LONGHORN_V2_DATA_ENGINE_MEMORY_SIZE: 'longhorn-v2-data-engine-memory-size',\n ADDITIONAL_GUEST_MEMORY_OVERHEAD_RATIO: 'additional-guest-memory-overhead-ratio',\n UPGRADE_CONFIG: 'upgrade-config',\n VM_MIGRATION_NETWORK: 'vm-migration-network',\n RANCHER_CLUSTER: 'rancher-cluster',\n MAX_HOTPLUG_RATIO: 'max-hotplug-ratio',\n KUBEVIRT_MIGRATION: 'kubevirt-migration',\n INSTANCE_MANAGER_RESOURCES: 'instance-manager-resources',\n CLUSTER_POD_SECURITY_STANDARD: 'cluster-pod-security-standard'\n};\n\nexport const HCI_ALLOWED_SETTINGS = {\n [HCI_SETTING.BACKUP_TARGET]: {\n kind: 'json', from: 'import', canReset: true\n },\n [HCI_SETTING.LOG_LEVEL]: {\n kind: 'enum',\n options: ['info', 'debug', 'trace']\n },\n [HCI_SETTING.VLAN]: {\n kind: 'custom', from: 'import', alias: 'vlan'\n },\n [HCI_SETTING.AUTO_ROTATE_RKE2_CERTS]: {\n kind: 'json',\n from: 'import',\n featureFlag: 'autoRotateRke2CertsSetting'\n },\n [HCI_SETTING.CSI_DRIVER_CONFIG]: { kind: 'json', from: 'import' },\n [HCI_SETTING.CSI_ONLINE_EXPAND_VALIDATION]: {\n kind: 'json', from: 'import', featureFlag: 'csiOnlineExpandValidation'\n },\n [HCI_SETTING.SERVER_VERSION]: { readOnly: true },\n [HCI_SETTING.UPGRADE_CHECKER_ENABLED]: { kind: 'boolean' },\n [HCI_SETTING.UPGRADE_CHECKER_URL]: { kind: 'url' },\n [HCI_SETTING.HTTP_PROXY]: { kind: 'json', from: 'import' },\n [HCI_SETTING.ADDITIONAL_CA]: {\n kind: 'multiline', canReset: true, from: 'import'\n },\n [HCI_SETTING.OVERCOMMIT_CONFIG]: { kind: 'json', from: 'import' },\n [HCI_SETTING.SUPPORT_BUNDLE_TIMEOUT]: { kind: 'number' },\n [HCI_SETTING.SUPPORT_BUNDLE_EXPIRATION]: { kind: 'number' },\n [HCI_SETTING.SUPPORT_BUNDLE_FILE_NAME]: {\n kind: 'string', canReset: true, featureFlag: 'supportBundleFileNameSetting'\n },\n [HCI_SETTING.SUPPORT_BUNDLE_NODE_COLLECTION_TIMEOUT]: { kind: 'number', featureFlag: 'supportBundleNodeCollectionTimeoutSetting' },\n [HCI_SETTING.SUPPORT_BUNDLE_IMAGE]: { kind: 'json', from: 'import' },\n [HCI_SETTING.STORAGE_NETWORK]: {\n kind: 'custom', from: 'import', canReset: true\n },\n [HCI_SETTING.RWX_NETWORK]: {\n kind: 'json', from: 'import', canReset: true, featureFlag: 'rwxNetworkSetting'\n },\n [HCI_SETTING.VM_FORCE_RESET_POLICY]: { kind: 'json', from: 'import' },\n [HCI_SETTING.SSL_CERTIFICATES]: { kind: 'json', from: 'import' },\n [HCI_SETTING.SSL_PARAMETERS]: {\n kind: 'json', from: 'import', canReset: true\n },\n [HCI_SETTING.SUPPORT_BUNDLE_NAMESPACES]: { from: 'import', canReset: true },\n [HCI_SETTING.AUTO_DISK_PROVISION_PATHS]: { canReset: true },\n [HCI_SETTING.RELEASE_DOWNLOAD_URL]: { kind: 'url' },\n [HCI_SETTING.CONTAINERD_REGISTRY]: {\n kind: 'json', from: 'import', canReset: true\n },\n [HCI_SETTING.UI_SOURCE]: {\n kind: 'enum',\n options: ['auto', 'external', 'bundled']\n },\n [HCI_SETTING.UI_INDEX]: { kind: 'url' },\n [HCI_SETTING.VM_TERMINATION_PERIOD]: { kind: 'string', from: 'import' },\n [HCI_SETTING.NTP_SERVERS]: {\n kind: 'json', from: 'import', canReset: true\n },\n [HCI_SETTING.KUBECONFIG_DEFAULT_TOKEN_TTL_MINUTES]: { kind: 'number', featureFlag: 'kubeconfigDefaultTokenTTLMinutesSetting' },\n [HCI_SETTING.LONGHORN_V2_DATA_ENGINE_ENABLED]: {\n kind: 'boolean',\n experimental: true,\n featureFlag: 'longhornV2LVMSupport'\n },\n [HCI_SETTING.LONGHORN_V2_DATA_ENGINE_HUGEPAGE_ENABLED]: {\n kind: 'boolean',\n featureFlag: 'longhornV2HugepageSettings'\n },\n [HCI_SETTING.LONGHORN_V2_DATA_ENGINE_MEMORY_SIZE]: {\n kind: 'number',\n featureFlag: 'longhornV2HugepageSettings'\n },\n [HCI_SETTING.ADDITIONAL_GUEST_MEMORY_OVERHEAD_RATIO]: { kind: 'string', from: 'import' },\n [HCI_SETTING.UPGRADE_CONFIG]: {\n kind: 'json',\n from: 'import',\n featureFlag: 'upgradeConfigSetting',\n docPath: 'UPGRADE_CONFIG_URL'\n },\n [HCI_SETTING.RANCHER_CLUSTER]: {\n kind: 'custom', from: 'import', canReset: true, featureFlag: 'rancherClusterSetting'\n },\n [HCI_SETTING.MAX_HOTPLUG_RATIO]: { kind: 'number', featureFlag: 'cpuMemoryHotplug' },\n [HCI_SETTING.VM_MIGRATION_NETWORK]: {\n kind: 'json', from: 'import', canReset: true, featureFlag: 'vmNetworkMigration',\n },\n [HCI_SETTING.KUBEVIRT_MIGRATION]: {\n kind: 'json', from: 'import', canReset: true, featureFlag: 'kubevirtMigration',\n },\n [HCI_SETTING.INSTANCE_MANAGER_RESOURCES]: {\n kind: 'json', from: 'import', featureFlag: 'instanceManagerResourcesSetting'\n },\n [HCI_SETTING.CLUSTER_POD_SECURITY_STANDARD]: {\n kind: 'json', from: 'import', canReset: true, featureFlag: 'clusterPodSecurityStandardSetting'\n }\n};\n\nexport const HCI_SINGLE_CLUSTER_ALLOWED_SETTING = {\n [HCI_SETTING.CLUSTER_REGISTRATION_URL]: {\n kind: 'custom',\n from: 'import',\n canReset: true,\n },\n [HCI_SETTING.UI_PL]: {\n kind: 'custom', from: 'import', alias: 'branding'\n }\n};\n","// To find the CRD name, you can run `kubectl api-resources` and look for the `NAME` column.\n// The CRD name is usually in the format of `.`, where `` is the plural form of the resource and `` is the API group it belongs to.\n// e.g\n// 1. `virtualmachines.kubevirt.io` -> kubevirt.io.virtualmachine, the CRD name for the `VirtualMachine` resource in the `kubevirt.io` API group\n// 2. `vpc-nat-gateways.kubeovn.io` -> kubeovn.io.vpcnatgateway, the CRD name for the `VpcNatGateway` resource in the `kubeovn.io` API group.\n\nexport const HCI = {\n VM: 'kubevirt.io.virtualmachine',\n VMI: 'kubevirt.io.virtualmachineinstance',\n VMIM: 'kubevirt.io.virtualmachineinstancemigration',\n VM_TEMPLATE: 'harvesterhci.io.virtualmachinetemplate',\n VM_VERSION: 'harvesterhci.io.virtualmachinetemplateversion',\n IMAGE: 'harvesterhci.io.virtualmachineimage',\n SSH: 'harvesterhci.io.keypair',\n VOLUME: 'harvesterhci.io.volume',\n USER: 'harvesterhci.io.user',\n SETTING: 'harvesterhci.io.setting',\n UPGRADE: 'harvesterhci.io.upgrade',\n UPGRADE_LOG: 'harvesterhci.io.upgradelog',\n SCHEDULE_VM_BACKUP: 'harvesterhci.io.schedulevmbackup',\n BACKUP: 'harvesterhci.io.virtualmachinebackup',\n RESTORE: 'harvesterhci.io.virtualmachinerestore',\n NODE_NETWORK: 'network.harvesterhci.io.nodenetwork',\n CLUSTER_NETWORK: 'network.harvesterhci.io.clusternetwork',\n HOST_NETWORK_CONFIG: 'network.harvesterhci.io.hostnetworkconfig',\n SUBNET: 'kubeovn.io.subnet',\n VPC: 'kubeovn.io.vpc',\n IP: 'kubeovn.io.ip',\n VLAN: 'kubeovn.io.vlan',\n IPTABLES_EIP: 'kubeovn.io.iptableseip',\n IPTABLES_SNAT_RULE: 'kubeovn.io.iptablessnatrule',\n IPTABLES_DNAT_RULE: 'kubeovn.io.iptablesdnatrule',\n PROVIDER_NETWORK: 'kubeovn.io.providernetwork',\n VPC_NAT_GATEWAY: 'kubeovn.io.vpcnatgateway',\n VM_IMAGE_DOWNLOADER: 'harvesterhci.io.virtualmachineimagedownloader',\n SUPPORT_BUNDLE: 'harvesterhci.io.supportbundle',\n NETWORK_ATTACHMENT: 'harvesterhci.io.networkattachmentdefinition',\n CLUSTER: 'harvesterhci.io.management.cluster',\n DASHBOARD: 'harvesterhci.io.dashboard',\n BLOCK_DEVICE: 'harvesterhci.io.blockdevice',\n CLOUD_TEMPLATE: 'harvesterhci.io.cloudtemplate',\n HOST: 'harvesterhci.io.host',\n VERSION: 'harvesterhci.io.version',\n SNAPSHOT: 'harvesterhci.io.volumesnapshot',\n VM_SNAPSHOT: 'harvesterhci.io.vmsnapshot',\n ALERTMANAGERCONFIG: 'harvesterhci.io.monitoring.alertmanagerconfig',\n CLUSTER_FLOW: 'harvesterhci.io.logging.clusterflow',\n CLUSTER_OUTPUT: 'harvesterhci.io.logging.clusteroutput',\n FLOW: 'harvesterhci.io.logging.flow',\n OUTPUT: 'harvesterhci.io.logging.output',\n STORAGE: 'harvesterhci.io.storage',\n RESOURCE_QUOTA: 'harvesterhci.io.resourcequota',\n KSTUNED: 'node.harvesterhci.io.ksmtuned',\n HUGEPAGES: 'node.harvesterhci.io.hugepage',\n PCI_DEVICE: 'devices.harvesterhci.io.pcidevice',\n PCI_CLAIM: 'devices.harvesterhci.io.pcideviceclaim',\n SR_IOV: 'devices.harvesterhci.io.sriovnetworkdevice',\n VGPU_DEVICE: 'devices.harvesterhci.io.vgpudevice',\n SR_IOVGPU_DEVICE: 'devices.harvesterhci.io.sriovgpudevice',\n USB_DEVICE: 'devices.harvesterhci.io.usbdevice',\n USB_CLAIM: 'devices.harvesterhci.io.usbdeviceclaim',\n MIG_CONFIGURATION: 'devices.harvesterhci.io.migconfiguration',\n VLAN_CONFIG: 'network.harvesterhci.io.vlanconfig',\n VLAN_STATUS: 'network.harvesterhci.io.vlanstatus',\n ADD_ONS: 'harvesterhci.io.addon',\n LINK_MONITOR: 'network.harvesterhci.io.linkmonitor',\n SECRET: 'harvesterhci.io.secret',\n INVENTORY: 'metal.harvesterhci.io.inventory',\n LB: 'loadbalancer.harvesterhci.io.loadbalancer',\n IP_POOL: 'loadbalancer.harvesterhci.io.ippool',\n HARVESTER_CONFIG: 'rke-machine-config.cattle.io.harvesterconfig',\n LVM_VOLUME_GROUP: 'harvesterhci.io.lvmvolumegroup',\n VMIMPORT_SOURCE_V: 'migration.harvesterhci.io.vmwaresource',\n VMIMPORT_SOURCE_O: 'migration.harvesterhci.io.openstacksource',\n VMIMPORT_SOURCE_OVA: 'migration.harvesterhci.io.ovasource',\n VMIMPORT: 'migration.harvesterhci.io.virtualmachineimport',\n MIGRATION: 'migration.harvesterhci.io',\n // Forklift CRDs\n FORKLIFT_PROVIDER: 'forklift.konveyor.io.provider',\n FORKLIFT_NETWORK_MAP: 'forklift.konveyor.io.networkmap',\n FORKLIFT_STORAGE_MAP: 'forklift.konveyor.io.storagemap',\n FORKLIFT_PLAN: 'forklift.konveyor.io.plan',\n FORKLIFT_MIGRATION: 'forklift.konveyor.io.migration',\n};\n\nexport const VOLUME_SNAPSHOT = 'snapshot.storage.k8s.io.volumesnapshot';\nexport const CSI_DRIVER = 'storage.k8s.io.csidriver';\nexport const VOLUME_SNAPSHOT_CLASS = 'snapshot.storage.k8s.io.volumesnapshotclass';\n","\n\n\n