@rancher/shell 3.0.9-rc.1 → 3.0.9-rc.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 (208) hide show
  1. package/assets/styles/base/_color.scss +1 -0
  2. package/assets/styles/base/_typography.scss +14 -5
  3. package/assets/styles/themes/_light.scss +1 -1
  4. package/assets/styles/themes/_modern.scss +1 -1
  5. package/assets/translations/en-us.yaml +104 -33
  6. package/assets/translations/zh-hans.yaml +13 -2
  7. package/components/ActionMenu.vue +7 -8
  8. package/components/ActionMenuShell.vue +23 -24
  9. package/components/CodeMirror.vue +4 -3
  10. package/components/DetailText.vue +54 -7
  11. package/components/Drawer/Chrome.vue +11 -4
  12. package/components/Drawer/DrawerCard.vue +19 -0
  13. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +3 -11
  14. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +2 -2
  15. package/components/Drawer/ResourceDetailDrawer/index.vue +3 -20
  16. package/components/Drawer/types.ts +1 -0
  17. package/components/DynamicContent/DynamicContentCloseButton.vue +2 -2
  18. package/components/LocaleSelector.vue +1 -1
  19. package/components/Markdown.vue +1 -1
  20. package/components/PopoverCard.vue +3 -3
  21. package/components/Resource/Detail/Card/ExtrasCard.vue +39 -0
  22. package/components/Resource/Detail/Card/Scaler.vue +10 -2
  23. package/components/Resource/Detail/Card/StateCard/__tests__/composables.test.ts +142 -0
  24. package/components/Resource/Detail/Card/StateCard/composables.ts +41 -11
  25. package/components/Resource/Detail/Card/StateCard/index.vue +3 -9
  26. package/components/Resource/Detail/Card/StateCard/types.ts +6 -0
  27. package/components/Resource/Detail/Card/{PodsCard → StatusCard}/index.vue +14 -10
  28. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +24 -25
  29. package/components/Resource/Detail/Cards.vue +27 -0
  30. package/components/Resource/Detail/Masthead/__tests__/index.test.ts +70 -0
  31. package/components/Resource/Detail/Masthead/index.vue +5 -0
  32. package/components/Resource/Detail/Metadata/KeyValueRow.vue +4 -2
  33. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -2
  34. package/components/Resource/Detail/ResourceRow.types.ts +14 -0
  35. package/components/Resource/Detail/ResourceRow.vue +23 -35
  36. package/components/Resource/Detail/StatusRow.vue +5 -2
  37. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +38 -7
  38. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +106 -2
  39. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  40. package/components/Resource/Detail/TitleBar/index.vue +41 -6
  41. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +49 -1
  42. package/components/ResourceDetail/Masthead/__tests__/latest.test.ts +85 -0
  43. package/components/ResourceDetail/Masthead/index.vue +1 -0
  44. package/components/ResourceDetail/Masthead/latest.vue +8 -1
  45. package/components/ResourceDetail/Masthead/legacy.vue +1 -1
  46. package/components/ResourceTable.vue +1 -1
  47. package/components/Setting.vue +1 -1
  48. package/components/SortableTable/index.vue +25 -0
  49. package/components/SortableTable/selection.js +25 -12
  50. package/components/SortableTable/sorting.js +1 -1
  51. package/components/Tabbed/Tab.vue +5 -0
  52. package/components/Tabbed/index.vue +40 -9
  53. package/components/Window/ContainerShell.vue +10 -13
  54. package/components/__tests__/ProjectRow.test.ts +102 -15
  55. package/components/fleet/FleetClusterTargets/TargetsList.vue +47 -29
  56. package/components/fleet/FleetClusterTargets/index.vue +82 -29
  57. package/components/fleet/FleetClusters.vue +26 -12
  58. package/components/fleet/FleetGitRepoPaths.vue +2 -2
  59. package/components/fleet/FleetResources.vue +14 -0
  60. package/components/fleet/FleetValuesFrom.vue +2 -2
  61. package/components/fleet/__tests__/FleetClusterTargets.test.ts +531 -0
  62. package/components/fleet/__tests__/FleetClusters.test.ts +576 -0
  63. package/components/fleet/dashboard/ResourceDetails.vue +96 -123
  64. package/components/form/Conditions.vue +1 -15
  65. package/components/form/HookOption.vue +5 -0
  66. package/components/form/LabeledSelect.vue +1 -1
  67. package/components/form/LifecycleHooks.vue +2 -6
  68. package/components/form/ResourceLabeledSelect.vue +12 -1
  69. package/components/form/ResourceQuota/Project.vue +59 -8
  70. package/components/form/ResourceQuota/ProjectRow.vue +116 -21
  71. package/components/form/ResourceQuota/shared.js +42 -18
  72. package/components/form/SeccompProfile.vue +113 -0
  73. package/components/form/Security.vue +244 -133
  74. package/components/form/__tests__/LabeledSelect.test.ts +1 -1
  75. package/components/form/__tests__/SeccompProfile.test.js +124 -0
  76. package/components/form/__tests__/Security.test.ts +125 -37
  77. package/components/formatter/Autoscaler.vue +2 -2
  78. package/components/formatter/FleetSummaryGraph.vue +4 -1
  79. package/components/formatter/LinkName.vue +3 -2
  80. package/components/nav/Group.vue +5 -0
  81. package/components/nav/Header.vue +3 -3
  82. package/components/nav/HeaderPageActionMenu.vue +1 -1
  83. package/components/nav/NamespaceFilter.vue +6 -6
  84. package/components/nav/NotificationCenter/index.vue +1 -1
  85. package/components/nav/TopLevelMenu.helper.ts +41 -16
  86. package/components/nav/TopLevelMenu.vue +45 -25
  87. package/components/nav/WorkspaceSwitcher.vue +1 -1
  88. package/components/nav/__tests__/TopLevelMenu.helper.test.ts +277 -0
  89. package/components/nav/__tests__/TopLevelMenu.test.ts +160 -4
  90. package/components/templates/default.vue +0 -3
  91. package/components/templates/home.vue +0 -3
  92. package/components/templates/plain.vue +0 -3
  93. package/composables/useClickOutside.ts +1 -1
  94. package/config/product/explorer.js +2 -3
  95. package/config/table-headers.js +9 -7
  96. package/config/types.js +45 -9
  97. package/detail/__tests__/workload.test.ts +8 -16
  98. package/detail/catalog.cattle.io.app.vue +5 -0
  99. package/detail/fleet.cattle.io.cluster.vue +6 -0
  100. package/detail/management.cattle.io.oidcclient.vue +15 -4
  101. package/detail/workload/index.vue +7 -109
  102. package/edit/__tests__/management.cattle.io.project.test.js +137 -0
  103. package/edit/__tests__/projectsecret.test.ts +42 -0
  104. package/edit/auth/__tests__/oidc.test.ts +50 -0
  105. package/edit/auth/oidc.vue +68 -44
  106. package/edit/autoscaling.horizontalpodautoscaler/index.vue +140 -59
  107. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +41 -5
  108. package/edit/management.cattle.io.project.vue +36 -6
  109. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +16 -3
  110. package/edit/projectsecret.vue +29 -0
  111. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +89 -200
  112. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +58 -17
  113. package/edit/provisioning.cattle.io.cluster/rke2.vue +11 -0
  114. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +3 -63
  115. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +82 -14
  116. package/edit/workload/__tests__/index.test.ts +3 -4
  117. package/edit/workload/index.vue +47 -28
  118. package/edit/workload/mixins/workload.js +66 -31
  119. package/initialize/install-plugins.js +0 -2
  120. package/list/catalog.cattle.io.clusterrepo.vue +1 -1
  121. package/list/projectsecret.vue +2 -2
  122. package/machine-config/__tests__/vmwarevsphere.test.ts +64 -0
  123. package/machine-config/amazonec2.vue +2 -2
  124. package/machine-config/vmwarevsphere.vue +58 -4
  125. package/mixins/__tests__/chart.test.ts +63 -0
  126. package/mixins/chart.js +56 -51
  127. package/models/__tests__/catalog.cattle.io.app.test.ts +33 -0
  128. package/models/__tests__/workload.test.ts +333 -0
  129. package/models/catalog.cattle.io.app.js +8 -0
  130. package/models/management.cattle.io.cluster.js +22 -30
  131. package/models/pod.js +14 -0
  132. package/models/provisioning.cattle.io.cluster.js +2 -2
  133. package/models/secret.js +1 -1
  134. package/models/workload.js +93 -27
  135. package/package.json +4 -4
  136. package/pages/__tests__/diagnostic.test.ts +71 -0
  137. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +91 -0
  138. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  139. package/pages/c/_cluster/explorer/EventsTable.vue +2 -2
  140. package/pages/c/_cluster/explorer/tools/index.vue +23 -5
  141. package/pages/c/_cluster/fleet/index.vue +14 -8
  142. package/pages/c/_cluster/manager/hostedprovider/index.vue +1 -19
  143. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +18 -5
  144. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  145. package/pages/c/_cluster/uiplugins/index.vue +41 -9
  146. package/pages/diagnostic.vue +17 -3
  147. package/plugins/dashboard-store/__tests__/resource-class.test.ts +234 -0
  148. package/plugins/dashboard-store/actions.js +9 -8
  149. package/plugins/dashboard-store/resource-class.js +97 -1
  150. package/plugins/steve/__tests__/revision.test.ts +84 -0
  151. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +30 -0
  152. package/plugins/steve/__tests__/subscribe.spec.ts +134 -0
  153. package/plugins/steve/revision.ts +26 -0
  154. package/plugins/steve/steve-pagination-utils.ts +6 -5
  155. package/plugins/steve/subscribe.js +188 -49
  156. package/plugins/subscribe-events.ts +2 -2
  157. package/rancher-components/Form/Checkbox/Checkbox.vue +13 -0
  158. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -1
  159. package/rancher-components/Pill/RcCounterBadge/RcCounterBadge.vue +2 -1
  160. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +3 -1
  161. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +3 -1
  162. package/rancher-components/Pill/RcTag/RcTag.vue +1 -1
  163. package/rancher-components/Pill/index.ts +4 -0
  164. package/rancher-components/RcButton/RcButton.test.ts +53 -9
  165. package/rancher-components/RcButton/RcButton.vue +217 -25
  166. package/rancher-components/RcButton/types.ts +27 -1
  167. package/rancher-components/RcDropdown/RcDropdownMenu.vue +4 -4
  168. package/rancher-components/RcDropdown/types.ts +3 -3
  169. package/rancher-components/RcIcon/RcIcon.test.ts +42 -0
  170. package/rancher-components/RcIcon/RcIcon.vue +9 -6
  171. package/rancher-components/RcIcon/types.ts +13 -9
  172. package/rancher-components/RcItemCard/RcItemCard.test.ts +16 -6
  173. package/rancher-components/RcItemCard/RcItemCard.vue +13 -23
  174. package/rancher-components/utils/status.test.ts +10 -15
  175. package/rancher-components/utils/status.ts +5 -6
  176. package/store/__tests__/auth.test.ts +21 -5
  177. package/store/auth.js +6 -3
  178. package/store/aws.js +18 -12
  179. package/store/index.js +4 -8
  180. package/store/type-map.utils.ts +1 -1
  181. package/types/kube/kube-api.ts +29 -3
  182. package/types/rancher/steve.api.ts +40 -0
  183. package/types/shell/index.d.ts +262 -156
  184. package/types/store/pagination.types.ts +1 -0
  185. package/types/store/subscribe-events.types.ts +1 -0
  186. package/utils/__tests__/azure.test.ts +56 -0
  187. package/utils/__tests__/back-off.test.ts +364 -245
  188. package/utils/__tests__/error.test.ts +44 -0
  189. package/utils/__tests__/fleet.test.ts +8 -1
  190. package/utils/__tests__/pagination-wrapper.test.ts +167 -0
  191. package/utils/__tests__/version.test.ts +55 -1
  192. package/utils/azure.js +12 -0
  193. package/utils/back-off.ts +302 -69
  194. package/utils/dynamic-content/__tests__/index.test.ts +1 -1
  195. package/utils/dynamic-content/__tests__/new-release.test.ts +48 -7
  196. package/utils/dynamic-content/__tests__/support-notice.test.ts +1 -4
  197. package/utils/dynamic-content/index.ts +1 -6
  198. package/utils/dynamic-content/new-release.ts +5 -3
  199. package/utils/dynamic-content/types.d.ts +0 -1
  200. package/utils/error.js +9 -0
  201. package/utils/fleet.ts +2 -2
  202. package/utils/inactivity.ts +2 -3
  203. package/utils/pagination-wrapper.ts +99 -15
  204. package/utils/validators/formRules/index.ts +3 -0
  205. package/utils/version.js +38 -0
  206. package/components/auth/AzureWarning.vue +0 -77
  207. /package/components/Resource/Detail/{Card/PodsCard/Bubble.vue → Bubble.vue} +0 -0
  208. /package/components/Resource/Detail/Card/{PodsCard → StatusCard}/composable.ts +0 -0
