@rancher/shell 0.3.27 → 0.3.29

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 (55) hide show
  1. package/assets/translations/en-us.yaml +19 -21
  2. package/assets/translations/zh-hans.yaml +0 -23
  3. package/chart/gatekeeper.vue +2 -11
  4. package/chart/istio.vue +1 -10
  5. package/chart/logging/index.vue +2 -11
  6. package/chart/monitoring/grafana/index.vue +2 -2
  7. package/chart/monitoring/index.vue +1 -9
  8. package/chart/rancher-backup/index.vue +1 -9
  9. package/components/AsyncButton.vue +9 -0
  10. package/components/Carousel.vue +2 -1
  11. package/components/SortableTable/THead.vue +7 -9
  12. package/components/SortableTable/index.vue +1 -2
  13. package/components/fleet/FleetStatus.vue +3 -3
  14. package/components/fleet/FleetSummary.vue +32 -27
  15. package/components/formatter/ClusterProvider.vue +1 -18
  16. package/components/nav/WindowManager/ContainerLogs.vue +22 -19
  17. package/config/product/manager.js +0 -13
  18. package/config/types.js +0 -4
  19. package/detail/provisioning.cattle.io.cluster.vue +2 -1
  20. package/edit/management.cattle.io.project.vue +1 -52
  21. package/edit/management.cattle.io.setting.vue +31 -2
  22. package/edit/provisioning.cattle.io.cluster/Basics.vue +6 -107
  23. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -3
  24. package/edit/provisioning.cattle.io.cluster/rke2.vue +3 -128
  25. package/edit/workload/index.vue +2 -1
  26. package/machine-config/__tests__/vmwarevsphere.test.ts +72 -0
  27. package/machine-config/vmwarevsphere.vue +68 -13
  28. package/middleware/authenticated.js +4 -2
  29. package/models/__tests__/management.cattle.io.cluster.test.ts +19 -0
  30. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +90 -0
  31. package/models/cluster.x-k8s.io.machine.js +1 -1
  32. package/models/management.cattle.io.cluster.js +4 -0
  33. package/models/management.cattle.io.project.js +0 -36
  34. package/models/management.cattle.io.setting.js +11 -7
  35. package/models/provisioning.cattle.io.cluster.js +16 -4
  36. package/package.json +2 -1
  37. package/pages/auth/setup.vue +38 -1
  38. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
  39. package/pages/c/_cluster/apps/charts/index.vue +0 -15
  40. package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
  41. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  42. package/pages/c/_cluster/explorer/index.vue +0 -47
  43. package/pages/c/_cluster/manager/pages/_page.vue +4 -5
  44. package/rancher-components/components/StringList/StringList.test.ts +270 -0
  45. package/rancher-components/components/StringList/StringList.vue +57 -18
  46. package/store/prefs.js +0 -3
  47. package/types/shell/index.d.ts +13 -7
  48. package/utils/custom-validators.js +0 -2
  49. package/utils/error.js +16 -1
  50. package/utils/validators/formRules/__tests__/index.test.ts +49 -4
  51. package/utils/validators/formRules/index.ts +12 -9
  52. package/utils/validators/setting.js +6 -10
  53. package/components/ChartPsp.vue +0 -76
  54. package/components/__tests__/ChartPsp.test.ts +0 -75
  55. package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
@@ -691,6 +691,15 @@ asyncButton:
691
691
  successIcon: checkmark
692
692
  waiting: ''
693
693
  waitingIcon: refresh
694
+ manual-refresh:
695
+ action: ''
696
+ actionIcon: refresh
697
+ error: ''
698
+ errorIcon: error
699
+ success: ''
700
+ successIcon: checkmark
701
+ waiting: ''
702
+ waitingIcon: refresh
694
703
  remove:
695
704
  action: Remove
696
705
  success: Removed
@@ -851,9 +860,6 @@ catalog:
851
860
  keywords: Keywords
852
861
  errors:
853
862
  clusterToolExists: This chart has a fixed namespace and name. A matching <a href="{url}">application</a> has been found and any changes will be made to it.
854
- banner:
855
- legacy: 'PSP Removal: Before upgrading a cluster to Kubernetes 1.25+, please ensure you review your Helm applications for Pod Security Policies and update them accordingly'
856
- enablePSP: Enable Pod Security Policies
857
863
  global: Global
858
864
  charts:
859
865
  all: All
@@ -1528,6 +1534,9 @@ cluster:
1528
1534
  host:
