@rancher/shell 2.0.2-rc.1 → 2.0.3

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 (59) hide show
  1. package/assets/translations/en-us.yaml +53 -31
  2. package/components/PromptRemove.vue +8 -3
  3. package/components/ResourceDetail/Masthead.vue +1 -0
  4. package/components/ResourceDetail/index.vue +2 -1
  5. package/components/SideNav.vue +1 -1
  6. package/components/TableDataUserIcon.vue +1 -1
  7. package/components/fleet/FleetClusters.vue +0 -3
  8. package/components/fleet/FleetRepos.vue +0 -7
  9. package/components/formatter/CloudCredExpired.vue +69 -0
  10. package/components/formatter/ClusterProvider.vue +3 -3
  11. package/components/formatter/Date.vue +1 -1
  12. package/components/nav/Header.vue +9 -5
  13. package/components/nav/TopLevelMenu.vue +127 -63
  14. package/components/nav/__tests__/TopLevelMenu.test.ts +53 -27
  15. package/config/labels-annotations.js +3 -0
  16. package/core/types-provisioning.ts +5 -0
  17. package/core/types.ts +26 -1
  18. package/detail/catalog.cattle.io.app.vue +17 -4
  19. package/detail/fleet.cattle.io.bundle.vue +5 -68
  20. package/detail/fleet.cattle.io.cluster.vue +11 -9
  21. package/detail/fleet.cattle.io.gitrepo.vue +3 -2
  22. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +109 -24
  23. package/edit/provisioning.cattle.io.cluster/index.vue +10 -4
  24. package/edit/provisioning.cattle.io.cluster/rke2.vue +13 -2
  25. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +1 -0
  26. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +177 -26
  27. package/list/provisioning.cattle.io.cluster.vue +56 -5
  28. package/mixins/chart.js +6 -2
  29. package/models/__tests__/management.cattle.io.cluster.test.ts +3 -3
  30. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -86
  31. package/models/catalog.cattle.io.app.js +108 -21
  32. package/models/cloudcredential.js +159 -2
  33. package/models/fleet.cattle.io.bundle.js +3 -1
  34. package/models/fleet.cattle.io.gitrepo.js +50 -61
  35. package/models/management.cattle.io.cluster.js +15 -7
  36. package/models/provisioning.cattle.io.cluster.js +62 -15
  37. package/package.json +1 -1
  38. package/pages/c/_cluster/apps/charts/install.vue +2 -1
  39. package/pages/c/_cluster/explorer/__tests__/index.test.ts +1 -1
  40. package/pages/c/_cluster/explorer/index.vue +1 -2
  41. package/pages/c/_cluster/fleet/index.vue +12 -5
  42. package/pages/c/_cluster/manager/cloudCredential/index.vue +68 -4
  43. package/pages/c/_cluster/uiplugins/index.vue +4 -2
  44. package/pages/home.vue +1 -0
  45. package/scripts/extension/bundle +1 -1
  46. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +0 -2
  47. package/scripts/extension/parse-tag-name +21 -12
  48. package/scripts/publish-shell.sh +10 -4
  49. package/scripts/typegen.sh +27 -22
  50. package/store/features.js +1 -0
  51. package/types/resources/fleet.d.ts +40 -0
  52. package/types/shell/index.d.ts +4692 -0
  53. package/utils/auth.js +1 -1
  54. package/utils/cluster.js +1 -1
  55. package/utils/fleet.ts +159 -0
  56. package/utils/string.js +9 -0
  57. package/utils/v-sphere.ts +282 -0
  58. package/vue.config.js +3 -3
  59. package/shell/types/shell/index.d.ts +0 -2
@@ -360,8 +360,8 @@ addClusterMemberDialog:
360
360
  title: Add Cluster Member
361
361
 
362
362
  addonConfigConfirmation:
363
- title: Add-On Config Reset
364
- body: Changing the Kubernetes Version can reset the Add-On Config values. You should check that the values are as expected before continuing.
363
+ title: Add-On Reset
364
+ body: Changing the Kubernetes Version can reset Add-On values. You should check that the values are as expected before continuing.
365
365
 
366
366
  addProjectMemberDialog:
367
367
  title: Add Project Member
@@ -1187,38 +1187,38 @@ cluster:
1187
1187
  <code>Cluster Management > Advanced > JWT Authentication</code>"
1188
1188
  addonChart:
1189
1189
  rancher-vsphere-cpi:
1190
- label: vSphere CPI
1191
- configuration: vSphere CPI Configuration
1190
+ label: "Add-on: vSphere CPI"
1191
+ configuration: vSphere CPI
1192
1192
  rancher-vsphere-csi:
1193
- label: vSphere CSI
1194
- configuration: vSphere CSI Configuration
1193
+ label: "Add-on: vSphere CSI"
1194
+ configuration: vSphere CSI
1195
1195
  rke2-calico:
1196
- label: Calico
1197
- configuration: Calico Configuration
1196
+ label: "Add-on: Calico"
1197
+ configuration: Calico
1198
1198
  rke2-calico-crd:
1199
- label: Calico
1200
- configuration: Calico Configuration
1199
+ label: "Add-on: Calico"
1200
+ configuration: Calico
1201
1201
  rke2-canal:
1202
- label: Canal
1203
- configuration: Canal Configuration
1202
+ label: "Add-on: Canal"
1203
+ configuration: Canal
1204
1204
  rke2-cilium:
1205
- label: Cilium
1206
- configuration: Cilium Configuration
1205
+ label: "Add-on: Cilium"
1206
+ configuration: Cilium
1207
1207
  rke2-coredns:
1208
- label: CoreDNS
1209
- configuration: CoreDNS Configuration
1208
+ label: "Add-on: CoreDNS"
1209
+ configuration: CoreDNS
1210
1210
  rke2-ingress-nginx:
1211
- label: NGINX
1212
- configuration: NGINX Ingress Configuration
1211
+ label: "Add-on: NGINX"
1212
+ configuration: NGINX Ingress
1213
1213
  rke2-kube-proxy:
1214
- label: Kube Proxy
1215
- configuration: Kube Proxy Configuration
1214
+ label: "Add-on: Kube Proxy"
1215
+ configuration: Kube Proxy
1216
1216
  rke2-metrics-server:
1217
- label: Metrics Server
1218
- configuration: Metrics Server Configuration
1217
+ label: "Add-on: Metrics Server"
1218
+ configuration: Metrics Server
1219
1219
  rke2-multus:
1220
- label: Multus
1221
- configuration: Multus Configuration
1220
+ label: "Add-on: Multus"
1221
+ configuration: Multus
1222
1222
  agentEnvVars:
1223
1223
  label: Agent Environment
1224
1224
  detail: Add additional environment variables to the agent container. This is most commonly useful for configuring a HTTP proxy.
@@ -1234,7 +1234,7 @@ cluster:
1234
1234
  label: Google
1235
1235
  rancher-vsphere:
1236
1236
  label: vSphere
1237
- note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-On Config tab.'
1237
+ note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-on tabs.'
1238
1238
  harvester:
1239
1239
  label: Harvester
1240
1240
  copyConfig: Copy KubeConfig to Clipboard
@@ -1380,8 +1380,10 @@ cluster:
1380
1380
  macAddress: Mac Address
1381
1381
  macFormat: 'Invalid MAC address format.'
1382
1382
  vGpus:
1383
+ warnings:
1384
+ minimumAllocatable: It's highly recommended to select a vGPU with a number of allocatable devices greater than the number of nodes (Machine Count) to avoid "un-schedulable" errors after cluster updates.
1383
1385
  errors:
1384
- notAllocatable: '"VGPUs" not allocatable. There are not enough [{vGpus}] devices to be allocated to each node in machine pool [{pool}]'
1386
+ notAllocatable: '[{vGpu}] vGPU device is not allocatable; required: {allocated}, allocatable: {allocatable}'
1385
1387
  volume:
1386
1388
  title: Volumes
1387
1389
  volume: Volume
@@ -1465,6 +1467,14 @@ cluster:
1465
1467
  placeholder: A unique name for the cluster
1466
1468
  directoryConfig:
1467
1469
  title: Data directory configuration
