@rancher/shell 0.3.26 → 0.3.28

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 (99) hide show
  1. package/assets/translations/en-us.yaml +8 -23
  2. package/assets/translations/zh-hans.yaml +2 -26
  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/index.vue +1 -9
  7. package/chart/rancher-backup/index.vue +1 -9
  8. package/components/AlertTable.vue +8 -6
  9. package/components/Carousel.vue +2 -1
  10. package/components/EmberPage.vue +2 -2
  11. package/components/EtcdInfoBanner.vue +12 -2
  12. package/components/GlobalRoleBindings.vue +10 -0
  13. package/components/GrafanaDashboard.vue +8 -3
  14. package/components/Wizard.vue +17 -1
  15. package/components/auth/RoleDetailEdit.vue +17 -1
  16. package/components/form/ArrayList.vue +20 -11
  17. package/components/form/__tests__/ArrayList.test.ts +44 -0
  18. package/components/formatter/ClusterProvider.vue +1 -18
  19. package/components/nav/Header.vue +5 -4
  20. package/components/nav/TopLevelMenu.vue +38 -15
  21. package/components/nav/WindowManager/ContainerLogs.vue +22 -19
  22. package/components/nav/__tests__/TopLevelMenu.test.ts +120 -0
  23. package/components/nav/__tests__/Type.test.ts +139 -0
  24. package/config/private-label.js +1 -1
  25. package/config/product/manager.js +0 -13
  26. package/config/settings.ts +0 -2
  27. package/config/types.js +0 -4
  28. package/core/types.ts +11 -4
  29. package/edit/management.cattle.io.project.vue +1 -52
  30. package/edit/management.cattle.io.setting.vue +31 -2
  31. package/edit/provisioning.cattle.io.cluster/Basics.vue +19 -107
  32. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  33. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -3
  34. package/edit/provisioning.cattle.io.cluster/rke2.vue +3 -128
  35. package/edit/workload/mixins/workload.js +14 -4
  36. package/middleware/authenticated.js +4 -2
  37. package/models/__tests__/management.cattle.io.cluster.test.ts +19 -0
  38. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +90 -0
  39. package/models/cluster.x-k8s.io.machine.js +1 -1
  40. package/models/fleet.cattle.io.cluster.js +11 -1
  41. package/models/management.cattle.io.cluster.js +4 -0
  42. package/models/management.cattle.io.project.js +0 -36
  43. package/models/management.cattle.io.setting.js +11 -7
  44. package/models/provisioning.cattle.io.cluster.js +16 -4
  45. package/package.json +1 -1
  46. package/pages/auth/setup.vue +38 -1
  47. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
  48. package/pages/c/_cluster/apps/charts/index.vue +0 -15
  49. package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
  50. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  51. package/pages/c/_cluster/auth/roles/index.vue +11 -1
  52. package/pages/c/_cluster/explorer/index.vue +7 -49
  53. package/pages/c/_cluster/manager/pages/_page.vue +4 -5
  54. package/pages/c/_cluster/monitoring/index.vue +26 -39
  55. package/pages/support/index.vue +1 -8
  56. package/promptRemove/management.cattle.io.project.vue +6 -9
  57. package/rancher-components/BadgeState/BadgeState.vue +1 -5
  58. package/rancher-components/Banner/Banner.test.ts +1 -51
  59. package/rancher-components/Banner/Banner.vue +53 -134
  60. package/rancher-components/Card/Card.vue +7 -24
  61. package/rancher-components/Form/Checkbox/Checkbox.test.ts +29 -20
  62. package/rancher-components/Form/Checkbox/Checkbox.vue +20 -45
  63. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +8 -2
  64. package/rancher-components/Form/LabeledInput/LabeledInput.vue +10 -22
  65. package/rancher-components/Form/Radio/RadioButton.vue +13 -30
  66. package/rancher-components/Form/Radio/RadioGroup.vue +7 -26
  67. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -7
  68. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +38 -25
  69. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +11 -23
  70. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +5 -19
  71. package/rancher-components/StringList/StringList.test.ts +49 -453
  72. package/rancher-components/StringList/StringList.vue +58 -92
  73. package/rancher-components/components/Form/Radio/RadioGroup.test.ts +30 -0
  74. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -0
  75. package/rancher-components/components/StringList/StringList.test.ts +270 -0
  76. package/rancher-components/components/StringList/StringList.vue +57 -18
  77. package/store/features.js +1 -0
  78. package/store/prefs.js +0 -3
  79. package/types/shell/index.d.ts +26 -17
  80. package/utils/__tests__/object.test.ts +67 -1
  81. package/utils/__tests__/version.test.ts +13 -23
  82. package/utils/cluster.js +1 -1
  83. package/utils/custom-validators.js +0 -2
  84. package/utils/error.js +16 -1
  85. package/utils/grafana.js +1 -2
  86. package/utils/monitoring.js +25 -1
  87. package/utils/object.js +4 -3
  88. package/utils/sort.js +1 -1
  89. package/utils/validators/formRules/__tests__/index.test.ts +49 -4
  90. package/utils/validators/formRules/index.ts +13 -10
  91. package/utils/validators/role-template.js +1 -1
  92. package/utils/validators/setting.js +6 -10
  93. package/utils/version.js +0 -13
  94. package/components/ChartPsp.vue +0 -76
  95. package/components/__tests__/ChartPsp.test.ts +0 -75
  96. package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
  97. package/rancher-components/Card/Card.test.ts +0 -37
  98. package/rancher-components/Form/Radio/RadioButton.test.ts +0 -31
  99. package/yarn-error.log +0 -200