1529
1535
  label: Host
1530
1536
  note: Specific host to create VM on (leave blank for standalone ESXi or for cluster with DRS)
1537
+ gracefulShutdownTimeout:
1538
+ label: Graceful Shutdown Timeout
1539
+ note: The time in seconds to wait before forcing deleting VMs in the infrastructure. Zero means disable graceful shutdown.
1531
1540
  instanceOptions:
1532
1541
  label: Instance Options
1533
1542
  description: Choose the size and OS of the virtual machine
@@ -1673,10 +1682,7 @@ cluster:
1673
1682
  os: 'You are attempting to add a {newOS} worker node to a cluster with one or more {existingOS} worker nodes: some installed apps may need to be upgraded or removed.'
1674
1683
  rke2-k3-reprovisioning: 'Making changes to cluster configuration may result in nodes reprovisioning. For more information see the <a target="blank" href="{docsBase}/cluster-provisioning/rke-clusters/behavior-differences-between-rke1-and-rke2/" target="_blank" rel="noopener nofollow">documentation</a>.'
1675
1684
  desiredNodeGroupWarning: There are 0 nodes available to run the cluster agent. The cluster will not become active until at least one node is available.
1676
- invalidPsps: You have one or more PodSecurityPolicy resource(s) in this cluster. Pod Security Policies are not available in Kubernetes v1.25 and will be automatically removed.
1677
1685
  haveArgInfo: Configuration information is not available for the selected Kubernetes version. The options available on this screen will be limited; you may want to use the YAML editor.
1678
- deprecatedPsp: Pod Security Policies are deprecated as of Kubernetes v1.21, and have been removed in Kubernetes v1.25.
1679
- removedPsp: Pod Security Policies have been removed in Kubernetes v1.25. Use Pod Security Admission instead.
1680
1686
  cloudProviderAddConfig: 'On Kubernetes 1.27 or greater, the Amazon Cloud Provider requires additional configuration. See <a href="https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon" target="_blank" rel="noopener noreferrer nofollow">the documentation</a> for more information.'
1681
1687
  machinePoolError: |-