@@ -21,6 +21,7 @@ $yellow001: #FFE47A;
21
21
  $yellow002: #473900;
22
22
 
23
23
  $red001: #B13333;
24
+ $red002: #F2E0E0;
24
25
 
25
26
  $gray001: #EDEFF3;
26
27
  $gray002: #DCDEE4;
@@ -1,14 +1,18 @@
1
+ @mixin h-css() {
2
+ color: var(--body-text);
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ margin: 0 0 10px 0;
6
+ font-family: var(--title-font-family, unset);
7
+ }
8
+
1
9
  HTML, BODY {
2
10
  font-family: $body-font;
3
11
  font-size: 14px;
4
12
  }
5
13
 
6
14
  H1, H2, H3, H4, H5, H6 {
7
- color: var(--body-text);
8
- font-style: normal;
9
- font-weight: 400;
10
- margin: 0 0 10px 0;
11
- font-family: var(--title-font-family, unset); // Use the var if set, otherwise unset and use the font defined by the parent
15
+ @include h-css;
12
16
  }
13
17
 
14
18
  H1 {
@@ -42,6 +46,11 @@ P {
42
46
  margin: 0;
43
47
  }
44
48
 
49
+ legend.h3-legend {
50
+ @include h-css;
51
+ font-size: 18px // Same as H3
52
+ }
53
+
45
54
  //code
46
55
  code, samp, kbd, .monospace {
47
56
  font-family: $mono-font;
@@ -575,7 +575,7 @@
575
575
  --rc-warning-secondary: #{$yellow002};
576
576
 
577
577
  --rc-error: #{$red001};
578
- --rc-error-secondary: #{$gray003};
578
+ --rc-error-secondary: #{$red002};
579
579
 
580
580
  --rc-unknown: #{$gray001};
581
581
  --rc-unknown-secondary: #{$gray004};
@@ -705,7 +705,7 @@ BODY, .theme-light {
705
705
  --rc-warning-secondary: #{$yellow002};
706
706
 
707
707
  --rc-error: #{$red001};
708
- --rc-error-secondary: #{$gray003};
708
+ --rc-error-secondary: #{$red002};
709
709
 
710
710
  --rc-unknown: #{$gray001};
711
711
  --rc-unknown-secondary: #{$gray004};
@@ -121,6 +121,7 @@ generic:
121
121
  1d: 1d
122
122
  7d: 7d
123
123
  30d: 30d
124
+ tooltip: Tooltip
124
125
  completed: Completed
125
126
  enable: Enable
126
127
  disable: Disable
@@ -786,6 +787,11 @@ authConfig:
786
787
  label: Scopes
787
788
  placeholder: openid
788
789
  protip: The <code>openid</code>, <code>profile</code>, and <code>email</code> scopes are required and cannot be removed.
790
+ pkce:
791
+ label: Enable PKCE (S256)
792
+ tooltip: Enable Proof Key for Code Exchange (PKCE) using the S256 code challenge method. When enabled, this client must use PKCE with S256 for authorization requests.
793
+ pkceMethod:
794
+ label: PKCE Method
789
795
  cert:
790
796
  label: Certificate
791
797
  placeholder: Paste in the certificate, starting with -----BEGIN CERTIFICATE-----
@@ -1210,7 +1216,7 @@ catalog:
1210
1216
  tag: tag
1211
1217
  install:
1212
1218
  action:
1213
- goToUpgrade: Edit/Upgrade
1219
+ goToUpgrade: Edit / Change Version
1214
1220
  appReadmeMissing: This chart doesn't have any additional chart information.
1215
1221
  appReadmeTitle: Chart Information (Helm README)
1216
1222
  button:
@@ -2004,7 +2010,8 @@ cluster:
2004
2010
  description: Choose what hypervisor the virtual machine will be scheduled to
2005
2011
  dataCenter: Data Center
2006
2012
  resourcePool: Resource Pool
2007
- dataStore: Data Store
2013
+ dataStore: Datastore
2014
+ dataStoreCluster: Datastore Cluster
2008
2015
  folder: Folder
2009
2016
  host:
2010
2017
  label: Host
@@ -2530,9 +2537,6 @@ cluster:
2530
2537
  caCerts:
2531
2538
  label: CA Certificates
2532
2539
  toolTip: Certificates required for the client to successfully verify the validity of the certificate returned by the endpoint.
2533
- ipv6:
2534
- warning: It looks like you are using an IPv6 CIDR. Your node driver may require additional configuration to support this.
2535
- enable: Enable IPv6 support
2536
2540
  etcd:
2537
2541
  disableSnapshots:
2538
2542
  label: Automatic Backups
@@ -2569,6 +2573,10 @@ cluster:
2569
2573
  dual: Dual-Stack
2570
2574
  errorNeedsIpv6: Stack preference must be set to dual-stack or ipv6 if using ipv6 networking in nodepools.
2571
2575
  k3s:
2576
+ flannelMasq:
2577
+ title: IPv6 NAT
2578
+ label: Enable Flannel IPv6 Masquerade
2579
+ banner: It looks like you're using IPv6. If your IPv6 addresses are not publically routed, for example in the ULA range, you might want to check this option to enable IPv6 NAT; by default, pods use their IPv6 address for outgoing communication.
2572
2580
  systemService:
2573
2581
  coredns: 'CoreDNS'
2574
2582
  local-storage: 'Local Storage'
@@ -2727,7 +2735,6 @@ cruResource:
2727
2735
  providers:
2728
2736
  hosted:
2729
2737
  title: Hosted Providers
2730
- prime: Prime only
2731
2738
  warning: Disabling providers will make any clusters that use them uneditable
2732
2739
  drivers:
2733
2740
  kontainer:
@@ -2957,6 +2964,10 @@ fleet:
2957
2964
  expandAll: Expand All
2958
2965
  collapseAll: Collapse All
2959
2966
  state: State
2967
+ resourceDetails:
2968
+ clusters: Clusters
2969
+ resources: Resources
2970
+ source: Source
2960
2971
  viewMode:
2961
2972
  table: Show table
2962
2973
  cards: Show cards
@@ -3014,24 +3025,36 @@ fleet:
3014
3025
  notReady: Not Ready
3015
3026
  waitApplied: Wait Applied
3016
3027
  clusterTargets:
3017
- title: Select by name
3018
- label: Clusters
3019
3028
  advancedConfigs: Advanced target configurations are defined, check the YAML file for further details.
3020
- placeholders:
3021
- selectMultiple: Select Multiple Clusters
3029
+ clusters:
3030
+ title: Clusters
3031
+ byName:
3032
+ placeholder: Select Multiple Clusters
3033
+ label: Select by cluster name
3034
+ byLabel:
3035
+ title: Select by labels
3036
+ addSelector: Add cluster selector
3037
+ labelKey: Label
3038
+ clusterGroups:
3039
+ title: Cluster Groups
3040
+ byName:
3041
+ label: Select by cluster group name
3042
+ placeholder: Select Multiple Cluster Groups
3022
3043
  rules:
3023
- title: Select by labels
3024
- addSelector: Add cluster selector
3025
- labelKey: Label
3026
3044
  matching:
3027
- title: Selected clusters
3028
- placeholder: Select clusters by name or labels
3045
+ title: |-
3046
+ {n, plural,
3047
+ =0 {No clusters selected}
3048
+ =1 {1 cluster selected}
3049
+ other {{n, number} clusters selected}
3050
+ }
3051
+ placeholder: Select clusters by name, labels or groups
3029
3052
  empty: No clusters in the workspace
3030
3053
  plusMore: |-
3031
3054
  {n, plural,
3032
3055
  =1 {+ 1 more cluster}
3033
3056
  other {+ {n, number} more clusters}
3034
- }
3057
+ }
3035
3058
  application:
3036
3059
  pageTitle: App Bundles
3037
3060
  menuLabel: App Bundles
@@ -3591,6 +3614,7 @@ hpa:
3591
3614
  last: Last Scale Time
3592
3615
  max: Maximum Replicas
3593
3616
  min: Minimum Replicas
3617
+ targetReferenceType: Target Type
3594
3618
  targetReference: Target Reference
3595
3619
 
3596
3620
  import:
@@ -3855,6 +3879,8 @@ istio:
3855
3879
  itemCard:
3856
3880
  ariaLabel:
3857
3881
  clickable: Click on card for {cardTitle}
3882
+ actionMenu:
3883
+ label: '{cardTitle} actions'
3858
3884
  jwt:
3859
3885
  title: JWT Authentication
3860
3886
  actions:
@@ -7332,39 +7358,64 @@ workload:
7332
7358
  removeContainer: Remove Container
7333
7359
  addContainer: Add Container
7334
7360
  security:
7335
- addCapabilities: Add Capabilities
7336
7361
  addGroupIDs: Add Group IDs
7337
7362
  allowPrivilegeEscalation:
7338
- label: Privilege Escalation
7339
- 'false': No
7340
- 'true': "Yes: container can gain more privileges than its parent process"
7341
- dropCapabilities: Drop Capabilities
7363
+ title: Privilege Escalation
7364
+ 'true': "Container can gain more privileges than its parent process"
7365
+ capabilities:
7366
+ title: Capabilities
7367
+ add: Add Capabilities
7368
+ drop: Drop Capabilities
7342
7369
  fsGroup: Filesystem Group
7343
7370
  hostIPC: Use Host IPC Namespace
7344
7371
  hostPID: Use Host PID Namespace
7345
7372
  podFsGroup: Pod Filesystem Group
7346
7373
  privileged:
7347
- label: Privileged
7348
- 'false': No
7349
- 'true': "Yes: container has full access to the host"
7374
+ title: Privileged
7375
+ 'true': "Container has full access to the host"
7376
+ help: Enabling privilege will hide Privilege Escalation and seccompProfile.
7377
+ afterTick:
7378
+ 'true': Privilege Escalation and seccompProfile have been hidden.
7379
+ 'false': Privilege Escalation and seccompProfile appeared.
7350
7380
  readOnlyRootFilesystem:
7351
- label: Read-Only Root Filesystem
7352
- 'false': No
7353
- 'true': "Yes: container has a read-only root filesystem"
7381
+ title: Read-Only Root Filesystem
7382
+ 'true': "Container has a read-only root filesystem"
7354
7383
  runAsGroup: Run as Group ID
7355
7384
  runAsNonRoot:
7356
- label: Run as Non-Root
7357
- 'false': No
7358
- 'true': "Yes: container must run as a non-root user"
7385
+ title: Run as Non-Root
7386
+ 'true': "Container must run as a non-root user"
7359
7387
  runAsNonRootOptions:
7360
- noOption: "No"
7361
- yesOption: "Yes: containers must run as non-root-user"
7362
- runAsUser: Run as User ID
7388
+ 'true': "Containers must run as non-root-user"
7389
+ runAsUser:
7390
+ title: Run as User ID
7391
+ label: User ID
7392
+ seccompProfile:
7393
+ pod: Pod Seccomp Profile
7394
+ container: Seccomp Profile
7395
+ type: Type
7396
+ localhostProfile:
7397
+ label: Localhost Profile Path
7398
+ tooltip: Points to a specific seccomp file that must already exist on the machine running the container.
7399
+ placeholder: e.g. path/to/json
7400
+ afterLocalhostProfile:
7401
+ selected: Localhost Profile input appeared.
7402
+ unselected: Localhost Profile input has been hidden.
7403
+ types:
7404
+ none:
7405
+ label: None
7406
+ runtimeDefault:
7407
+ label: RuntimeDefault - inherit the default seccomp profile
7408
+ localhost:
7409
+ label: Localhost - define a custom seccomp profile
7410
+ unconfined:
7411
+ label: Unconfined - no seccomp profile
7363
7412
  shareProcessNamespace: Share single process namespace
7364
7413
  supplementalGroups: Additional Group IDs
7365
7414
  sysctls: Sysctls
7366
7415
  sysctlsKey: Name
7367
7416
  standard: Standard Container
7417
+ initContainer:
7418
+ label: Init Containers
7368
7419
  terminationState: "Last state: Terminated with {lsExitCode}: {lsDescription}, started: {lsStartedAt}, finished: {lsFinishedAt}"
7369
7420
  titles:
7370
7421
  pods: Pods
@@ -7492,6 +7543,7 @@ workload:
7492
7543
  validation:
7493
7544
  containers: Containers
7494
7545
  containerImage: Container {name} - "Container Image" is required.
7546
+ localhostProfile: Container {name} - "Container Localhost Profile" is required when SeccompProfile Type is Localhost.
7495
7547
  replicas: Replicas
7496
7548
  showTabs: 'Show Advanced Options'
7497
7549
  scheduling:
@@ -8364,6 +8416,11 @@ typeLabel:
8364
8416
  one { Role }
8365
8417
  other { Roles }
8366
8418
  }
8419
+ replicationcontroller: |-
8420
+ {count, plural,
8421
+ one { Replication Controller }
8422
+ other { Replication Controllers }
8423
+ }
8367
8424
  scheduling.k8s.io.priorityclass: |-
8368
8425
  {count, plural,
8369
8426
  one { PriorityClass }
@@ -8800,6 +8857,7 @@ notifications:
8800
8857
  showCheckboxLabel: Show custom login error
8801
8858
  messageLabel: Text to display
8802
8859
  resourceQuota:
8860
+ banner: Limit resource consumption in a project for both standard (e.g. CPU Limit) and custom resource types. For custom resource types you have to provide the resource identifier yourself. Want to learn more about resource quotas? Read our <a href="https://ranchermanager.docs.rancher.com/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas" target="_blank" rel="noopener noreferrer nofollow">documentation <i class="icon icon-external-link"></i></a><span class="sr-only">Opens in a new tab</span>
8803
8861
  label: Resource Quotas
8804
8862
  headers:
8805
8863
  limit: Limit
@@ -8807,9 +8865,14 @@ resourceQuota:
8807
8865
  projectLimit: Project Limit
8808
8866
  projectResourceAvailability: Project Resource Availability
8809
8867
  resourceType: Resource Type
8868
+ resourceIdentifier: Resource Identifier
8810
8869
  helpText: Configure how much of the resources the namespace as a whole can consume.
8811
8870
  helpTextDetail: The amount of resources the namespace as a whole can consume.
8812
8871
  helpTextHarvester: VMs need to reserve additional memory overhead.
8872
+ custom: Custom
8873
+ resourceIdentifier:
8874
+ placeholder: e.g. configmaps
8875
+ tooltip: Select 'Custom' from the 'Resource Type' list and enter the resource identifier (e.g. requests.nvidia.com/gpu) to add custom resources quotas.
8813
8876
  configMaps: Config Maps
8814
8877
  limitsCpu: CPU Limit
8815
8878
  limitsMemory: Memory Limit
@@ -8839,6 +8902,8 @@ resourceQuota:
8839
8902
  unitlessPlaceholder: e.g. 10
8840
8903
  add:
8841
8904
  label: Add Resource
8905
+ errors:
8906
+ customTypeRequired: Resource identifier is required
8842
8907
  tooltip:
8843
8908
  reserved: 'Other Namespaces:'
8844
8909
  namespace: 'This Namespace:'
@@ -9099,11 +9164,17 @@ component:
9099
9164
  podsCard:
9100
9165
  title: Pods
9101
9166
  ariaResourceName: pods
9167
+ jobsCard:
9168
+ title: Jobs
9169
+ ariaResourceName: jobs
9102
9170
  insightsCard:
9103
9171
  title: Insights
9104
9172
  rows:
9105
9173
  conditions: Conditions
9106
9174
  events: Events
9175
+ extrasCard:
9176
+ title: Extras
9177
+ message: 'Consider installing additional <a class="secondary text-deemphasized" href="{extensionsUrl}">extensions</a> and / or <a class="secondary-text-link" href="{clusterToolsUrl}">cluster tools</a> to enrich your Rancher experience.'
9107
9178
  scaler:
9108
9179
  ariaLabel:
9109
9180
  increase: Increase {resourceName}
@@ -651,6 +651,10 @@ asyncButton:
651
651
  action: 保存
652
652
  success: 已保存
653
653
  waiting: 正在保存&hellip;
654
+ editVersion:
655
+ action: 保存更改
656
+ success: 已保存
657
+ waiting: 正在保存更改&hellip;
654
658
  enable:
655
659
  action: 启用
656
660
  success: 启用
@@ -874,8 +878,13 @@ catalog:
874
878
  windows: Windows
875
879
  search: 筛选
876
880
  install:
877
- action:
878
- goToUpgrade: 编辑/升级
881
+ warning:
882
+ managed: |-
883
+ 警告,{manager} 管理 {name} 应用的部署和升级。不支持升级此应用。<br>
884
+ {version, select,
885
+ null { }
886
+ other { 在大多数情况下,无需用户干预即可确保 {version} 版本与你正在运行的 Rancher 版本兼容。}
887
+ }
879
888
  appReadmeMissing: 此 Chart 没有其他 Chart 信息。
880
889
  appReadmeTitle: Chart 信息(Helm 自述)
881
890
  chart: Chart
@@ -941,6 +950,8 @@ catalog:
941
950
  install { 创建 }
942
951
  upgrade { 升级 }
943
952
  update { 更新 }
953
+ editVersion { 更新 }
954
+ downgrade { 降级 }
944
955
  } 这个 {existing, select,
945
956
  true { 应用 }
946
957
  false { Chart}
@@ -11,7 +11,7 @@ const SHOW = 'show';
11
11
  export default {
12
12
  name: 'ActionMenu',
13
13
 
14
- emits: ['close'],
14
+ emits: ['close', 'action-invoked'],
15
15
 
16
16
  components: { IconOrSvg },
17
17
  props: {
@@ -217,15 +217,14 @@ export default {
217
217
  // If the state of this component is controlled
218
218
  // by props instead of Vuex, we assume you wouldn't want
219
219
  // the mutation to have a dependency on Vuex either.
220
- // So in that case we use events to execute actions instead.
221
- // If an action list item is clicked, this
222
- // component emits that event, then we assume the parent
223
- // component will execute the action.
224
- this.$emit(action.action, {
225
- action,
220
+ // The parent component should handle the action based on the action property
221
+ // in the 'action-invoked' event payload.
222
+ this.$emit('action-invoked', {
223
+ action: action.action,
224
+ actionData: action,
226
225
  event,
227
226
  ...args,
228
- route: this.$route
227
+ route: this.$route
229
228
  });
230
229
  } else {
231
230
  // If the state of this component is controlled
@@ -5,7 +5,7 @@ import { useRoute } from 'vue-router';
5
5
 
6
6
  import { isAlternate } from '@shell/utils/platform';
7
7
  import { RcDropdownMenu } from '@components/RcDropdown';
8
- import { ButtonRoleProps, ButtonSizeProps } from '@components/RcButton/types';
8
+ import { ButtonVariant, ButtonSize } from '@components/RcButton/types';
9
9
  import { DropdownOption } from '@components/RcDropdown/types';
10
10
 
11
11
  defineOptions({ inheritAttrs: false });
@@ -13,8 +13,8 @@ defineOptions({ inheritAttrs: false });
13
13
  const store = useStore();
14
14
 
15
15
  type RcDropdownMenuComponentProps = {
16
- buttonRole?: keyof ButtonRoleProps;
17
- buttonSize?: keyof ButtonSizeProps;
16
+ buttonVariant?: ButtonVariant;
17
+ buttonSize?: ButtonSize;
18
18
  buttonAriaLabel?: string;
19
19
  dropdownAriaLabel?: string;
20
20
  dataTestid?: string;
@@ -30,7 +30,15 @@ const openChanged = (event: boolean) => {
30
30
  }
31
31
  };
32
32
 
33
- const emit = defineEmits<{(event: string, payload: any): void;(event: 'action-invoked'): void;}>();
33
+ export interface ActionMenuSelection {
34
+ action: string;
35
+ actionData: any;
36
+ event: MouseEvent;
37
+ route: ReturnType<typeof useRoute>;
38
+ [key: string]: any;
39
+ }
40
+
41
+ const emit = defineEmits<{(event: 'action-invoked', payload?: ActionMenuSelection): void;}>();
34
42
  const route = useRoute();
35
43
 
36
44
  const execute = (action: any, event: MouseEvent, args?: any) => {
@@ -38,7 +46,15 @@ const execute = (action: any, event: MouseEvent, args?: any) => {
38
46
  return;
39
47
  }
40
48
 
41
- emit('action-invoked');
49
+ const payload: ActionMenuSelection = {
50
+ action: action.action,
51
+ actionData: action,
52
+ event,
53
+ ...args,
54
+ route,
55
+ };
56
+
57
+ emit('action-invoked', payload);
42
58
 
43
59
  // this will come from extensions...
44
60
  if (action.invoke) {
@@ -56,24 +72,7 @@ const execute = (action: any, event: MouseEvent, args?: any) => {
56
72
  fn.apply(this, [opts, resources]);
57
73
  }
58
74
  }
59
- } else if (props.customActions) {
60
- // If the state of this component is controlled
61
- // by props instead of Vuex, we assume you wouldn't want
62
- // the mutation to have a dependency on Vuex either.
63
- // So in that case we use events to execute actions instead.
64
- // If an action list item is clicked, this
65
- // component emits that event, then we assume the parent
66
- // component will execute the action.
67
- emit(
68
- action.action,
69
- {
70
- action,
71
- event,
72
- ...args,
73
- route,
74
- }
75
- );
76
- } else {
75
+ } else if (!props.customActions) {
77
76
  // If the state of this component is controlled
78
77
  // by Vuex, mutate the store when an action is clicked.
79
78
  const opts = { alt: isAlternate(event) };
@@ -97,7 +96,7 @@ const menuOptions = () => {
97
96
 
98
97
  <template>
99
98
  <rc-dropdown-menu
100
- :button-role="buttonRole || 'link'"
99
+ :button-variant="buttonVariant || 'link'"
101
100
  :button-size="buttonSize || 'small'"
102
101
  :button-aria-label="buttonAriaLabel"
103
102
  :dropdown-aria-label="dropdownAriaLabel"
@@ -330,9 +330,6 @@ export default {
330
330
  border-color: var(--primary-border);
331
331
  }
332
332
 
333
- .CodeMirror-wrap pre {
334
- word-break: break-word;
335
- }
336
333
  .CodeMirror-code {
337
334
  .CodeMirror-line {
338
335
  &:not(:last-child)>span:after,
@@ -426,6 +423,10 @@ export default {
426
423
  .CodeMirror-gutters {
427
424
  background: inherit;
428
425
  }
426
+
427
+ .CodeMirror-wrap pre {
428
+ word-break: break-word;
429
+ }
429
430
  }
430
431
 
431
432
  .keymap.overlay {
@@ -167,8 +167,12 @@ export default {
167
167
  <h5
168
168
  v-if="labelKey"
169
169
  v-t="labelKey"
170
+ v-clean-tooltip="{content: itemLabel, popperClass: 'detail-text-tooltip'}"
170
171
  />
171
- <h5 v-else-if="label">
172
+ <h5
173
+ v-else-if="label"
174
+ v-clean-tooltip="{content: label, popperClass: 'detail-text-tooltip'}"
175
+ >
172
176
  {{ label }}
173
177
  </h5>
174
178
 
@@ -190,17 +194,22 @@ export default {
190
194
  aria-live="polite"
191
195
  />
192
196
 
193
- <span
197
+ <div
194
198
  v-else
195
- v-clean-html="bodyHtml"
196
- data-testid="detail-top_html"
197
- :class="{'conceal': concealed, 'monospace': monospace && !isBinary}"
198
- aria-live="polite"
199
- />
199
+ :class="{'conceal-wrapper': concealed}"
200
+ >
201
+ <span
202
+ v-clean-html="bodyHtml"
203
+ data-testid="detail-top_html"
204
+ :class="{'conceal': concealed, 'monospace': monospace && !isBinary}"
205
+ aria-live="polite"
206
+ />
207
+ </div>
200
208
 
201
209
  <template v-if="!isBinary && !jsonStr && isLong && !expanded">
202
210
  <a
203
211
  href="#"
212
+ class="more-characters"
204
213
  @click.prevent="expand"
205
214
  >{{ plusMore }}</a>
206
215
  </template>
@@ -238,6 +247,30 @@ export default {
238
247
  background-color: var(--input-bg);
239
248
  border-radius: var(--border-radius);
240
249
  border: solid var(--border-width) var(--input-border);
250
+ contain: inline-size;
251
+
252
+ h5 {
253
+ margin-bottom: 15px;
254
+ white-space: nowrap;
255
+ overflow: hidden;
256
+ text-overflow: ellipsis;
257
+ width: fit-content;
258
+ // Accounting for the button on the right
259
+ max-width: calc(100% - 150px);
260
+ }
261
+
262
+ // This prevents the scrollbar from overlapping the text without changing the size of the detailtext container.
263
+ $scrollBarShift: 10px;
264
+ .conceal-wrapper {
265
+ overflow-x: auto;
266
+ padding-bottom: $scrollBarShift;
267
+ margin-bottom: -$scrollBarShift;
268
+ }
269
+
270
+ .conceal {
271
+ white-space: nowrap;
272
+ display: block;
273
+ }
241
274
 
242
275
  .action-group {
243
276
  position: absolute;
@@ -267,4 +300,18 @@ export default {
267
300
  white-space: pre-wrap;
268
301
  word-wrap: break-all
269
302
  }
303
+
304
+ .more-characters {
305
+ margin-top: 8px;
306
+ display: inline-block;
307
+ }
308
+ </style>
309
+
310
+ <style lang="scss">
311
+ // The global styles for tooltips are in dashboard/shell/assets/styles/global/_tooltip.scss.
312
+ // I don't want to make this change for all tooltips since there's 149 instances as of writing this
313
+ // so I'm adding a global style here that's scoped to the class we're adding to the tooltips we have in this component.
314
+ .detail-text-tooltip.v-popper__popper.v-popper--theme-tooltip {
315
+ overflow-wrap: anywhere;
316
+ }
270
317
  </style>
@@ -3,6 +3,7 @@ import { useI18n } from '@shell/composables/useI18n';
3
3
  import { useStore } from 'vuex';
4
4
  import { computed } from 'vue';
5
5
  import { Props } from './types';
6
+ import RcButton from '@components/RcButton/RcButton.vue';
6
7
 
7
8
  const props = defineProps<Props>();
8
9
  const emit = defineEmits(['close']);
@@ -34,16 +35,20 @@ const ariaLabel = computed(() => i18n.t('component.drawer.chrome.ariaLabel.close
34
35
  <div class="body pp-4">
35
36
  <slot name="body" />
36
37
  </div>
37
- <div class="footer pp-4">
38
+ <div
39
+ v-if="!removeFooter"
40
+ class="footer pp-4"
41
+ >
38
42
  <slot name="footer">
39
43
  <div class="actions">
40
- <button
41
- class="btn role-secondary"
44
+ <RcButton
45
+ variant="secondary"
46
+ size="large"
42
47
  :aria-label="ariaLabel"
43
48
  @click="emit('close')"
44
49
  >
45
50
  {{ i18n.t('component.drawer.chrome.close') }}
46
- </button>
51
+ </RcButton>
47
52
  <slot name="additional-actions" />
48
53
  </div>
49
54
  </slot>
@@ -71,6 +76,8 @@ const ariaLabel = computed(() => i18n.t('component.drawer.chrome.ariaLabel.close
71
76
  height: var(--header-height);
72
77
 
73
78
  & > .title {
79
+ display: flex;
80
+ align-items: center;
74
81
  flex: 1;
75
82
  font-size: 16px;
76
83
  }
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ </script>
3
+
4
+ <template>
5
+ <div class="drawer-card">
6
+ <slot />
7
+ </div>
8
+ </template>
9
+
10
+ <style lang="scss" scoped>
11
+ .drawer-card {
12
+ background-color: var(--body-bg);
13
+ border-radius: var(--border-radius-md);
14
+ padding: 16px;
15
+ max-width: 100%;
16
+ width: 100%;
17
+ position: relative;
18
+ }
19
+ </style>