@rancher/shell 3.0.9-rc.5 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/assets/images/providers/oci-open-containers.svg +22 -0
  2. package/assets/images/providers/traefik.png +0 -0
  3. package/assets/styles/themes/_dark.scss +2 -0
  4. package/assets/styles/themes/_light.scss +2 -0
  5. package/assets/styles/themes/_modern.scss +6 -0
  6. package/assets/translations/en-us.yaml +129 -25
  7. package/components/CruResource.vue +3 -1
  8. package/components/ExplorerProjectsNamespaces.vue +12 -12
  9. package/components/IconOrSvg.vue +61 -42
  10. package/components/Resource/Detail/Card/StatusCard/__tests__/StatusCard.test.ts +109 -0
  11. package/components/Resource/Detail/Card/StatusCard/index.vue +21 -4
  12. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +19 -2
  13. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +19 -11
  14. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +12 -0
  15. package/components/Resource/Detail/ResourcePopover/index.vue +2 -0
  16. package/components/Resource/Detail/ResourceRow.vue +2 -2
  17. package/components/ResourceList/index.vue +7 -4
  18. package/components/SortableTable/index.vue +2 -2
  19. package/components/Window/ContainerLogs.vue +48 -37
  20. package/components/fleet/FleetClusterTargets/TargetsList.vue +2 -2
  21. package/components/fleet/FleetClusterTargets/index.vue +6 -1
  22. package/components/fleet/GitRepoAdvancedTab.vue +333 -0
  23. package/components/fleet/GitRepoMetadataTab.vue +43 -0
  24. package/components/fleet/GitRepoRepositoryTab.vue +101 -0
  25. package/components/fleet/GitRepoTargetTab.vue +77 -0
  26. package/components/fleet/HelmOpAdvancedTab.vue +247 -0
  27. package/components/fleet/HelmOpChartTab.vue +158 -0
  28. package/components/fleet/HelmOpMetadataTab.vue +46 -0
  29. package/components/fleet/HelmOpTargetTab.vue +84 -0
  30. package/components/fleet/HelmOpValuesTab.vue +147 -0
  31. package/components/fleet/__tests__/FleetClusterTargets.test.ts +119 -70
  32. package/components/form/BannerSettings.vue +2 -2
  33. package/components/form/NodeScheduling.vue +81 -7
  34. package/components/form/NotificationSettings.vue +2 -2
  35. package/components/form/PodAffinity.vue +1 -36
  36. package/components/form/ResourceLabeledSelect.vue +8 -4
  37. package/components/form/ResourceQuota/Namespace.vue +30 -9
  38. package/components/form/ResourceQuota/NamespaceRow.vue +25 -7
  39. package/components/form/ResourceQuota/Project.vue +140 -82
  40. package/components/form/ResourceQuota/ResourceQuotaEntry.vue +145 -0
  41. package/components/form/ResourceQuota/__tests__/Namespace.test.ts +307 -0
  42. package/components/form/ResourceQuota/__tests__/NamespaceRow.test.ts +281 -0
  43. package/components/form/ResourceQuota/__tests__/Project.test.ts +274 -27
  44. package/components/form/ResourceQuota/__tests__/ResourceQuotaEntry.test.ts +215 -0
  45. package/components/form/SchedulingCustomization.vue +14 -6
  46. package/components/form/SelectOrCreateAuthSecret.vue +107 -18
  47. package/components/form/__tests__/NodeScheduling.test.ts +12 -9
  48. package/components/form/__tests__/PodAffinity.test.ts +21 -2
  49. package/components/form/__tests__/SchedulingCustomization.test.ts +240 -0
  50. package/components/formatter/ClusterLink.vue +8 -0
  51. package/components/formatter/SecretOrigin.vue +79 -0
  52. package/config/labels-annotations.js +7 -6
  53. package/config/pagination-table-headers.js +6 -4
  54. package/config/product/explorer.js +1 -11
  55. package/config/product/manager.js +0 -1
  56. package/config/query-params.js +3 -0
  57. package/config/settings.ts +15 -2
  58. package/config/table-headers.js +21 -17
  59. package/config/types.js +23 -8
  60. package/detail/fleet.cattle.io.cluster.vue +1 -1
  61. package/detail/workload/index.vue +11 -16
  62. package/dialog/DeactivateDriverDialog.vue +1 -1
  63. package/dialog/FeatureFlagListDialog.vue +1 -1
  64. package/dialog/Ipv6NetworkingDialog.vue +156 -0
  65. package/dialog/ScalePoolDownDialog.vue +2 -2
  66. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  67. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +1 -0
  68. package/edit/__tests__/management.cattle.io.project.test.js +56 -128
  69. package/edit/auth/oidc.vue +1 -1
  70. package/edit/catalog.cattle.io.clusterrepo.vue +155 -25
  71. package/edit/fleet.cattle.io.gitrepo.vue +153 -283
  72. package/edit/fleet.cattle.io.helmop.vue +190 -332
  73. package/edit/management.cattle.io.project.vue +5 -42
  74. package/edit/management.cattle.io.setting.vue +6 -0
  75. package/edit/monitoring.coreos.com.alertmanagerconfig/__tests__/auth.spec.ts +145 -0
  76. package/edit/monitoring.coreos.com.alertmanagerconfig/__tests__/index.test.ts +202 -0
  77. package/edit/monitoring.coreos.com.alertmanagerconfig/__tests__/tls.spec.ts +226 -0
  78. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +24 -21
  79. package/edit/monitoring.coreos.com.alertmanagerconfig/types/__tests__/opsgenie.spec.ts +157 -0
  80. package/edit/monitoring.coreos.com.alertmanagerconfig/types/__tests__/pagerduty.spec.ts +132 -0
  81. package/edit/monitoring.coreos.com.alertmanagerconfig/types/__tests__/slack.spec.ts +108 -0
  82. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -1
  83. package/edit/monitoring.coreos.com.receiver/__tests__/auth.spec.ts +165 -0
  84. package/edit/monitoring.coreos.com.receiver/__tests__/index.test.ts +153 -0
  85. package/edit/monitoring.coreos.com.receiver/__tests__/tls.spec.ts +115 -0
  86. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.spec.ts +86 -0
  87. package/edit/monitoring.coreos.com.receiver/types/__tests__/opsgenie.spec.ts +209 -0
  88. package/edit/monitoring.coreos.com.receiver/types/__tests__/pagerduty.spec.ts +105 -0
  89. package/edit/monitoring.coreos.com.receiver/types/__tests__/slack.spec.ts +92 -0
  90. package/edit/monitoring.coreos.com.receiver/types/__tests__/webhook.spec.ts +131 -0
  91. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +55 -24
  92. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +1 -103
  93. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +13 -1
  94. package/edit/provisioning.cattle.io.cluster/__tests__/rke2-fleet-cluster-agent.test.ts +283 -0
  95. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +65 -49
  96. package/edit/provisioning.cattle.io.cluster/ingress/IngressCards.vue +114 -0
  97. package/edit/provisioning.cattle.io.cluster/ingress/IngressConfiguration.vue +158 -0
  98. package/edit/provisioning.cattle.io.cluster/rke2.vue +167 -69
  99. package/edit/provisioning.cattle.io.cluster/shared.ts +36 -1
  100. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +2 -1
  101. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +70 -7
  102. package/edit/provisioning.cattle.io.cluster/tabs/Ingress.vue +343 -0
  103. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +2 -1
  104. package/edit/provisioning.cattle.io.cluster/tabs/etcd/__tests__/S3Config.test.ts +13 -1
  105. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +10 -44
  106. package/edit/secret/index.vue +1 -1
  107. package/edit/token.vue +68 -29
  108. package/edit/workload/__tests__/index.test.ts +2 -37
  109. package/edit/workload/index.vue +6 -2
  110. package/edit/workload/mixins/workload.js +0 -32
  111. package/list/__tests__/management.cattle.io.setting.test.ts +198 -0
  112. package/list/management.cattle.io.setting.vue +13 -0
  113. package/list/provisioning.cattle.io.cluster.vue +50 -1
  114. package/list/secret.vue +4 -9
  115. package/list/service.vue +6 -8
  116. package/machine-config/amazonec2.vue +11 -4
  117. package/machine-config/components/EC2Networking.vue +46 -30
  118. package/machine-config/components/__tests__/EC2Networking.test.ts +7 -7
  119. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +0 -9
  120. package/machine-config/digitalocean.vue +3 -3
  121. package/models/__tests__/chart.test.ts +2 -2
  122. package/models/__tests__/namespace.test.ts +11 -0
  123. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +96 -0
  124. package/models/__tests__/workload.test.ts +42 -1
  125. package/models/catalog.cattle.io.clusterrepo.js +30 -4
  126. package/models/chart.js +3 -3
  127. package/models/ext.cattle.io.token.js +48 -0
  128. package/models/kontainerdriver.js +2 -2
  129. package/models/namespace.js +7 -1
  130. package/models/nodedriver.js +2 -2
  131. package/models/provisioning.cattle.io.cluster.js +28 -7
  132. package/models/secret.js +0 -17
  133. package/models/service.js +44 -1
  134. package/models/token.js +4 -0
  135. package/models/workload.js +12 -6
  136. package/package.json +1 -1
  137. package/pages/account/index.vue +96 -67
  138. package/pages/auth/setup.vue +5 -14
  139. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +45 -18
  140. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +4 -1
  141. package/pages/c/_cluster/apps/charts/index.vue +82 -3
  142. package/pages/c/_cluster/apps/charts/install.vue +317 -42
  143. package/pages/c/_cluster/explorer/tools/index.vue +1 -1
  144. package/pages/c/_cluster/manager/cloudCredential/index.vue +1 -1
  145. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -4
  146. package/pages/c/_cluster/settings/index.vue +3 -1
  147. package/pages/c/_cluster/uiplugins/index.vue +1 -1
  148. package/plugins/dashboard-store/__tests__/getters.test.ts +108 -0
  149. package/plugins/dashboard-store/__tests__/resource-class.test.ts +27 -0
  150. package/plugins/dashboard-store/actions.js +3 -8
  151. package/plugins/dashboard-store/getters.js +7 -5
  152. package/plugins/dashboard-store/mutations.js +4 -1
  153. package/plugins/dashboard-store/resource-class.js +3 -3
  154. package/plugins/steve/__tests__/steve-class.test.ts +102 -141
  155. package/plugins/steve/steve-class.js +12 -3
  156. package/plugins/steve/steve-pagination-utils.ts +6 -2
  157. package/rancher-components/RcIcon/types.ts +2 -0
  158. package/rancher-components/RcItemCard/RcItemCard.vue +72 -20
  159. package/store/prefs.js +3 -0
  160. package/types/aws-sdk.d.ts +121 -0
  161. package/types/resources/node.ts +15 -0
  162. package/types/shell/index.d.ts +537 -506
  163. package/types/store/pagination.types.ts +5 -5
  164. package/utils/__tests__/array.test.ts +1 -29
  165. package/utils/__tests__/cluster-agent-configuration.test.ts +203 -0
  166. package/utils/array.ts +0 -11
  167. package/utils/aws.ts +21 -0
  168. package/utils/cluster.js +22 -2
  169. package/utils/selector-typed.ts +1 -1
  170. package/utils/svg-filter.js +4 -3
  171. package/components/__tests__/ProjectRow.test.ts +0 -206
  172. package/components/form/ResourceQuota/ProjectRow.vue +0 -277
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 576 576" style="enable-background:new 0 0 576 576;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:#808184;}
7
+ .st1{fill:#262261;}
8
+ </style>
9
+ <g>
10
+ <g>
11
+ <g>
12
+ <polygon class="st0" points="326.6,212.6 326.6,132.6 128.6,132.6 128.6,444.6 326.6,444.6 326.6,364.6 208.6,364.6 208.6,212.6
13
+ "/>
14
+ <g>
15
+ <rect x="366.5" y="132.6" class="st1" width="79.9" height="79.9"/>
16
+ <rect x="366.5" y="252.6" class="st1" width="79.9" height="192"/>
17
+ </g>
18
+ </g>
19
+ <path class="st1" d="M8.5,9.5v558.2h558.2V9.5H8.5z M486.4,484.7H88.7V92.6h397.8V484.7z"/>
20
+ </g>
21
+ </g>
22
+ </svg>
@@ -275,5 +275,7 @@
275
275
 
276
276
  --rc-disabled-background: #{$gray005};
277
277
  --rc-disabled-text-color: #{$gray004};
278
+ --rc-image-bg: #{$lightest};
279
+ --rc-image-color: #{$darkest};
278
280
  }