@@ -851,9 +851,6 @@ catalog:
851
851
  keywords: Keywords
852
852
  errors:
853
853
  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
854
  global: Global
858
855
  charts:
859
856
  all: All
@@ -1673,10 +1670,8 @@ cluster:
1673
1670
  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
1671
  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
1672
  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
1673
  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.
1674
+ 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.'
1680
1675
  machinePoolError: |-
1681
1676
  {count, plural,
1682
1677
  =1 { {pool_name}: The provided value for {fields} was 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. }
@@ -1842,9 +1837,6 @@ cluster:
1842
1837
  cisOverride: Changing this setting may affect cluster security as it overrides default CIS settings
1843
1838
  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.
1844
1839
  modal:
1845
- pspChange:
1846
- title: Pod Security Policy deprecation
1847
- 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>
1848
1840
  editYamlMachinePool:
1849
1841
  title: Save Machine Configurations
1850
1842
  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.
@@ -2763,11 +2755,9 @@ landing:
2763
2755
  cpuUsed: CPU Used
2764
2756
  memoryUsed: Memory Used
2765
2757
  seeWhatsNew: Learn more about the improvements and new capabilities in this version.
2766
- whatsNewLink: "What's new in 2.7"
2758
+ whatsNewLink: "What's new in 2.8"
2767
2759
  learnMore: Learn More
2768
2760
  support: Support
2769
- psps: PSPs
2770
- 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.
2771
2761
  community:
2772
2762
  title: Community Support
2773
2763
  docs: Docs
@@ -2833,7 +2823,7 @@ logging:
2833
2823
  dockerRootDirectory: Docker Root Directory
2834
2824
  systemdLogPath: systemd Log Path
2835
2825
  tooltip: 'Some kubernetes distributions log to <code>journald</code>. In order to collect these logs the <code>systemdLogPath</code> needs to be defined. While the <code>/run/log/journal</code> directory is used by default, some Linux distributions do not default to this path.'
2836
- url: '<a href="https://rancher.com/docs/rancher/v2.6/en/logging/helm-chart-options/" target="_blank" rel="noopener nofollow noreferrer">Learn more</a>'
2826
+ url: '<a href="https://ranchermanager.docs.rancher.com/v2.8/integrations-in-rancher/logging/logging-helm-chart-options" target="_blank" rel="noopener nofollow noreferrer">Learn more</a>'
2837
2827
  default: /run/log/journal
2838
2828
  elasticsearch:
2839
2829
  host: Host
@@ -4341,10 +4331,6 @@ project:
4341
4331
  vmDefaultResourceLimit: VM Default Resource Limit
4342
4332
  resourceQuotas: Resource Quotas
4343
4333
  haveOneOwner: There must be at least one member with the Owner role.
4344
- psp:
4345
- default: Cluster Default
4346
- label: Pod Security Policy
4347
- current: "{value} (Current)"
4348
4334
 
4349
4335
 
4350
4336
  projectMembers:
@@ -4613,6 +4599,7 @@ rbac:
4613
4599
  restricted-admin:
4614
4600
  label: Restricted Administrator
4615
4601
  description: Restricted Admins have full control over all resources in all downstream clusters but no access to the local cluster.
4602
+ deprecation: 'Warning: The Restricted Administrator role has been deprecated as of Rancher 2.8.0 and will be removed in a future release - Check out the <a href="{releaseNotesUrl}" target="_blank" rel="noopener noreferrer nofollow">Release Notes</a>'
4616
4603
  user:
4617
4604
  label: Standard User
4618
4605
  description: Standard Users can create new clusters and manage clusters and projects they have been granted access to.
@@ -4649,9 +4636,6 @@ rbac:
4649
4636
  nodetemplates-manage:
4650
4637
  label: Manage Node Templates
4651
4638
  description: Allows the user to define, edit, and remove Node Templates.
4652
- podsecuritypolicytemplates-manage:
4653
- label: Manage Pod Security Policies (PSPs)
4654
- description: Allows the user to define, edit, and remove PSPs.
4655
4639
  roles-manage:
4656
4640
  label: Manage Roles
4657
4641
  description: Allows the user to define, edit, and remove Role definitions.
@@ -5753,7 +5737,10 @@ validation:
5753
5737
  required: 'Port Rule [{position}] - Target Port is required'
5754
5738
  setting:
5755
5739
  serverUrl:
5756
- https: server-url must be https.
5740
+ https: Server URL must be https.
5741
+ 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.
5742
+ trailingForwardSlash: Server URL should not have a trailing forward slash.
5743
+ url: Server URL must be an URL.
5757
5744
  stringLength:
5758
5745
  between: '"{key}" should be between {min} and {max} {max, plural, =1 {character} other {characters}}'
5759
5746
  exactly: '"{key}" should be {count, plural, =1 {# character} other {# characters}}'
@@ -7079,7 +7066,6 @@ advancedSettings:
7079
7066
  'auth-user-session-ttl-minutes': 'Custom TTL (in minutes) on a user auth session.'
7080
7067
  'auth-token-max-ttl-minutes': 'Max TTL (in minutes) for all authentication tokens. When set to 0, the token never expires.'
7081
7068
  'kubeconfig-generate-token': 'Automatically generate tokens for users when a kubeconfig is requested.'
7082
- 'kubeconfig-token-ttl-minutes': 'TTL used for tokens generated via the CLI. Deprecated: This setting will be removed, and kubeconfig-default-token-ttl-minutes will be used for all kubeconfig tokens.'
7083
7069
  'kubeconfig-default-token-ttl-minutes': 'TTL (in minutes) applied on all kubeconfig tokens. When set to 0, the token never expires.'
7084
7070
  'rke-metadata-config': 'Configure RKE metadata refresh parameters.'
7085
7071
  'ui-banners': 'Classification banner is used to display a custom fixed banner in the header, footer, or both.'
@@ -7397,7 +7383,6 @@ legacy:
7397
7383
  globalDnsProviders: Global DNS Providers
7398
7384
  notifiers: Notifiers
7399
7385
  monitoring: Monitoring
7400
- psps: Pod Security Policy Templates
7401
7386
  secrets: Secrets
7402
7387
 
7403
7388
  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:
@@ -2735,11 +2725,9 @@ landing:
2735
2725
  cpuUsed: 已用 CPU
2736
2726
  memoryUsed: 已用内存
2737
2727
  seeWhatsNew: 点击右侧链接,了解此版本的新功能和优化。
2738
- whatsNewLink: "2.7 的新功能"
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 官方文档
@@ -2805,7 +2793,7 @@ logging:
2805
2793
  dockerRootDirectory: Docker 根目录
2806
2794
  systemdLogPath: systemd 日志路径
2807
2795
  tooltip: '某些 Kubernetes 发行版在 <code>journald</code>中记录日志。你需要定义<code>systemdLogPath</code> 以收集日志。默认路径是<code>/run/log/journal</code>,但某些 Linux 发行版不默认使用该路径。'
2808
- url: '<a href="https://rancher.com/docs/rancher/v2.6/en/logging/helm-chart-options/" target="_blank" rel="noopener nofollow noreferrer">了解更多</a>'
2796
+ url: '<a href="https://ranchermanager.docs.rancher.com/v2.8/integrations-in-rancher/logging/logging-helm-chart-options" target="_blank" rel="noopener nofollow noreferrer">了解更多</a>'
2809
2797
  default: /run/log/journal
2810
2798
  elasticsearch:
2811
2799
  host: 主机
@@ -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: 允许用户定义、编辑和移除角色定义。
@@ -7051,7 +7032,6 @@ advancedSettings:
7051
7032
  'auth-user-session-ttl-minutes': '用户认证会话的自定义 TTL(单位:分钟)。'
7052
7033
  'auth-token-max-ttl-minutes': '所有身份认证 Token 的最大 TTL(单位:分钟)。如果设置为 0,则 Token 永不过期。'
7053
7034
  'kubeconfig-generate-token': '请求 kubeconfig 时自动为用户生成 Token。'
7054
- 'kubeconfig-token-ttl-minutes': '在 CLI 中生成的 Token TTL。已弃用:此设置将被删除,kubeconfig-default-token-ttl-minutes 将用于所有 kubeconfig Token。'
7055
7035
  'kubeconfig-default-token-ttl-minutes': '应用于所有 kubeconfig Token 的 TTL(单位:分钟)。如果设置为 0,则 Token 永不过期。'
7056
7036
  'rke-metadata-config': '配置 RKE 元数据刷新参数。'
7057
7037
  'ui-banners': '分类横幅用于在页眉、页脚或两者中显示自定义的固定横幅。'
@@ -7380,7 +7360,6 @@ legacy:
7380
7360
  globalDnsProviders: 全局 DNS 提供商
7381
7361
  notifiers: Notifiers
7382
7362
  monitoring: 监控
7383
- psps: Pod 安全策略模板
7384
7363
  secrets: 密文
7385
7364
 
7386
7365
  project:
@@ -7461,9 +7440,6 @@ charts:
7461
7440
  service.ui.type:
7462
7441
  label: Longhorn UI 服务
7463
7442
  description: 定义 Longhorn UI 服务类型
7464
- enablePSP:
7465
- label: Pod 安全策略
7466
- description: 为 Longhorn 工作负载设置 Pod 安全策略
7467
7443
  csi.kubeletRootDir:
7468
7444
  label: Kubelet 根目录
7469
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>
@@ -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')"
@@ -82,14 +82,16 @@ export default {
82
82
  },
83
83
 
84
84
  async fetchDeps() {
85
- try {
86
- const am = await this.$store.dispatch('cluster/find', { type: ENDPOINTS, id: `${ this.monitoringNamespace }/${ this.alertServiceEndpoint }` });
85
+ if (this.$store.getters['cluster/canList'](ENDPOINTS)) {
86
+ try {
87
+ const am = await this.$store.dispatch('cluster/find', { type: ENDPOINTS, id: `${ this.monitoringNamespace }/${ this.alertServiceEndpoint }` });
87
88
 
88
- if (!isEmpty(am) && !isEmpty(am.subsets)) {
89
- this.alertManagerPoller.start();
90
- }
91
- } catch {
89
+ if (!isEmpty(am) && !isEmpty(am.subsets)) {
90
+ this.alertManagerPoller.start();
91
+ }
92
+ } catch {
92
93
 
94
+ }
93
95
  }
94
96
  },
95
97
  }
@@ -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;
@@ -597,11 +597,11 @@ export default {
597
597
 
598
598
  .ember-iframe {
599
599
  border: 0;
600
- left: var(--nav-width);
600
+ left: calc(var(--nav-width) + $app-bar-collapsed-width);
601
601
  height: calc(100vh - var(--header-height));
602
602
  position: absolute;
603
603
  top: var(--header-height);
604
- width: calc(100vw - var(--nav-width));
604
+ width: calc(100vw - var(--nav-width) - $app-bar-collapsed-width);
605
605
  visibility: show;
606
606
  }
607
607
 
@@ -9,8 +9,18 @@ export default {
9
9
  components: { Banner, Loading },
10
10
  async fetch() {
11
11
  const inStore = this.$store.getters['currentProduct'].inStore;
12
- const res = await this.$store.dispatch(`${ inStore }/find`, { type: CATALOG.APP, id: 'cattle-monitoring-system/rancher-monitoring' });
13
- const monitoringVersion = res?.currentVersion;
12
+ let monitoringVersion = '';
13
+
14
+ if (this.$store.getters[`${ inStore }/canList}`](CATALOG.APP)) {
15
+ try {
16
+ const res = await this.$store.dispatch(`${ inStore }/find`, { type: CATALOG.APP, id: 'cattle-monitoring-system/rancher-monitoring' });
17
+
18
+ monitoringVersion = res?.currentVersion;
19
+ } catch (err) {
20
+
21
+ }
22
+ }
23
+
14
24
  const leader = await hasLeader(monitoringVersion, this.$store.dispatch, this.currentCluster.id);
15
25
 
16
26
  this.hasLeader = leader ? this.t('generic.yes') : this.t('generic.no');
@@ -94,6 +94,7 @@ export default {
94
94
  };
95
95
  },
96
96
  computed: {
97
+ ...mapGetters(['releaseNotesUrl']),
97
98
  ...mapGetters({ t: 'i18n/t' }),
98
99
 
99
100
  isCreate() {
@@ -347,6 +348,11 @@ export default {
347
348
  </div>
348
349
  </template>
349
350
  </Checkbox>
351
+ <p
352
+ v-if="role.id === 'restricted-admin'"
353
+ v-clean-html="t('rbac.globalRoles.role.restricted-admin.deprecation', { releaseNotesUrl }, true)"
354
+ class="deprecation-notice"
355
+ />
350
356
  </div>
351
357
  </div>
352
358
  </template>
@@ -364,6 +370,10 @@ export default {
364
370
  </style>
365
371
  <style lang='scss' scoped>
366
372
  $detailSize: 11px;
373
+
374
+ .deprecation-notice {
375
+ margin: 8px 0 8px 20px;
376
+ }
367
377
  .role-group {
368
378
  .type-title {
369
379
  display: flex;
@@ -40,13 +40,18 @@ export default {
40
40
  },
41
41
  async fetch() {
42
42
  const inStore = this.$store.getters['currentProduct'].inStore;
43
- const res = await this.$store.dispatch(`${ inStore }/find`, { type: CATALOG.APP, id: 'cattle-monitoring-system/rancher-monitoring' });
44
43
 
45
- this.monitoringVersion = res?.currentVersion;
44
+ if (this.$store.getters[`${ inStore }/canList`](CATALOG.APP)) {
45
+ try {
46
+ const res = await this.$store.dispatch(`${ inStore }/find`, { type: CATALOG.APP, id: 'cattle-monitoring-system/rancher-monitoring' });
47
+
48
+ this.monitoringVersion = res?.currentVersion;
49
+ } catch (err) {}
50
+ }
46
51
  },
47
52
  data() {
48
53
  return {
49
- loading: false, error: false, interval: null, errorTimer: null, monitoringVersion: null
54
+ loading: false, error: false, interval: null, errorTimer: null, monitoringVersion: ''
50
55
  };
51
56
  },
52
57
  computed: {
@@ -182,6 +182,12 @@ export default {
182
182
  this.activeStep = this.visibleSteps[this.initStepIndex];
183
183
  this.goToStep(this.activeStepIndex + 1);
184
184
  }
185
+ },
186
+ errors() {
187
+ // Ensurce we scroll the errors into view
188
+ this.$nextTick(() => {
189
+ this.$refs.wizard.scrollTop = this.$refs.wizard.scrollHeight;
190
+ });
185
191
  }
186
192
  },
187
193
 
@@ -253,7 +259,10 @@ export default {
253
259
  </script>
254
260
 
255
261
  <template>
256
- <div class="outer-container">
262
+ <div
263
+ ref="wizard"
264
+ class="outer-container"
265
+ >
257
266
  <Loading
258
267
  v-if="!stepsLoaded"
259
268
  mode="relative"
@@ -397,6 +406,7 @@ export default {
397
406
  color="error"
398
407
  :label="err"
399
408
  :closable="true"
409
+ class="footer-error"
400
410
  @close="errors.splice(idx, 1)"
401
411
  />
402
412
  </div>
@@ -647,6 +657,12 @@ $spacer: 10px;
647
657
  }
648
658
  }
649
659
 
660
+ // We have to account for the absolute position of the .controls-row
661
+ .footer-error {
662
+ margin-top: -40px;
663
+ margin-bottom: 70px;
664
+ }
665
+
650
666
  .controls-row {
651
667
 
652
668
  // Overrides outlet padding
@@ -1,4 +1,5 @@
1
1
  <script>
2
+ import { mapGetters } from 'vuex';
2
3
  import { MANAGEMENT, RBAC } from '@shell/config/types';
3
4
  import CruResource from '@shell/components/CruResource';
4
5
  import CreateEditView from '@shell/mixins/create-edit-view';
@@ -14,6 +15,7 @@ import { ucFirst } from '@shell/utils/string';
14
15
  import SortableTable from '@shell/components/SortableTable';
15
16
  import { _CLONE, _DETAIL } from '@shell/config/query-params';
16
17
  import { SCOPED_RESOURCES } from '@shell/config/roles';
18
+ import { Banner } from '@components/Banner';
17
19
 
18
20
  import { SUBTYPE_MAPPING, VERBS } from '@shell/models/management.cattle.io.roletemplate';
19
21
  import Loading from '@shell/components/Loading';
@@ -60,7 +62,8 @@ export default {
60
62
  Tabbed,
61
63
  SortableTable,
62
64
  Loading,
63
- Error
65
+ Error,
66
+ Banner
64
67
  },
65
68
 
66
69
  mixins: [CreateEditView, FormValidation],
@@ -162,6 +165,12 @@ export default {
162
165
  },
163
166
 
164
167
  computed: {
168
+ ...mapGetters(['releaseNotesUrl']),
169
+
170
+ showRestrictedAdminDeprecationBanner() {
171
+ return this.value.subtype === GLOBAL && this.value.id === 'restricted-admin';
172
+ },
173
+
165
174
  label() {
166
175
  return this.t(`rbac.roletemplate.subtypes.${ this.value.subtype }.label`);
167
176
  },
@@ -541,6 +550,13 @@ export default {
541
550
  @finish="save"
542
551
  @cancel="cancel"
543
552
  >
553
+ <Banner
554
+ v-if="showRestrictedAdminDeprecationBanner"
555
+ color="warning"
556
+ class="mb-20"
557
+ >
558
+ <span v-clean-html="t('rbac.globalRoles.role.restricted-admin.deprecation', { releaseNotesUrl }, true)" />
559
+ </Banner>
544
560
  <template v-if="isDetail">
545
561
  <SortableTable
546
562
  key-field="index"
@@ -164,6 +164,10 @@ export default {
164
164
  removeAt(this.rows, index);
165
165
  this.queueUpdate();
166
166
  },
167
+
168
+ /**
169
+ * Cleanup rows and emit input
170
+ */
167
171
  update() {
168
172
  if ( this.isView ) {
169
173
  return;
@@ -180,22 +184,24 @@ export default {
180
184
  }
181
185
  this.$emit('input', out);
182
186
  },
187
+
188
+ /**
189
+ * Handle paste event, e.g. split multiple lines in rows
190
+ */
183
191
  onPaste(index, event) {
184
- if (this.valueMultiline) {
185
- return;
186
- }
187
192
  event.preventDefault();
188
193
  const text = event.clipboardData.getData('text/plain');
189
- const split = text.split('\n').map((value) => ({ value }));
190
-
191
- if (split.length === 1) {
192
- // It's not multi-line, so don't treat it as such
193
- return;
194
- }
195
194
 
196
- event.preventDefault();
195
+ if (this.valueMultiline) {
196
+ // Allow to paste multiple lines
197
+ this.rows[index].value = text;
198
+ } else {
199
+ // Prevent to paste the value and emit text in multiple rows
200
+ const split = text.split('\n').map((value) => ({ value }));
197
201
 
198
- this.rows.splice(index, 1, ...split);
202
+ event.preventDefault();
203
+ this.rows.splice(index, 1, ...split);
204
+ }
199
205
 
200
206
  this.update();
201
207
  }
@@ -256,6 +262,7 @@ export default {
256
262
  v-if="valueMultiline"
257
263
  ref="value"
258
264
  v-model="row.value"
265
+ :data-testid="`textarea-${idx}`"
259
266
  :placeholder="valuePlaceholder"
260
267
  :mode="mode"
261
268
  :disabled="disabled"
@@ -266,6 +273,7 @@ export default {
266
273
  v-else-if="rules.length > 0"
267
274
  ref="value"
268
275
  v-model="row.value"
276
+ :data-testid="`labeled-input-${idx}`"
269
277
  :placeholder="valuePlaceholder"
270
278
  :disabled="isView || disabled"
271
279
  :rules="rules"
@@ -277,6 +285,7 @@ export default {
277
285
  v-else
278
286
  ref="value"
279
287
  v-model="row.value"
288
+ :data-testid="`input-${idx}`"
280
289
  :placeholder="valuePlaceholder"
281
290
  :disabled="isView || disabled"
282
291
  @paste="onPaste(idx, $event)"