1470
+ banner: Data directory configuration can not be changed once the cluster has been created
1471
+ radioInput:
1472
+ defaultLabel: Use default data directory configuration
1473
+ commonLabel: Use a common base directory for data directory configuration (sub-directories will be used for the system-agent, provisioning and distro paths)
1474
+ customLabel: Use custom data directories
1475
+ common:
1476
+ label: Data directory base path
1477
+ tooltip: Data directory base path. We will append the sub-directories appropriate for each directory (/agent, /provisioning and either /rke2 or /k3s)
1468
1478
  systemAgent:
1469
1479
  label: System-agent directory path
1470
1480
  tooltip: Data directory for the system-agent connection info and plans
@@ -1745,7 +1755,7 @@ cluster:
1745
1755
  serverOs:
1746
1756
  label: OS
1747
1757
  addOns:
1748
- dependencyBanner: Add-On Configurations can vary between Kubernetes versions. Changing the Kubernetes version may reset the values below.
1758
+ dependencyBanner: Add-On Configuration can vary between Kubernetes versions. Changing the Kubernetes version may reset the values below.
1749
1759
  additionalManifest:
1750
1760
  title: Additional Manifest
1751
1761
  tooltip: 'Additional Kubernetes Manifest YAML to be applied to the cluster on startup.'
@@ -1809,11 +1819,18 @@ cluster:
1809
1819
  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. }
1810
1820
  }
1811
1821
  rkeTemplateUpgrade: Template revision {name} available for upgrade
1822
+ cloudCredentials:
1823
+ renew: Renew Cloud Credentials
1824
+ expired: Cloud Credential expired, please Renew Cloud Credentials
1825
+ expiring: Cloud Credential will expire on { expires }, please Renew Cloud Credentials
1826
+ banners:
1827
+ expiring: "{count} {count, plural, =1 { Cluster has a Cloud Credential that expires soon} other { Clusters have Cloud Credentials that expire soon}}, please Renew Cloud {count, plural, =1 { Credential} other { Credentials}}"
1828
+ expired: "{count} {count, plural, =1 { Cluster has a Cloud Credential that has expired} other { Clusters have Cloud Credentials that have expired}}, please Renew Cloud {count, plural, =1 { Credential} other { Credentials}}"
1812
1829
 
1813
1830
  architecture:
1814
1831
  label:
1815
- unknown: Unknown
1816
- mixed: Mixed
1832
+ unknown: unknown
1833
+ mixed: mixed
1817
1834
 
1818
1835
  availabilityWarnings:
1819
1836
  node: Node {name} is inactive
@@ -1945,7 +1962,7 @@ cluster:
1945
1962
  pinganyunecs: Pinganyun ECS
1946
1963
  pnap: phoenixNAP
1947
1964
  rackspace: RackSpace
1948
- rancherkubernetesengine: RKE
1965
+ rancherkubernetesengine: RKE1
1949
1966
  rke2: RKE2
1950
1967
  rke: RKE1
1951
1968
  rkeWindows: Windows (RKE1 only)
@@ -5624,7 +5641,6 @@ tableHeaders:
5624
5641
  createdAt: Created At
5625
5642
  customVerbs: Custom Verbs
5626
5643
  description: Description
5627
- expires: Expires
5628
5644
  cpu: CPU
5629
5645
  currentReplicas: Current Replicas
5630
5646
  date: Date
@@ -5641,6 +5657,7 @@ tableHeaders:
5641
5657
  distinguisherMethod: Distinguisher Method
5642
5658
  effect: Effect
5643
5659
  endpoints: Endpoints
5660
+ expires: Expires
5644
5661
  firstSeen: First Seen
5645
5662
  fleetBundleType: Type
5646
5663
  flow: Flow
@@ -7719,6 +7736,11 @@ volumeClaimTemplate:
7719
7736
  manager:
7720
7737
  cloudCredentials:
7721
7738
  label: Cloud Credentials
7739
+ renew: Renew
7740
+ expired: Expired
7741
+ banners:
7742
+ expiring: "{count} Cloud {count, plural, =1 { Credential expires soon} other { Credentials expire soon}}, please Renew"
7743
+ expired: "{count} Cloud {count, plural, =1 { Credential has expired} other { Credentials have expired}}, please Renew"
7722
7744
  drivers:
7723
7745
  label: Drivers
7724
7746
  rkeTemplates:
@@ -105,8 +105,8 @@ export default {
105
105
  return null;
106
106
  }
107
107
 
108
- if (this.toRemove[0].doneLocationRemove) {
109
- return this.toRemove[0].doneLocationRemove;
108
+ if (this.toRemove[0].doneOverride) {
109
+ return this.toRemove[0].doneOverride;
110
110
  }
111
111
 
112
112
  const currentRoute = this.toRemove[0].currentRoute();
@@ -300,7 +300,12 @@ export default {
300
300
  },
301
301
  done() {
302
302
  if ( this.cachedDoneLocation && !isEmpty(this.cachedDoneLocation) ) {
303
- this.currentRouter.push(this.cachedDoneLocation);
303
+ // Only push if the route will change otherwise we'll get a `NavigationDuplicated` exception
304
+ const resolvedRoute = this.currentRouter.resolve(this.cachedDoneLocation);
305
+
306
+ if (resolvedRoute.resolved.fullPath !== this.$route.fullPath) {
307
+ this.currentRouter.push(this.cachedDoneLocation);
308
+ }
304
309
  }
305
310
  this.close();
306
311
  },
@@ -516,6 +516,7 @@ export default {
516
516
  <button
517
517
  v-if="isView"
518
518
  ref="actions"
519
+ data-testid="mathead-action-menu"
519
520
  aria-haspopup="true"
520
521
  type="button"
521
522
  class="btn role-multi-action actions"
@@ -171,7 +171,8 @@ export default {
171
171
  },
172
172
  bundle: {
173
173
  inStoreType: 'management',
174
- type: FLEET.BUNDLE
174
+ type: FLEET.BUNDLE,
175
+ opt: { excludeFields: ['metadata.managedFields', 'spec.resources'] },
175
176
  },
176
177
 
177
178
  bundleDeployment: {
@@ -480,7 +480,7 @@ export default {
480
480
  <template v-else>
481
481
  <span
482
482
  v-if="isVirtualCluster && isExplorer"
483
- v-tooltip="{content: harvesterVersion, placement: 'top'}"
483
+ v-clean-tooltip="{content: harvesterVersion, placement: 'top'}"
484
484
  class="clip text-muted ml-5"
485
485
  >
486
486
  (Harvester-{{ harvesterVersion }})
@@ -24,7 +24,7 @@ const iconClass = computed(() => {
24
24
  <template>
25
25
  <div class="icon-center">
26
26
  <i
27
- v-tooltip="ucFirst(userState)"
27
+ v-clean-tooltip="ucFirst(userState)"
28
28
  :class="iconClass"
29
29
  />
30
30
  </div>
@@ -42,7 +42,6 @@ export default {
42
42
  value: 'status.display.readyBundles',
43
43
  sort: 'status.summary.ready',
44
44
  search: false,
45
- align: 'center',
46
45
  },
47
46
  {
48
47
  name: 'reposReady',
@@ -50,7 +49,6 @@ export default {
50
49
  value: 'status.readyGitRepos',
51
50
  sort: 'status.summary.ready',
52
51
  search: false,
53
- align: 'center',
54
52
  },
55
53
  FLEET_SUMMARY,
56
54
  {
@@ -62,7 +60,6 @@ export default {
62
60
  formatter: 'LiveDate',
63
61
  formatterOpts: { addSuffix: true },
64
62
  width: 120,
65
- align: 'right'
66
63
  },
67
64
  AGE,
68
65
  ];
@@ -16,7 +16,6 @@ import {
16
16
  FLEET_REPO_PER_CLUSTER_STATE
17
17
 
18
18
  } from '@shell/config/table-headers';
19
- import { FLEET } from '@shell/config/labels-annotations';
20
19
  import { STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
21
20
 
22
21
  // i18n-ignore repoDisplay
@@ -118,12 +117,6 @@ export default {
118
117
  parseTargetMode(row) {
119
118
  return row.targetInfo?.mode === 'clusterGroup' ? this.t('fleet.gitRepo.warningTooltip.clusterGroup') : this.t('fleet.gitRepo.warningTooltip.cluster');
120
119
  },
121
-
122
- clusterViewResourceStatus(row) {
123
- return row.clusterResourceStatus.find((c) => {
124
- return c.metadata?.labels[FLEET.CLUSTER_NAME] === this.clusterId;
125
- });
126
- }
127
120
  },
128
121
  };
129
122
  </script>
@@ -0,0 +1,69 @@
1
+ <script>
2
+
3
+ export default {
4
+ props: {
5
+ value: {
6
+ type: [Number, String],
7
+ required: true
8
+ },
9
+
10
+ row: {
11
+ type: Object,
12
+ default: () => {
13
+ return {};
14
+ }
15
+ },
16
+
17
+ verbose: {
18
+ type: Boolean,
19
+ default: false,
20
+ }
21
+
22
+ },
23
+
24
+ computed: {
25
+ outputString() {
26
+ return this.verbose ? this.verboseOutputString : this.row.expiresString;
27
+ },
28
+
29
+ verboseOutputString() {
30
+ const expireData = this.row?.expireData;
31
+
32
+ if (expireData?.expired) {
33
+ return this.t('cluster.cloudCredentials.expired');
34
+ } else if (expireData?.expiring) {
35
+ return this.t('cluster.cloudCredentials.expiring', { expires: this.row.expiresString });
36
+ }
37
+
38
+ return null;
39
+ }
40
+ }
41
+ };
42
+ </script>
43
+
44
+ <template>
45
+ <div
46
+ v-if="outputString"
47
+ class="cloud-cred-expired"
48
+ :class="{ 'text-error': row.expireData.expired, 'text-warning': row.expireData.expiring}"
49
+ >
50
+ <div class="token-icon mr-5">
51
+ <i
52
+ class="icon"
53
+ :class="{'icon-error': row.expireData.expired, 'icon-warning': row.expireData.expiring}"
54
+ />
55
+ </div>
56
+ {{ outputString }}
57
+ </div>
58
+ </template>
59
+
60
+ <style lang="scss" scoped>
61
+ .cloud-cred-expired {
62
+ display: flex;
63
+ align-items: center;
64
+ .token-icon {
65
+ display: flex;
66
+ align-items: center;
67
+ }
68
+ }
69
+ </style>
@@ -25,12 +25,12 @@ export default {
25
25
  {{ row.machineProviderDisplay }}
26
26
  </span>
27
27
  </template>
28
- <template v-else-if="row.isCustom">
29
- {{ t('cluster.provider.custom') }}
30
- </template>
31
28
  <template v-else-if="row.isImported">
32
29
  {{ t('cluster.provider.imported') }}
33
30
  </template>
31
+ <template v-else-if="row.isCustom">
32
+ {{ t('cluster.provider.custom') }}
33
+ </template>
34
34
  <div class="text-muted">
35
35
  {{ row.provisionerDisplay }}
36
36
  </div>
@@ -11,7 +11,7 @@ export default {
11
11
  },
12
12
 
13
13
  value: {
14
- type: [String, Date],
14
+ type: [String, Date, Number],
15
15
  default: ''
16
16
  },
17
17
 
@@ -188,12 +188,16 @@ export default {
188
188
  }
189
189
  },
190
190
  // since the Header is a "persistent component" we need to update it at every route change...
191
- $route(nue) {
192
- if (nue) {
193
- this.extensionHeaderActions = getApplicableExtensionEnhancements(this, ExtensionPoint.ACTION, ActionLocation.HEADER, nue);
191
+ $route: {
192
+ handler(nue) {
193
+ if (nue) {
194
+ this.extensionHeaderActions = getApplicableExtensionEnhancements(this, ExtensionPoint.ACTION, ActionLocation.HEADER, nue);
194
195
 
195
- this.navHeaderRight = this.$plugin?.getDynamic('component', 'NavHeaderRight');
196
- }
196
+ this.navHeaderRight = this.$plugin?.getDynamic('component', 'NavHeaderRight');
197
+ }
198
+ },
199
+ immediate: true,
200
+ deep: true,
197
201
  }
198
202
  },
199
203