279
281
  }
@@ -593,6 +593,8 @@
593
593
  --rc-inactive-disabled-border: #{$gray001};
594
594
  --rc-disabled-background: #{$gray001};
595
595
  --rc-disabled-text-color: #{$gray004};
596
+ --rc-image-bg: #{$lightest};
597
+ --rc-image-color: #{$darkest};
596
598
 
597
599
  }
598
600
  }
@@ -724,6 +724,9 @@ BODY, .theme-light {
724
724
  --rc-disabled-background: #{$gray001};
725
725
  --rc-disabled-text-color: #{$gray004};
726
726
 
727
+ --rc-image-bg: #{$lightest};
728
+ --rc-image-color: #{$darkest};
729
+
727
730
  --warning-badge : #{$warning};
728
731
  --on-warning-banner : #{darken($warning, 60%)};
729
732
 
@@ -1065,6 +1068,9 @@ BODY, .theme-dark {
1065
1068
  --rc-disabled-background: #{$gray005};
1066
1069
  --rc-disabled-text-color: #{$gray004};
1067
1070
 
1071
+ --rc-image-bg: #{$lightest};
1072
+ --rc-image-color: #{$darkest};
1073
+
1068
1074
  --error-text : #FFAC99;
1069
1075
  --warning-text : #{contrast-color($warning)};
1070
1076
 
@@ -164,8 +164,8 @@ generic:
164
164
  internalIps: Internal IPs
165
165
  opensInNewTab: Opens in a new tab
166
166
  autogeneratedCreated:
167
- title: "{resource} created"
168
- message: "{id} has been created."
167
+ title: "Created {resource}"
168
+ message: "{resource} {id} has been created."
169
169
 
170
170
  tabs:
171
171
  addItem: Add a new tab item
@@ -438,6 +438,7 @@ accountAndKeys:
438
438
  notAllowed: You do not have permission to manage API Keys
439
439
  apiEndpoint: "API Endpoint:"
440
440
  copyApiEnpoint: Copy API Endpoint to clipboard
441
+ normanTokenDeprecation: The API Keys feature is being migrated to a new API. Any existing API Keys from the legacy API will continue to work, but new API Keys will be created using the new API.
441
442
  add:
442
443
  description:
443
444
  label: Description
@@ -463,7 +464,9 @@ accountAndKeys:
463
464
  month: Months
464
465
  year: Years
465
466
  scope: Scope
467
+ userPrincipal: User Principal
466
468
  noScope: No Scope
469
+ enabled: Token enabled
467
470
  info:
468
471
  accessKey: Access Key
469
472
  secretKey: Secret Key
@@ -472,7 +475,7 @@ accountAndKeys:
472
475
  keyCreated: A new API Key has been created
473
476
  bearerTokenTip: "Access Key and Secret Key can be sent as the username and password for HTTP Basic auth to authorize requests. You can also combine them to use as a Bearer token:"
474
477
  ttlLimitedWarning: The Expiry time for this API Key was reduced due to system configuration
475
-
478
+ expiryOptionsWithNever: Since "auth-token-max-ttl-minutes" is set to <= 0, the API Key will not expire unless the "Automatically expire" option is set to "Custom" and a custom expiry time is set.
476
479
  addClusterMemberDialog:
477
480
  title: Add Cluster Member
478
481
 
@@ -1191,6 +1194,7 @@ catalog:
1191
1194
  statusFilterCautions:
1192
1195
  installation: Installation status cannot be determined with 100% accuracy
1193
1196
  upgradeable: Upgradeable status cannot be determined with 100% accuracy
1197
+ appCollectionRepoMissing: The SUSE Application Collection repository is not currently configured. You can add it on the <repoCreate>Repository Create</repoCreate> page.
1194
1198
  totalChartsMessage: |-
1195
1199
  {count , plural,
1196
1200
  =1 { {count} chart in total }
@@ -1218,6 +1222,7 @@ catalog:
1218
1222
  repo: repository
1219
1223
  category: category
1220
1224
  tag: tag
1225
+ isFromSuseAppCoRepository: From SUSE App Collection.
1221
1226
  install:
1222
1227
  action:
1223
1228
  goToUpgrade: Edit / Change Version
@@ -1332,6 +1337,11 @@ catalog:
1332
1337
  }. Start by setting some basic information used by {vendor} to manage the App.
1333
1338
  nsCreationDescription: "To install the app into a new namespace enter it's name in the Namespace field and select it."
1334
1339
  createNamespace: "Namespace <code>{namespace}</code> will be created."
1340
+ requiresImagePullSecret: "This Chart requires an Image Pull Secret in order for images to be succesfully pulled."
1341
+ dontUseDefaultImagePullSecret: "Manually select an Image Pull Secret or create a new one with Username/Password"
1342
+ generatedNewImagePullSecret: "A new Image Pull Secret <b>{ imagePullSecretName }</b> will be generated"
1343
+ generatedImagePullSecretBannerFromPreviousAuth: "A new Image Pull Secret <b>{ imagePullSecretName }</b> will be generated from the Repository secret <b>{ repoAuthenticationName }</b>."
1344
+ usePreviouslyGeneratedImagePullSecretBanner: "Image Pull Secret <b>{ imagePullSecretName }</b> was already created previously from the Repository secret <b>{ repoAuthenticationName }</b> and will be used."
1335
1345
  clusterTplVersion:
1336
1346
  label: Version
1337
1347
  subtext: Select a version of the template
@@ -1381,11 +1391,21 @@ catalog:
1381
1391
  rancher-partner-charts: Partners
1382
1392
  rancher-rke2-charts: RKE2
1383
1393
  rancher-ui-plugins: Rancher Extensions
1394
+ suse-application-collection: SUSE App Collection
1384
1395
 
1385
1396
  target:
1386
- git: Git repository containing Helm chart or cluster template definitions
1387
- http: http(s) URL to an index generated by Helm
1388
- oci: OCI Repository
1397
+ git:
1398
+ title: Git Repository
1399
+ description: Git repository containing Helm charts or cluster templates
1400
+ http:
1401
+ title: Helm Repository
1402
+ description: HTTP(S) URL pointing to a Helm chart repository index
1403
+ oci:
1404
+ title: OCI Repository
1405
+ description: OCI-compliant registry hosting Helm charts as artifacts
1406
+ suseAppCollection:
1407
+ title: SUSE App Collection
1408
+ description: Curated, enterprise-ready applications from SUSE Application Collection
1389
1409
  label: Target
1390
1410
  url:
1391
1411
  label: Index URL
@@ -1592,7 +1612,7 @@ cluster:
1592
1612
  nodeLabel:
1593
1613
  title: Node Labels
1594
1614
  label: Add Label
1595
- ipv6: "It looks like this cluster uses IPv6 networking: <code>Node Private IP</code> should be set to the cluster's IPV6 address."
1615
+ ipv6: "It looks like this cluster uses IPv6 networking: <code>Node Private IP</code> should be set to the cluster's IPv6 address."
1596
1616
  registrationCommand:
1597
1617
  label: Registration Command
1598
1618
  linuxDetail: Run this command on each of the existing Linux machines you want to register.
@@ -2101,19 +2121,19 @@ cluster:
2101
2121
  httpTokens: Use tokens for metadata
2102
2122
  tagTitle: EC2 Tags
2103
2123
  enableIpv6:
2104
- label: Enable IPv6
2105
- description: "Checking this automatically sets your <a aria-label='scroll to the networking section in cluster configuration' href=\"#networking\">Network Stack Preference Order</a> to <b>DUAL</b> stack, enabling both IPv4 and IPv6. For an IPv6-only cluster, you can manually change that setting to <b>IPv6</b>."
2124
+ label: Enable Dual-Stack
2125
+ description: "To use dual-stack networking, you will need to update the <a aria-label='scroll to the networking section in cluster configuration' href=\"#networking\">Network Stack Preference Order</a> to <b>DUAL</b> stack. For an IPv6-only cluster, check \"Enable IPv6\" and update the stack preference to <b>IPv6</b>."
2106
2126
  ipv6AddressCount:
2107
2127
  label: IPv6 Address Count
2108
2128
  tooltip: Specifies the number of IPv6 addresses to assign to the network interface
2109
2129
  error: IPv6 Address Count must be greater than 0 when using an IPv6 vpc or subnet.
2110
2130
  enablePrimaryIpv6:
2111
- label: Enable Static Primary Ipv6
2112
- description: This allows IPv6 communication for components and workloads.
2131
+ label: Enable Static Primary IPv6
2132
+ description: This designates the first assigned IPv6 address as the primary address, ensuring a consistent, non-changing IPv6 address for the instance. This option does not control whether IPv6 addresses are assigned.
2113
2133
  ipv6AddressOnly:
2114
- label: Use IPv6 Only
2134
+ label: Enable IPv6
2115
2135
  httpProtocolIpv6:
2116
- label: Use IPv6 for instance metadata service
2136
+ label: Enable IPv6 endpoint for instance metadata service
2117
2137
  ipv6ValidationWarning: When one pool uses an IPv6 or dual-stack subnet/vpc, all pools must use an IPv6 or dual-stack subnet/vpc.
2118
2138
  pnap:
2119
2139
  serverLocation:
@@ -2203,6 +2223,7 @@ cluster:
2203
2223
  tooltip: 'Additional Kubernetes Manifest YAML to be applied to the cluster on startup.'
2204
2224
  agentConfig:
2205
2225
  tabs:
2226
+ agentsScheduling: Agents Scheduling
2206
2227
  cluster: Cluster Agent
2207
2228
  fleet: Fleet Agent
2208
2229
  groups:
@@ -2212,13 +2233,19 @@ cluster:
2212
2233
  podTolerations: Tolerations
2213
2234
  podRequestsAndLimits: Requests and Limits
2214
2235
  schedulingCustomization: Scheduling Customization
2236
+ agentsScheduling:
2237
+ text: Ensure that cluster- and/or fleet-agent pods are not evicted due to node pressure, resource constraints or scheduler policies When enabled, these settings may be configured in the
2238
+ textLink: Global Settings
2239
+ label: 'Prevent agent pod eviction for:'
2215
2240
  subGroups:
2216
2241
  podAffinityAnti: Pod Affinity/Anti-Affinity
2217
2242
  nodeAffinity: Node Affinity
2218
- schedulingCustomization:
2219
- label: Prevent Rancher cluster agent pod eviction
2220
- description: This ensures that the cluster agent pod is not evicted due to node pressure, resource constraints or scheduler policies.
2221
- banner: This feature has been enabled with settings that are different from the global default settings.
2243
+ agentsScheduling:
2244
+ cluster: Cluster Agent
2245
+ fleet: Fleet Agent
2246
+ label: Prevent Rancher {agent} pod eviction
2247
+ description: This ensures that the {agent} pod is not evicted due to node pressure, resource constraints or scheduler policies.
2248
+ banner: This feature is currently configured with settings which differ to the default Global Settings. Enable the checkbox below to overwrite the current settings with the default Global Settings.
2222
2249
  innerCheckbox: Apply global settings for Priority Class and Pod Disruption Budget
2223
2250
  banners:
2224
2251
  advanced: These are advanced configuration options. Generally, they should be left as-is.
@@ -2267,6 +2294,7 @@ cluster:
2267
2294
  other { {pool_name}: The provided values for {fields} were not found in the list of expected values. This can happen with clusters provisioned outside of Rancher or when options for the provider have changed. }
2268
2295
  }
2269
2296
  rke1DeprecationMessage: 'Rancher Kubernetes Engine (RKE / RKE1) has reached end of life and these clusters are no longer supported. We recommend replatforming RKE1 clusters to RKE2 to ensure continued support and security updates. Learn more about the transition <a href="https://www.suse.com/support/kb/doc/?id=000021518" target="_blank" rel="noopener noreferrer nofollow">here</a>.'
2297
+ nginxDeprecated: The NGINX controller is deprecated and will be removed in upcoming versions
2270
2298
  rke1Unsupported: RKE1 Clusters are no longer supported
2271
2299
 
2272
2300
  architecture:
@@ -2454,6 +2482,16 @@ cluster:
2454
2482
  editYamlMachinePool:
2455
2483
  title: Save Machine Configurations
2456
2484
  body: Machine Configurations define how machines in Pools are deployed.<br><br> They will be saved upfront to ensure valid Cluster YAML can be saved.
2485
+ ipv6Warning:
2486
+ title: Verify IPv6 Settings
2487
+ body: The machine pools in this cluster are configured to use IPv6 networks, but the cluster's networking settings may not support it.
2488
+ stackPrefInvalid: The <a href="{docsBase}/reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration#stack-preference" target="_blank" rel="noopener noreferrer nofollow" aria-label="rke2 documentation for the stack preference setting">Stack Preference</a> should be set to "Dual" or "IPv6" to use dual-stack or IPv6-only networking, respectively.
2489
+ flannelMasqInvalid: K3s uses the Flannel cni plugin by default. Enabling Flannel Masq is generally advised when using IPv6 networking.
2490
+ cidrInvalidRke2: To enable dual-stack networking in RKE2 clusters, you must define valid dual-stack cluster and service CIDR ranges.
2491
+ cidrInvalidK3s: To enable dual-stack or IPv6-only networking in K3s clusters, you must define valid dual-stack or IPv6 cluster and service CIDR ranges.
2492
+ readMoreK3s: <a href="https://docs.k3s.io/networking/basic-network-options#dual-stack-ipv4--ipv6-networking" target="_blank" rel="noopener noreferrer nofollow" aria-label="k3s dual-stack networking documentation">Learn more about K3s networking</a>
2493
+ readMoreRke2: <a href="https://docs.rke2.io/networking/basic_network_options#ipv6-setup" target="_blank" rel="noopener noreferrer nofollow" aria-label="rke2 ipv6 networking documentation">Learn more about RKE2 networking</a>
2494
+ verifySettings: 'Before continuing, please verify the following settings:'
2457
2495
  snapshots:
2458
2496
  suffix: Snapshots per node
2459
2497
  s3Suffix: Snapshots
@@ -2580,12 +2618,11 @@ cluster:
2580
2618
  label: Endpoint CA Cert
2581
2619
  stackPreference:
2582
2620
  label: Stack Preference
2583
- description: "Stack preference determines the networking stack used by the cluster. The selected value configures the address used for health and readiness probes of calico, etcd, kube-apiserver, kube-scheduler, kube-controller-manager, and kubelet. It also defines the server URL in the <code>authentication-token-webhook-config-file</code> for the Authorized Cluster Endpoint and the advertise-client-urls for etcd during snapshot restore. When set to <code>dual</code>, the cluster uses <code>localhost</code>; when set to <code>ipv6</code>, it uses <code>[::1]</code>; and when set to <code>ipv4</code>, it uses <code>127.0.0.1</code>."
2621
+ description: Stack preference determines the networking stack used by the cluster. IPv4 uses <code>127.0.0.1</code>, Dual-Stack uses <code>localhost</code> and IPv6 uses <code>[::1]</code>. Read more about <a href="https://ranchermanager.docs.rancher.com/reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration#stack-preference" target="_blank" rel="noopener noreferrer nofollow" >RKE2</a> and <a href="https://ranchermanager.docs.rancher.com/reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration#stack-preference" target="_blank" rel="noopener noreferrer nofollow" >K3s</a> networking in the Rancher documentation.
2584
2622
  options:
2585
2623
  ipv4: IPv4
2586
2624
  ipv6: IPv6
2587
- dual: Dual-Stack
2588
- errorNeedsIpv6: Stack preference must be set to dual-stack or ipv6 if using ipv6 networking in nodepools.
2625
+ dual: Dual
2589
2626
  k3s:
2590
2627
  flannelMasq:
2591
2628
  title: IPv6 NAT
@@ -2614,6 +2651,48 @@ cluster:
2614
2651
  rke1:
2615
2652
  local: local
2616
2653
  s3: s3
2654
+ ingress:
2655
+ title: Ingress
2656
+ enableIngress: Install Ingress controller to enable external routing
2657
+ nginx:
2658
+ header: Ingress-NGINX
2659
+ content: Choose this only if your workloads are not yet ready for Traefik.
2660
+ dual:
2661
+ header: Dual Mode
2662
+ content: Use this to safely test and migrate traffic from Ingress-NGINX to Traefik.
2663
+ traefik:
2664
+ header: Traefik
2665
+ content: The new default provider for high-performance routing and modern feature support.
2666
+ recommended: Recommended
2667
+ legacy: Legacy
2668
+ migration: Migration
2669
+ learnMore:
2670
+ label: Learn more
2671
+ showAdvanced: Show advanced configuration
2672
+ hideAdvanced: Hide advanced configuration
2673
+ configurationOptions:
2674
+ title: Configuration Options
2675
+ compatibilityMode: Enable Traefik Ingress NGINX compatibility mode for annotations
2676
+ traefik:
2677
+ http: Traefik HTTP
2678
+ https: Traefik HTTPS
2679
+ nginx:
2680
+ http: Ingress-NGINX HTTP
2681
+ https: Ingress-NGINX HTTPS
2682
+ banners:
2683
+ transitioning:
2684
+ label: Rancher is transitioning to Traefik as the default provider. While Ingress-NGINX remains available for migration purposes, we recommend moving workloads to Traefik to ensure long-term compatibility and support.
2685
+ disabled:
2686
+ label: Without an Ingress controller, services in this cluster will not be reachable via external URLs or hostnames. You will need to manually configure an alternative routing solution to expose your workloads.
2687
+ selected:
2688
+ ingress-nginx:
2689
+ label: Ingress-NGINX is now deprecated and will be removed in a future release. To avoid service interruptions, please begin migrating your Ingress resources to Traefik. Please review our <docsUrl>migration documentation</docsUrl>.
2690
+ traefik:
2691
+ label: Before switching to Traefik, please review our <docsUrl>migration documentation</docsUrl> to ensure your Ingress resources are updated to support Traefik’s configuration requirements.
2692
+ dual:
2693
+ label: Please review our <docsUrl>migration documentation</docsUrl> to ensure your current workloads and annotations are compatible. Taking this step now helps prevent unexpected routing issues during the transition.
2694
+ validation:
2695
+ portsMatch: Traefik and Ingress-NGINX ports cannot match
2617
2696
  tabs:
2618
2697
  ace: Authorized Endpoint
2619
2698
  addOnAdditionalManifest: Additional Manifest
@@ -2642,6 +2721,8 @@ cluster:
2642
2721
  v2: RKE2/K3s
2643
2722
  validation:
2644
2723
  iamInstanceProfileName: If the Amazon cloud provider is selected the "IAM Instance Profile Name" must be defined for each Machine Pool
2724
+ capi:
2725
+ notSupported: Managing clusters provisioned using CAPI infrastructure providers via the UI is currently limited to Rancher Turtles provisioned clusters.
2645
2726
 
2646
2727
  clusterIndexPage:
2647
2728
  hardwareResourceGauge:
@@ -2754,7 +2835,7 @@ drivers:
2754
2835
  kontainer:
2755
2836
  title: Cluster Drivers
2756
2837
  emberDeprecationMessage: 'Support for UI Plugins (based on Ember) for cluster and node drivers was deprecated in Rancher 2.11.0 and will be removed in a future release. These need to be migrated to the new <a href="https://extensions.rancher.io" target="_blank" rel="noopener noreferrer nofollow">UI Extensions framework</a>.'
2757
-
2838
+ refreshError: 'Error refreshing cluster drivers: {error}'
2758
2839
  node:
2759
2840
  title: Node Drivers
2760
2841
  add:
@@ -5785,6 +5866,7 @@ promptForceRemove:
5785
5866
 
5786
5867
  promptScaleMachineDown:
5787
5868
  attemptingToRemove: "You are attempting to delete {count} {type}"
5869
+ attemptingToScaleDown: "You are attempting to scale down {type}"
5788
5870
  retainedMachine1: At least one Machine must exist for roles Control Plane and Etcd.
5789
5871
  retainedMachine2: <b>{ name }</b> will remain
5790
5872
  scaling: |-
@@ -6154,6 +6236,13 @@ secret:
6154
6236
  warnings:
6155
6237
  expiring: "{count} {count, plural, =1 {Certificate expires soon} other {Certificates expire soon}}"
6156
6238
  expired: "{count} {count, plural, =1 {Certificate has expired} other {Certificates have expired}}"
6239
+ projectScoped:
6240
+ tooltip:
6241
+ source: "Project Scoped Secret (for Project \"{project}\" in cluster \"{cluster}\")"
6242
+ copy: "Managed via Project Scoped Secret (\"{secret}\" in Project \"{project}\")"
6243
+ origin:
6244
+ source: "Project Secret"
6245
+ copy: "Via Project Secret"
6157
6246
  data: Data
6158
6247
  registry:
6159
6248
  address: Registry
@@ -6243,6 +6332,7 @@ secret:
6243
6332
 
6244
6333
  selectOrCreateAuthSecret:
6245
6334
  label: Authentication
6335
+ imagePullSecret: Image Pull Secret
6246
6336
  options:
6247
6337
  none: None
6248
6338
  basic: HTTP Basic Auth
@@ -6267,6 +6357,8 @@ selectOrCreateAuthSecret:
6267
6357
  createBasic: Create an HTTP Basic Auth Secret
6268
6358
  createS3: Create an S3-Compatible Auth Secret
6269
6359
  createRKE: Create an RKE Auth Config Secret
6360
+ createImagePullSecretBasedOnAuth: Create an Image Pull Secret based on Authentication Secret
6361
+ createImagePullSecret: Create a new Image Pull Secret with new Username/Password
6270
6362
 
6271
6363
  serviceAccount:
6272
6364
  automount: Automount Service Account Token
@@ -6765,6 +6857,7 @@ storageClass:
6765
6857
  tooltip: By default the default storage class on the host Harvester cluster is used.
6766
6858
 
6767
6859
  tableHeaders:
6860
+ isLegacy: Legacy
6768
6861
  assuredConcurrencyShares: Assured Concurrency Shares
6769
6862
  autoscaler: Autoscaler
6770
6863
  accessKey: Access Key
@@ -6924,6 +7017,7 @@ tableHeaders:
6924
7017
  reclaimPolicy: Reclaim Policy
6925
7018
  registrationNamespace: Registration Namespace
6926
7019
  repo: Repo
7020
+ repoType: Repo Type
6927
7021
  repositories: Repositories
6928
7022
  repoName: Repository Name
6929
7023
  reposReady: Git Repos Ready
@@ -6946,10 +7040,8 @@ tableHeaders:
6946
7040
  selector: Selector
6947
7041
  secrets: Secrets
6948
7042
  secret:
6949
- project-clone: Created by Project Secret
6950
- project-clone-tooltip: Has a Project Scoped Secret created this Secret in this Namespace
6951
- project-scoped: Project Secret
6952
- project-scoped-tooltip: This Project Scoped Secret will create matching Secrets in the Namespaces it contains
7043
+ origin: Origin
7044
+ originTooltip: "Shows if a secret has been created or managed via another Project Scoped Secret. Read the Project Scoped Secret documentation to learn more about this Rancher concept"
6953
7045
  schedule: Schedule
6954
7046
  service: Service
6955
7047
  serviceAccounts: Service Accounts
@@ -8705,6 +8797,10 @@ advancedSettings:
8705
8797
  moreActions: More actions for setting - { setting }
8706
8798
  label: Edit Setting
8707
8799
  changeSetting: "Change Setting:"
8800
+ agentConfigBanner:
8801
+ text: Editing this value will not change the value set in running clusters! In order to update a running cluster to use the new values, edit the cluster and click on “Apply global settings for Priority Class and Pod Disruption Budget” in the {agent} Agent configuration tab.
8802
+ cluster: Cluster
8803
+ fleet: Fleet
8708
8804
  trueOption: "True"
8709
8805
  falseOption: "False"
8710
8806
  value: Value
@@ -9005,6 +9101,13 @@ resourceQuota:
9005
9101
  namespace: 'This Namespace:'
9006
9102
  available: 'Available:'
9007
9103
  max: 'Total:'
9104
+ ariaLabel:
9105
+ grid: Resource Quotas
9106
+ resourceType: 'Resource Type, row {row}'
9107
+ resourceIdentifier: 'Resource Identifier, row {row}'
9108
+ projectLimit: 'Project Limit, row {row}'
9109
+ namespaceDefaultLimit: 'Namespace Default Limit, row {row}'
9110
+ remove: 'Remove {identifier}'
9008
9111
  customLinks:
9009
9112
  displayTitle: Links
9010
9113
  label: Home Links
@@ -9260,6 +9363,7 @@ component:
9260
9363
  podsCard:
9261
9364
  title: Pods
9262
9365
  ariaResourceName: pods
9366
+ noPods: There are no pods currently present.
9263
9367
  jobsCard:
9264
9368
  title: Jobs
9265
9369
  ariaResourceName: jobs
@@ -776,7 +776,9 @@ export default {
776
776
  class="resource-container cru__content"
777
777
  :style="[minHeight ? { 'min-height': minHeight } : {}]"
778
778
  >
779
- <slot />
779
+ <slot name="single">
780
+ <slot />
781
+ </slot>
780
782
  </div>
781
783
  <slot name="form-footer">
782
784
  <CruResourceFooter
@@ -1,8 +1,8 @@
1
1
  <script>
2
2
  import { mapGetters, useStore } from 'vuex';
3
3
  import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/ResourceTable';
4
- import {
5
- STATE, AGE, NAME, NS_SNAPSHOT_QUOTA, DESCRIPTION
4
+ import {
5
+ STATE, AGE, NAME, NS_SNAPSHOT_QUOTA, DESCRIPTION, PROJECT_NAMESPACES_NAME
6
6
  } from '@shell/config/table-headers';
7
7
  import { uniq } from '@shell/utils/array';
8
8
  import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES, HCI } from '@shell/config/types';
@@ -122,13 +122,11 @@ export default {
122
122
  return this.$store.getters['currentProduct'].inStore === HARVESTER;
123
123
  },
124
124
  headers() {
125
- const headers = [
126
- STATE,
127
- NAME,
128
- DESCRIPTION
129
- ];
125
+ let headers;
130
126
 
131
127
  if (this.groupPreference === 'none') {
128
+ headers = [STATE, NAME, DESCRIPTION];
129
+
132
130
  const projectHeader = {
133
131
  name: 'project',
134
132
  label: this.t('tableHeaders.project'),
@@ -137,6 +135,8 @@ export default {
137
135
  };
138
136
 
139
137
  headers.push(projectHeader);
138
+ } else {
139
+ headers = [STATE, PROJECT_NAMESPACES_NAME, DESCRIPTION];
140
140
  }
141
141
 
142
142
  if (this.isHarvester && this.harvesterResourceQuotaSchema) {
@@ -178,12 +178,12 @@ export default {
178
178
  rowsWithFakeNamespaces() {
179
179
  const fakeRows = this.projectsWithoutNamespaces.map((project) => {
180
180
  return {
181
- groupById: `${ ('resourceTable.groupLabel.notInAProject') }-${ project.id }`,
182
- isFake: true,
183
- mainRowKey: project.id,
184
- nameDisplay: project.spec?.displayName, // Enable filtering by the project name
181
+ groupById: `${ ('resourceTable.groupLabel.notInAProject') }-${ project.id }`,
182
+ isFake: true,
183
+ mainRowKey: project.id,
184
+ projectNameDisplay: project.spec?.displayName, // Enable filtering by the project name
185
185
  project,
186
- availableActions: []
186
+ availableActions: []
187
187
  };
188
188
  });
189
189
 
@@ -18,9 +18,9 @@
18
18
  */
19
19
  import { Solver } from '@shell/utils/svg-filter';
20
20
  import { colorToRgb, mapStandardColors, normalizeHex } from '@shell/utils/color';
21
+ import { mapGetters } from 'vuex';
21
22
 
22
23
  const filterCache = {};
23
- const cssCache = {};
24
24
 
25
25
  const colors = {
26
26
  header: {
@@ -33,7 +33,7 @@ const colors = {
33
33
  },
34
34
  primary: {
35
35
  color: '--on-tertiary',
36
- hover: '--link',
36
+ hover: '--tertiary-hover-app-bar',
37
37
  colorFallback: '--on-tertiary',
38
38
  hoverFallback: '--primary-hover-text',
39
39
  active: '--on-active',
@@ -63,7 +63,12 @@ export default {
63
63
  },
64
64
 
65
65
  data() {
66
- return { className: '' };
66
+ return {
67
+ className: '',
68
+ mainFilter: null,
69
+ hoverFilter: null,
70
+ activeFilter: null,
71
+ };
67
72
  },
68
73
 
69
74
  created() {
@@ -72,6 +77,18 @@ export default {
72
77
  }
73
78
  },
74
79
 
80
+ computed: {
81
+ ...mapGetters({
82
+ brand: 'management/brand',
83
+ theme: 'prefs/theme',
84
+ })
85
+ },
86
+
87
+ watch: {
88
+ brand: 'recomputeColor',
89
+ theme: 'recomputeColor',
90
+ },
91
+
75
92
  methods: {
76
93
  getComputedStyleFor(cssVar, fallback) {
77
94
  const value = window.getComputedStyle(document.body).getPropertyValue(cssVar).trim();
@@ -86,11 +103,11 @@ export default {
86
103
 
87
104
  const solver = new Solver(rgb);
88
105
  const res = solver.solve();
89
- const filter = res?.filter;
106
+ const filterVal = res?.filterVal;
90
107
 
91
- filterCache[cacheKey] = filter;
108
+ filterCache[cacheKey] = filterVal;
92
109
 
93
- return filter;
110
+ return filterVal;
94
111
  },
95
112
 
96
113
  setColor() {
@@ -111,43 +128,23 @@ export default {
111
128
 
112
129
  const className = `svg-icon-${ uiColorStr }-${ hoverColorStr }`;
113
130
 
114
- if (!cssCache[className]) {
115
- const hoverFilter = this.resolveColorFilter(hoverColor, hoverColorRGB);
116
- const mainFilter = this.resolveColorFilter(uiColor, uiColorRGB);
117
- const activeFilter = this.resolveColorFilter(activeColor, activeColorRGB);
118
-
119
- // Add stylesheet (added as global styles)
120
- const styles = `
121
- img.${ className } {
122
- ${ mainFilter };
123
- }
124
- img.${ className }:hover {
125
- ${ hoverFilter };
126
- }
127
- button:hover > img.${ className } {
128
- ${ hoverFilter };
129
- }
130
- li:hover > img.${ className } {
131
- ${ hoverFilter };
132
- }
133
- a.option:hover > img.${ className } {
134
- ${ hoverFilter };
135
- }
136
- a.option.active-menu-link > img.${ className } {
137
- ${ activeFilter };
138
- }
139
- `;
140
-
141
- const styleSheet = document.createElement('style');
142
-
143
- styleSheet.innerText = styles;
144
- document.head.appendChild(styleSheet);
145
-
146
- cssCache[className] = true;
147
- }
131
+ this.hoverFilter = this.resolveColorFilter(hoverColor, hoverColorRGB);
132
+ this.mainFilter = this.resolveColorFilter(uiColor, uiColorRGB);
133
+ this.activeFilter = this.resolveColorFilter(activeColor, activeColorRGB);
148
134
 
149
135
  this['className'] = className;
150
- }
136
+ },
137
+
138
+ recomputeColor() {
139
+ if (!this.src) {
140
+ return;
141
+ }
142
+
143
+ this.mainFilter = null;
144
+ this.hoverFilter = null;
145
+ this.activeFilter = null;
146
+ this.setColor();
147
+ },
151
148
  }
152
149
  };
153
150
  </script>
@@ -172,8 +169,30 @@ export default {
172
169
  </template>
173
170
 
174
171
  <style lang="scss" scoped>
175
- .svg-icon {
172
+ img.svg-icon {
173
+ filter: v-bind(mainFilter);
174
+ }
175
+
176
+ button:hover > img.svg-icon,
177
+ li:hover > img.svg-icon {
178
+ filter: v-bind(hoverFilter);
179
+ }
180
+
181
+ .side-menu .category div a > img.svg-icon {
176
182
  height: 24px;
177
183
  width: 24px;
184
+ filter: v-bind(mainFilter);
185
+ }
186
+
187
+ .side-menu .category div a:hover > img.svg-icon {
188
+ filter: v-bind(hoverFilter);
189
+ }
190
+
191
+ .side-menu .category div a.active-menu-link > img.svg-icon {
192
+ filter: v-bind(activeFilter);
193
+
194
+ &:hover {
195
+ filter: v-bind(activeFilter);
196
+ }
178
197
  }
179
198
  </style>