1682
1688
  {count, plural,
@@ -1843,9 +1849,6 @@ cluster:
1843
1849
  cisOverride: Changing this setting may affect cluster security as it overrides default CIS settings
1844
1850
  cisUnsupported: The selected Kubernetes Version no longer supports CIS Profile "{cisProfile}". Please select a supported profile. We recommend reviewing the <a href="https://docs.rke2.io/security/hardening_guide" target="_blank" rel="noopener noreferrer nofollow">documentation</a> to evaluate the impact of changing the CIS Profile.
1845
1851
  modal:
1846
- pspChange:
1847
- title: Pod Security Policy deprecation
1848
- body: <p>Kubernetes has removed support for Pod Security Policies (PSPs) starting with version 1.25. If your cluster has PodSecurityPolicy admission controller enabled via "kube-apiserver-arg.enable-admission-plugins" in Cluster YAML, it has to be <i>manually</i> removed before proceeding with the upgrade. Additionally, any PSPs that may be present in the cluster will no longer be available/enforced. Do you want to proceed?</p>
1849
1852
  editYamlMachinePool:
1850
1853
  title: Save Machine Configurations
1851
1854
  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.
@@ -2767,8 +2770,6 @@ landing:
2767
2770
  whatsNewLink: "What's new in 2.8"
2768
2771
  learnMore: Learn More
2769
2772
  support: Support
2770
- psps: PSPs
2771
- deprecatedPsp: Pod Security Policies are deprecated as of Kubernetes v1.21, and have been removed in Kubernetes v1.25. You have one or more PodSecurityPolicy resource(s) in this cluster.
2772
2773
  community:
2773
2774
  title: Community Support
2774
2775
  docs: Docs
@@ -4342,10 +4343,6 @@ project:
4342
4343
  vmDefaultResourceLimit: VM Default Resource Limit
4343
4344
  resourceQuotas: Resource Quotas
4344
4345
  haveOneOwner: There must be at least one member with the Owner role.
4345
- psp:
4346
- default: Cluster Default
4347
- label: Pod Security Policy
4348
- current: "{value} (Current)"
4349
4346
 
4350
4347
 
4351
4348
  projectMembers:
@@ -4651,9 +4648,6 @@ rbac:
4651
4648
  nodetemplates-manage:
4652
4649
  label: Manage Node Templates
4653
4650
  description: Allows the user to define, edit, and remove Node Templates.
4654
- podsecuritypolicytemplates-manage:
4655
- label: Manage Pod Security Policies (PSPs)
4656
- description: Allows the user to define, edit, and remove PSPs.
4657
4651
  roles-manage:
4658
4652
  label: Manage Roles
4659
4653
  description: Allows the user to define, edit, and remove Role definitions.
@@ -5755,7 +5749,10 @@ validation:
5755
5749
  required: 'Port Rule [{position}] - Target Port is required'
5756
5750
  setting:
5757
5751
  serverUrl:
5758
- https: server-url must be https.
5752
+ https: Server URL must be https.
5753
+ localhost: If the Server URL is internal to the Rancher server (e.g. localhost) the downstream clusters may not be able to communicate with Rancher.
5754
+ trailingForwardSlash: Server URL should not have a trailing forward slash.
5755
+ url: Server URL must be an URL.
5759
5756
  stringLength:
5760
5757
  between: '"{key}" should be between {min} and {max} {max, plural, =1 {character} other {characters}}'
5761
5758
  exactly: '"{key}" should be {count, plural, =1 {# character} other {# characters}}'
@@ -5873,7 +5870,9 @@ workload:
5873
5870
  exec: Command run inside the container exits with status 0
5874
5871
  image: Container Image
5875
5872
  imagePullPolicy: Pull Policy
5876
- imagePullSecrets: Pull Secrets
5873
+ imagePullSecrets:
5874
+ label: Pull Secrets
5875
+ tooltip: Must be of Type `kubernetes.io/dockercfg` or `kubernetes.io/dockerconfigjson`
5877
5876
  init: Init Container
5878
5877
  lifecycleHook:
5879
5878
  postStart:
@@ -7398,7 +7397,6 @@ legacy:
7398
7397
  globalDnsProviders: Global DNS Providers
7399
7398
  notifiers: Notifiers
7400
7399
  monitoring: Monitoring
7401
- psps: Pod Security Policy Templates
7402
7400
  secrets: Secrets
7403
7401
 
7404
7402
  project:
@@ -845,9 +845,6 @@ catalog:
845
845
  keywords: 关键词
846
846
  errors:
847
847
  clusterToolExists: 此 Chart 含有固定的命名空间和名称。找到一个匹配的 <a href="{url}">应用</a>,任何修改都将应用于此应用。
848
- banner:
849
- legacy: 'PSP 删除:在将集群升级到 Kubernetes 1.25+ 之前,请确保你针对 PSP 检查了 Helm 应用程序并相应进行更新'
850
- enablePSP: 启用 Pod 安全策略
851
848
  global: 全局
852
849
  charts:
853
850
  all: 全部
@@ -1673,10 +1670,7 @@ cluster:
1673
1670
  os: '你正在将 {newOS} worker 节点添加到具有一个或多个 {existingOS} worker 节点的集群。你可能需要升级或删除某些已安装的应用。'
1674
1671
  rke2-k3-reprovisioning: '更改集群配置可能导致节点重新配置。详情请参见 <a target="blank" href="{docsBase}/cluster-provisioning/rke-clusters/behavior-differences-between-rke1-and-rke2/" target="_blank" rel="noopener nofollow">文档</a>。'
1675
1672
  desiredNodeGroupWarning: 没有可用于运行 Cluster Agent 的节点。要让集群变为 Active 状态,至少需要有 1 个可用的节点。
1676
- invalidPsps: 你在此集群中有一个或多个 PSP 资源。Pod 安全策略在 Kubernetes v1.25 中不可用并将自动删除。
1677
1673
  haveArgInfo: 所选 Kubernetes 版本的配置信息不可用。此屏幕中可用的选项将受到限制,你可能需要使用 YAML 编辑器。
1678
- deprecatedPsp: Pod 安全策略自 Kubernetes v1.21 起已弃用,并已在 Kubernetes v1.25 中删除。
1679
- removedPsp: Pod 安全策略已在 Kubernetes v1.25 中删除,请改用 Pod Security Admission。
1680
1674
  rkeTemplateUpgrade: 模板修订版 {name} 可用于升级
1681
1675
 
1682
1676
  availabilityWarnings:
@@ -1835,10 +1829,6 @@ cluster:
1835
1829
  psaChange: PSACT 现在自动设置为 Rancher 默认值
1836
1830
  cisOverride: 更改此设置可能会影响集群安全,因为它会覆盖默认的 CIS 设置
1837
1831
  cisUnsupported: 所选 Kubernetes 版本不再支持 CIS 配置文件 “{cisProfile}”,请选择支持的配置文件。建议你查看<a href="https://docs.rke2.io/security/hardening_guide" target="_blank" rel="noopener noreferrer nofollow">文档</a>评估更改 CIS 配置文件的影响。
1838
- modal:
1839
- pspChange:
1840
- title: 弃用 Pod 安全策略
1841
- body: <p>从 v1.25 版开始,Kubernetes 已经取消了对 Pod 安全策略 (PSP) 的支持。如果你的集群通过集群 YAML 中的 “kube-apiserver-arg.enable-admission-plugins” 启用了 PodSecurityPolicy 准入控制器,你必须在继续升级之前<i>手动</i>删除它。此外,集群中存在的任何 PSP 将不再可用或强制执行。是否继续操作?</p>
1842
1832
  snapshots:
1843
1833
  suffix: 每个节点的快照
1844
1834
  systemService:
@@ -2738,8 +2728,6 @@ landing:
2738
2728
  whatsNewLink: "2.8 的新功能"
2739
2729
  learnMore: 了解更多
2740
2730
  support: 支持
2741
- psps: PSP
2742
- deprecatedPsp: Pod 安全策略自 Kubernetes v1.21 起已弃用,并已在 Kubernetes v1.25 中删除。你在此集群中有一个或多个 PSP 资源。
2743
2731
  community:
2744
2732
  title: 社区支持
2745
2733
  docs: Rancher 官方文档
@@ -4314,10 +4302,6 @@ project:
4314
4302
  vmDefaultResourceLimit: 虚拟机默认资源限制
4315
4303
  resourceQuotas: 资源配额
4316
4304
  haveOneOwner: 至少有一名成员需要具有所有者角色。
4317
- psp:
4318
- default: 集群默认
4319
- label: Pod 安全策略
4320
- current: "{value} (Current)"
4321
4305
 
4322
4306
 
4323
4307
  projectMembers:
@@ -4622,9 +4606,6 @@ rbac:
4622
4606
  nodetemplates-manage:
4623
4607
  label: 管理节点模板
4624
4608
  description: 允许用户定义、编辑和移除节点模板。
4625
- podsecuritypolicytemplates-manage:
4626
- label: 管理 Pod 安全策略(PSP)
4627
- description: 允许用户定义、编辑和移除 Pod 安全策略。
4628
4609
  roles-manage:
4629
4610
  label: 管理角色
4630
4611
  description: 允许用户定义、编辑和移除角色定义。
@@ -7379,7 +7360,6 @@ legacy:
7379
7360
  globalDnsProviders: 全局 DNS 提供商
7380
7361
  notifiers: Notifiers
7381
7362
  monitoring: 监控
7382
- psps: Pod 安全策略模板
7383
7363
  secrets: 密文
7384
7364
 
7385
7365
  project:
@@ -7460,9 +7440,6 @@ charts:
7460
7440
  service.ui.type:
7461
7441
  label: Longhorn UI 服务
7462
7442
  description: 定义 Longhorn UI 服务类型
7463
- enablePSP:
7464
- label: Pod 安全策略
7465
- description: 为 Longhorn 工作负载设置 Pod 安全策略
7466
7443
  csi.kubeletRootDir:
7467
7444
  label: Kubelet 根目录
7468
7445
  description: 指定 kubelet root-dir。如留空,则自动检测。
@@ -1,14 +1,11 @@
1
1
  <script>
2
2
  import UnitInput from '@shell/components/form/UnitInput';
3
- import ChartPsp from '@shell/components/ChartPsp';
4
3
  import { Checkbox } from '@components/Form/Checkbox';
5
4
  import { mapGetters } from 'vuex';
6
5
 
7
6
  export default {
8
- components: {
9
- UnitInput, ChartPsp, Checkbox
10
- },
11
- props: {
7
+ components: { UnitInput, Checkbox },
8
+ props: {
12
9
  value: {
13
10
  type: Object,
14
11
  default: () => {
@@ -60,12 +57,6 @@ export default {
60
57
  </div>
61
58
  </div>
62
59
 
63
- <!-- Conditionally display PSP checkbox -->
64
- <ChartPsp
65
- :value="value"
66
- :cluster="currentCluster"
67
- />
68
-
69
60
  <template v-if="crdValues">
70
61
  <!-- gatekeeper versions <1.0.2 do not have this option -->
71
62
  <Checkbox
package/chart/istio.vue CHANGED
@@ -6,7 +6,6 @@ import YamlEditor from '@shell/components/YamlEditor';
6
6
  import { mapGetters } from 'vuex';
7
7
  import FileSelector from '@shell/components/form/FileSelector';
8
8
  import { Banner } from '@components/Banner';
9
- import ChartPsp from '@shell/components/ChartPsp';
10
9
 
11
10
  const defaultOverlayFile = `#apiVersion: install.istio.io/v1alpha1
12
11
  #kind: IstioOperator
@@ -54,8 +53,7 @@ export default {
54
53
  Checkbox,
55
54
  FileSelector,
56
55
  YamlEditor,
57
- Banner,
58
- ChartPsp
56
+ Banner
59
57
  },
60
58
 
61
59
  props: {
@@ -140,13 +138,6 @@ export default {
140
138
 
141
139
  <template>
142
140
  <div>
143
- <!-- Conditionally display PSP checkbox -->
144
- <ChartPsp
145
- :value="value"
146
- :title="t('catalog.chart.global')"
147
- :cluster="currentCluster"
148
- />
149
-
150
141
  <h3>
151
142
  {{ t('istio.titles.components') }}
152
143
  </h3>
@@ -2,13 +2,10 @@
2
2
  import { mapGetters } from 'vuex';
3
3
  import { LabeledInput } from '@components/Form/LabeledInput';
4
4
  import { Checkbox } from '@components/Form/Checkbox';
5
- import ChartPsp from '@shell/components/ChartPsp';
6
5
 
7
6
  export default {
8
- components: {
9
- Checkbox, LabeledInput, ChartPsp
10
- },
11
- props: {
7
+ components: { Checkbox, LabeledInput },
8
+ props: {
12
9
  value: {
13
10
  type: Object,
14
11
  default: () => {
@@ -83,11 +80,5 @@ export default {
83
80
  />
84
81
  </div>
85
82
  </div>
86
-
87
- <!-- Conditionally display PSP checkbox -->
88
- <ChartPsp
89
- :value="value"
90
- :cluster="currentCluster"
91
- />
92
83
  </div>
93
84
  </template>
@@ -136,7 +136,7 @@ export default {
136
136
  newValsOut = {
137
137
  accessModes: null,
138
138
  storageClassName: null,
139
- size: null,
139
+ size: '10Gi',
140
140
  subPath: null,
141
141
  type: 'pvc',
142
142
  annotations: null,
@@ -148,7 +148,7 @@ export default {
148
148
  newValsOut = {
149
149
  accessModes: null,
150
150
  storageClassName: null,
151
- size: null,
151
+ size: '10Gi',
152
152
  subPath: null,
153
153
  type: 'statefulset',
154
154
  enabled: true,
@@ -12,7 +12,6 @@ import { LabeledInput } from '@components/Form/LabeledInput';
12
12
  import Loading from '@shell/components/Loading';
13
13
  import Prometheus from '@shell/chart/monitoring/prometheus';
14
14
  import Tab from '@shell/components/Tabbed/Tab';
15
- import ChartPsp from '@shell/components/ChartPsp';
16
15
 
17
16
  import { allHash } from '@shell/utils/promise';
18
17
  import { STORAGE_CLASS, PVC, SECRET, WORKLOAD_TYPES } from '@shell/config/types';
@@ -26,8 +25,7 @@ export default {
26
25
  LabeledInput,
27
26
  Loading,
28
27
  Prometheus,
29
- Tab,
30
- ChartPsp
28
+ Tab
31
29
  },
32
30
 
33
31
  hasTabs: true,
@@ -265,12 +263,6 @@ export default {
265
263
  />
266
264
  </div>
267
265
  </div>
268
-
269
- <!-- Conditionally display PSP checkbox -->
270
- <ChartPsp
271
- :value="value"
272
- :cluster="currentCluster"
273
- />
274
266
  </div>
275
267
  </Tab>
276
268
  <Tab
@@ -10,7 +10,6 @@ import { allHash } from '@shell/utils/promise';
10
10
  import { STORAGE_CLASS, SECRET, PV } from '@shell/config/types';
11
11
  import { mapGetters } from 'vuex';
12
12
  import { STORAGE } from '@shell/config/labels-annotations';
13
- import ChartPsp from '@shell/components/ChartPsp';
14
13
 
15
14
  export default {
16
15
  components: {
@@ -19,8 +18,7 @@ export default {
19
18
  S3,
20
19
  LabeledInput,
21
20
  LabeledSelect,
22
- Banner,
23
- ChartPsp
21
+ Banner
24
22
  },
25
23
 
26
24
  hasTabs: true,
@@ -169,12 +167,6 @@ export default {
169
167
  label="Chart Options"
170
168
  name="chartOptions"
171
169
  >
172
- <!-- Conditionally display PSP checkbox -->
173
- <ChartPsp
174
- :value="value"
175
- :cluster="currentCluster"
176
- />
177
-
178
170
  <Banner
179
171
  color="info"
180
172
  :label="t('backupRestoreOperator.deployment.storage.tip')"
@@ -273,6 +273,7 @@ export default Vue.extend<{ phase: string}, any, any, any>({
273
273
  :data-testid="componentTestid + '-async-button'"
274
274
  @click="clicked"
275
275
  >
276
+ <span v-if="mode === 'manual-refresh'">{{ t('action.refresh') }}</span>
276
277
  <i
277
278
  v-if="displayIcon"
278
279
  v-clean-tooltip="tooltip"
@@ -285,3 +286,11 @@ export default Vue.extend<{ phase: string}, any, any, any>({
285
286
  />
286
287
  </button>
287
288
  </template>
289
+
290
+ <style lang="scss" scoped>
291
+ // refresh mode has icon + text. We need to fix the positioning of the icon and sizing
292
+ .manual-refresh i {
293
+ margin: 0 0 0 8px !important;
294
+ font-size: 1rem !important;
295
+ }
296
+ </style>
@@ -181,7 +181,7 @@ export default {
181
181
  :label="slide.repoName"
182
182
  color="slider-badge mb-20"
183
183
  />
184
- <h1>{{ slide.chartNameDisplay }} {{ i + 1 }}</h1>
184
+ <h1>{{ slide.chartNameDisplay }}</h1>
185
185
  <p>{{ slide.chartDescription }}</p>
186
186
  </div>
187
187
  </div>
@@ -282,6 +282,7 @@ export default {
282
282
  .slide-content {
283
283
  display: flex;
284
284
  padding: 30px;
285
+ height: 100%;
285
286
 
286
287
  .slide-img {
287
288
  width: 150px;
@@ -162,15 +162,13 @@ export default {
162
162
  const menu = document.querySelector('.table-options-container');
163
163
  const elem = document.querySelector('.table-options-btn');
164
164
 
165
- if (!this.tableColsMenuPosition) {
166
- this.tableColsMenuPosition = fitOnScreen(menu, ev || elem, {
167
- overlapX: true,
168
- fudgeX: 26,
169
- fudgeY: -22,
170
- positionX: CENTER,
171
- positionY: AUTO,
172
- });
173
- }
165
+ this.tableColsMenuPosition = fitOnScreen(menu, ev || elem, {
166
+ overlapX: true,
167
+ fudgeX: 326,
168
+ fudgeY: -22,
169
+ positionX: CENTER,
170
+ positionY: AUTO,
171
+ });
174
172
 
175
173
  // toggle visibility
176
174
  this.tableColsOptionsVisibility = !this.tableColsOptionsVisibility;
@@ -1026,9 +1026,8 @@ export default {
1026
1026
  <slot name="header-right" />
1027
1027
  <AsyncButton
1028
1028
  v-if="isTooManyItemsToAutoUpdate"
1029
- v-clean-tooltip="t('performance.manualRefresh.buttonTooltip')"
1030
1029
  class="manual-refresh"
1031
- mode="refresh"
1030
+ mode="manual-refresh"
1032
1031
  :current-phase="currentPhase"
1033
1032
  @click="debouncedRefreshTableData"
1034
1033
  />
@@ -1,7 +1,7 @@
1
1
  <script>
2
2
  import { sortBy } from '@shell/utils/sort';
3
3
  import { get } from '@shell/utils/object';
4
- import { stateSort } from '@shell/plugins/dashboard-store/resource-class';
4
+ import { stateSort, STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
5
5
 
6
6
  export default {
7
7
 
@@ -50,8 +50,8 @@ export default {
50
50
  computed: {
51
51
  meta() {
52
52
  return {
53
- total: this.values.map((x) => x.value).reduce((a, b) => a + b),
54
- readyCount: this.values.filter((x) => x.label === 'Success' || x.label === 'Ready').map((x) => x.value).reduce((a, b) => a + b)
53
+ total: this.values.map((x) => x.value).reduce((a, b) => a + b, 0),
54
+ readyCount: this.values.filter((x) => x.status === STATES_ENUM.SUCCESS || x.status === STATES_ENUM.READY).map((x) => x.value).reduce((a, b) => a + b, 0)
55
55
  };
56
56
  },
57
57
 
@@ -6,47 +6,52 @@ import FleetStatus from '@shell/components/fleet/FleetStatus';
6
6
  const getResourceDefaultState = (labelGetter, stateKey) => {
7
7
  return {
8
8
  ready: {
9
- count: 0,
10
- color: STATES[STATES_ENUM.READY].color,
11
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.READY }`, null, STATES[STATES_ENUM.READY].label )
9
+ count: 0,
10
+ color: STATES[STATES_ENUM.READY].color,
11
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.READY }`, null, STATES[STATES_ENUM.READY].label ),
12
+ status: STATES_ENUM.READY
12
13
  },
13
14
  info: {
14
- count: 0,
15
- color: STATES[STATES_ENUM.INFO].color,
16
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.INFO }`, null, STATES[STATES_ENUM.INFO].label )
15
+ count: 0,
16
+ color: STATES[STATES_ENUM.INFO].color,
17
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.INFO }`, null, STATES[STATES_ENUM.INFO].label ),
18
+ status: STATES_ENUM.INFO
17
19
  },
18
20
  warning: {
19
- count: 0,
20
- color: STATES[STATES_ENUM.WARNING].color,
21
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.WARNING }`, null, STATES[STATES_ENUM.WARNING].label )
21
+ count: 0,
22
+ color: STATES[STATES_ENUM.WARNING].color,
23
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.WARNING }`, null, STATES[STATES_ENUM.WARNING].label ),
24
+ status: STATES_ENUM.WARNING
22
25
  },
23
26
  notready: {
24
- count: 0,
25
- color: STATES[STATES_ENUM.NOT_READY].color,
26
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.NOT_READY }`, null, STATES[STATES_ENUM.NOT_READY].label )
27
+ count: 0,
28
+ color: STATES[STATES_ENUM.NOT_READY].color,
29
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.NOT_READY }`, null, STATES[STATES_ENUM.NOT_READY].label ),
30
+ status: STATES_ENUM.NOT_READY
27
31
  },
28
32
  error: {
29
- count: 0,
30
- color: STATES[STATES_ENUM.ERROR].color,
31
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.ERROR }`, null, STATES[STATES_ENUM.ERROR].label )
32
-
33
+ count: 0,
34
+ color: STATES[STATES_ENUM.ERROR].color,
35
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.ERROR }`, null, STATES[STATES_ENUM.ERROR].label ),
36
+ status: STATES_ENUM.ERROR
33
37
  },
34
38
  errapplied: {
35
- count: 0,
36
- color: STATES[STATES_ENUM.ERR_APPLIED].color,
37
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.ERR_APPLIED }`, null, STATES[STATES_ENUM.ERR_APPLIED].label )
38
-
39
+ count: 0,
40
+ color: STATES[STATES_ENUM.ERR_APPLIED].color,
41
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.ERR_APPLIED }`, null, STATES[STATES_ENUM.ERR_APPLIED].label ),
42
+ status: STATES_ENUM.ERR_APPLIED,
39
43
  },
40
44
  waitapplied: {
41
- count: 0,
42
- color: STATES[STATES_ENUM.WAIT_APPLIED].color,
43
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.WAIT_APPLIED }`, null, STATES[STATES_ENUM.WAIT_APPLIED].label )
44
-
45
+ count: 0,
46
+ color: STATES[STATES_ENUM.WAIT_APPLIED].color,
47
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.WAIT_APPLIED }`, null, STATES[STATES_ENUM.WAIT_APPLIED].label ),
48
+ status: STATES_ENUM.WAIT_APPLIED
45
49
  },
46
50
  unknown: {
47
- count: 0,
48
- color: STATES[STATES_ENUM.UNKNOWN].color,
49
- label: labelGetter(`${ stateKey }.${ STATES_ENUM.UNKNOWN }`, null, STATES[STATES_ENUM.UNKNOWN].label )
51
+ count: 0,
52
+ color: STATES[STATES_ENUM.UNKNOWN].color,
53
+ label: labelGetter(`${ stateKey }.${ STATES_ENUM.UNKNOWN }`, null, STATES[STATES_ENUM.UNKNOWN].label ),
54
+ status: STATES_ENUM.UNKNOWN
50
55
  }
51
56
  };
52
57
  };
@@ -6,23 +6,6 @@ export default {
6
6
  required: true
7
7
  },
8
8
  },
9
- data(props) {
10
- const mgmt = props.row?.mgmt;
11
-
12
- return {
13
- // The isImported getter on the provisioning cluster
14
- // model doesn't work for imported K3s clusters, in
15
- // which case it returns 'k3s' instead of 'imported.'
16
- // This is the workaround.
17
- isImported: mgmt?.providerForEmberParam === 'import' ||
18
- // when imported cluster is GKE
19
- !!mgmt?.spec?.gkeConfig?.imported ||
20
- // or AKS
21
- !!mgmt?.spec?.aksConfig?.imported ||
22
- // or EKS
23
- !!mgmt?.spec?.eksConfig?.imported
24
- };
25
- },
26
9
  };
27
10
  </script>
28
11
 
@@ -45,7 +28,7 @@ export default {
45
28
  <template v-else-if="row.isCustom">
46
29
  {{ t('cluster.provider.custom') }}
47
30
  </template>
48
- <template v-else-if="isImported">
31
+ <template v-else-if="row.isImported">
49
32
  {{ t('cluster.provider.imported') }}
50
33
  </template>
51
34
  <div class="text-muted">
@@ -274,33 +274,36 @@ export default {
274
274
  });
275
275
 
276
276
  this.socket.addEventListener(EVENT_MESSAGE, (e) => {
277
- const line = base64Decode(e.detail.data);
277
+ const data = base64Decode(e.detail.data);
278
278
 
279
- let msg = line;
280
- let time = null;
279
+ // Websocket message may contain multiple lines - loop through each line, one by one
280
+ data.split('\n').forEach((line) => {
281
+ let msg = line;
282
+ let time = null;
281
283
 
282
- const idx = line.indexOf(' ');
284
+ const idx = line.indexOf(' ');
283
285
 
284
- if ( idx > 0 ) {
285
- const timeStr = line.substr(0, idx);
286
- const date = new Date(timeStr);
286
+ if ( idx > 0 ) {
287
+ const timeStr = line.substr(0, idx);
288
+ const date = new Date(timeStr);
287
289
 
288
- if ( !isNaN(date.getSeconds()) ) {
289
- time = date.toISOString();
290
- msg = line.substr(idx + 1);
290
+ if ( !isNaN(date.getSeconds()) ) {
291
+ time = date.toISOString();
292
+ msg = line.substr(idx + 1);
293
+ }
291
294
  }
292
- }
293
295
 
294
- const parsedLine = {
295
- id: lastId++,
296
- msg: ansiup.ansi_to_html(msg),
297
- rawMsg: msg,
298
- time,
299
- };
296
+ const parsedLine = {
297
+ id: lastId++,
298
+ msg: ansiup.ansi_to_html(msg),
299
+ rawMsg: msg,
300
+ time,
301
+ };
300
302
 
301
- Object.freeze(parsedLine);
303
+ Object.freeze(parsedLine);
302
304
 
303
- this.backlog.push(parsedLine);
305
+ this.backlog.push(parsedLine);
306
+ });
304
307
  });
305
308
 
306
309
  this.socket.connect();
@@ -54,22 +54,10 @@ export function init(store) {
54
54
  route: { name: 'c-cluster-manager-cloudCredential' },
55
55
  });
56
56
 
57
- virtualType({
58
- labelKey: 'legacy.psps',
59
- name: 'pod-security-policies',
60
- group: 'Root',
61
- namespaced: false,
62
- weight: 5,
63
- icon: 'folder',
64
- route: { name: 'c-cluster-manager-pages-page', params: { cluster: 'local', page: 'pod-security-policies' } },
65
- exact: true
66
- });
67
-
68
57
  basicType([
69
58
  CAPI.RANCHER_CLUSTER,
70
59
  'cloud-credentials',
71
60
  'drivers',
72
- 'pod-security-policies',
73
61
  ]);
74
62
 
75
63
  configureType(CAPI.RANCHER_CLUSTER, {
@@ -131,7 +119,6 @@ export function init(store) {
131
119
  CAPI.MACHINE_SET,
132
120
  CAPI.MACHINE,
133
121
  CATALOG.CLUSTER_REPO,
134
- 'pod-security-policies',
135
122
  MANAGEMENT.PSA
136
123
  ], 'advanced');
137
124