@rancher/shell 0.3.0 → 0.3.1

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 (322) hide show
  1. package/assets/styles/global/_button.scss +5 -1
  2. package/assets/styles/global/_columns.scss +4 -0
  3. package/assets/styles/global/_layout.scss +1 -2
  4. package/assets/styles/global/_select.scss +1 -4
  5. package/assets/styles/themes/_dark.scss +4 -4
  6. package/assets/styles/themes/_light.scss +4 -3
  7. package/assets/styles/themes/_suse.scss +1 -1
  8. package/assets/styles/vendor/vue-select.scss +4 -3
  9. package/assets/translations/en-us.yaml +669 -73
  10. package/assets/translations/zh-hans.yaml +547 -165
  11. package/chart/monitoring/steps/uninstall-v1.vue +2 -2
  12. package/cloud-credential/azure.vue +23 -0
  13. package/cloud-credential/harvester.vue +25 -62
  14. package/cloud-credential/pnap.vue +80 -0
  15. package/components/.DS_Store +0 -0
  16. package/components/AdvancedSection.vue +9 -2
  17. package/components/Alert.vue +2 -2
  18. package/components/ButtonDropdown.vue +0 -2
  19. package/components/ButtonGroup.vue +1 -0
  20. package/components/CollapsibleCard.vue +0 -1
  21. package/components/CruResource.vue +41 -4
  22. package/components/DetailTop.vue +58 -3
  23. package/components/DisableAuthProviderModal.vue +106 -0
  24. package/{rancher-components/components/Utils/DraggableZone → components}/DraggableZone.vue +0 -0
  25. package/components/ExplorerMembers.vue +253 -30
  26. package/components/ExplorerProjectsNamespaces.vue +77 -33
  27. package/components/GrowlManager.vue +3 -3
  28. package/components/IconOrSvg.vue +149 -0
  29. package/components/LogItem.vue +69 -0
  30. package/components/PodSecurityAdmission.vue +302 -0
  31. package/components/PromptModal.vue +1 -0
  32. package/components/ResourceDetail/Masthead.vue +54 -2
  33. package/components/ResourceDetail/index.vue +12 -5
  34. package/components/ResourceList/Masthead.vue +11 -1
  35. package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
  36. package/components/ResourceList/index.vue +53 -12
  37. package/components/ResourceList/resource-list.config.js +7 -0
  38. package/components/ResourceTable.vue +31 -6
  39. package/components/SimpleBox.vue +1 -1
  40. package/components/SortableTable/THead.vue +15 -5
  41. package/components/SortableTable/index.vue +21 -10
  42. package/components/Tabbed/index.vue +20 -15
  43. package/components/__tests__/.DS_Store +0 -0
  44. package/components/__tests__/AsyncButton.test.ts +140 -0
  45. package/components/__tests__/BackLink.test.ts +33 -0
  46. package/components/__tests__/ButtonGroup.test.ts +124 -0
  47. package/components/__tests__/ClusterBadge.test.ts +32 -0
  48. package/components/__tests__/CollapsibleCard.test.ts +64 -0
  49. package/components/__tests__/ConsumptionGauge.test.ts +88 -0
  50. package/components/__tests__/CruResource.test.ts +3 -2
  51. package/components/__tests__/FixedBanner.test.ts +129 -0
  52. package/components/__tests__/GrowlManager.test.ts +147 -0
  53. package/components/__tests__/NamespaceFilter.test.ts +33 -25
  54. package/components/__tests__/PercentageBar.test.ts +32 -0
  55. package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
  56. package/components/auth/AuthBanner.vue +20 -10
  57. package/components/auth/RoleDetailEdit.vue +26 -17
  58. package/components/auth/SelectPrincipal.vue +36 -5
  59. package/components/form/ArrayList.vue +3 -35
  60. package/components/form/ArrayListGrouped.vue +13 -4
  61. package/components/form/ArrayListSelect.vue +5 -5
  62. package/components/form/Error.vue +8 -0
  63. package/components/form/KeyValue.vue +39 -7
  64. package/components/form/LabeledSelect.vue +5 -2
  65. package/components/form/Labels.vue +46 -16
  66. package/components/form/Members/ClusterPermissionsEditor.vue +17 -17
  67. package/components/form/Members/MembershipEditor.vue +12 -12
  68. package/components/form/NameNsDescription.vue +1 -1
  69. package/components/form/NodeScheduling.vue +1 -1
  70. package/components/form/Probe.vue +3 -3
  71. package/components/form/ResourceQuota/Project.vue +6 -6
  72. package/components/form/ResourceTabs/index.vue +1 -6
  73. package/components/form/Security.vue +7 -6
  74. package/components/form/Select.vue +3 -2
  75. package/components/form/SelectOrCreateAuthSecret.vue +22 -29
  76. package/components/form/ServicePorts.vue +8 -0
  77. package/components/form/WorkloadPorts.vue +7 -1
  78. package/components/form/__tests__/ArrayList.test.ts +74 -0
  79. package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
  80. package/components/formatter/Checked.vue +1 -1
  81. package/components/formatter/ClusterLink.vue +5 -0
  82. package/components/formatter/IconIsDefault.vue +2 -2
  83. package/components/formatter/InternalExternalIP.vue +11 -8
  84. package/components/formatter/LiveDuration.vue +78 -0
  85. package/components/formatter/WorkloadHealthScale.vue +5 -3
  86. package/components/nav/Header.vue +6 -3
  87. package/components/nav/NamespaceFilter.vue +146 -63
  88. package/components/nav/TopLevelMenu.vue +22 -19
  89. package/components/nav/WindowManager/ContainerLogs.vue +83 -126
  90. package/components/nav/WindowManager/ContainerShell.vue +9 -7
  91. package/components/nav/WindowManager/Window.vue +2 -0
  92. package/components/nav/WindowManager/index.vue +10 -0
  93. package/config/elemental-types.js +9 -0
  94. package/config/features.js +2 -0
  95. package/config/home-links.js +4 -1
  96. package/config/pod-security-admission.ts +82 -0
  97. package/config/product/apps.js +1 -1
  98. package/config/product/auth.js +6 -5
  99. package/config/product/explorer.js +6 -6
  100. package/config/product/fleet.js +1 -1
  101. package/config/product/manager.js +6 -2
  102. package/config/secret.js +0 -1
  103. package/config/settings.ts +26 -9
  104. package/config/table-headers.js +22 -11
  105. package/config/types.js +4 -1
  106. package/content/docs/zh-hans/getting-started.md +113 -137
  107. package/content/docs/zh-hans/whats-new.md +8 -46
  108. package/creators/pkg/package-lock.json +37 -0
  109. package/creators/pkg/package.json +1 -1
  110. package/detail/catalog.cattle.io.app.vue +1 -1
  111. package/detail/pod.vue +1 -1
  112. package/detail/provisioning.cattle.io.cluster.vue +35 -9
  113. package/detail/service.vue +2 -9
  114. package/detail/workload/index.vue +0 -1
  115. package/dialog/AddClusterMemberDialog.vue +22 -28
  116. package/dialog/AddProjectMemberDialog.vue +53 -9
  117. package/dialog/DiagnosticTimingsDialog.vue +8 -7
  118. package/dialog/DrainNode.vue +44 -48
  119. package/dialog/ForceMachineRemoveDialog.vue +5 -7
  120. package/dialog/GenericPrompt.vue +15 -20
  121. package/dialog/RollbackWorkloadDialog.vue +15 -46
  122. package/dialog/RotateCertificatesDialog.vue +5 -7
  123. package/dialog/RotateEncryptionKeyDialog.vue +5 -9
  124. package/dialog/SaveAsRKETemplateDialog.vue +5 -13
  125. package/dialog/ScaleMachineDownDialog.vue +1 -1
  126. package/dialog/ScalePoolDownDialog.vue +121 -0
  127. package/edit/__tests__/management.cattle.io.setting.test.ts +3 -3
  128. package/edit/auth/azuread.vue +16 -16
  129. package/edit/auth/github.vue +8 -0
  130. package/edit/auth/googleoauth.vue +10 -1
  131. package/edit/auth/ldap/index.vue +10 -0
  132. package/edit/auth/oidc.vue +10 -0
  133. package/edit/auth/saml.vue +10 -0
  134. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  135. package/edit/cloudcredential.vue +3 -7
  136. package/edit/logging-flow/Match.vue +39 -8
  137. package/edit/logging-flow/index.vue +27 -4
  138. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
  139. package/edit/management.cattle.io.project.vue +8 -1
  140. package/edit/management.cattle.io.setting.vue +5 -2
  141. package/edit/management.cattle.io.user.vue +7 -1
  142. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +23 -7
  143. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +2 -2
  144. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
  145. package/edit/namespace.vue +18 -4
  146. package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
  147. package/edit/networking.k8s.io.ingress/IngressClass.vue +8 -6
  148. package/edit/networking.k8s.io.ingress/RulePath.vue +12 -6
  149. package/edit/networking.k8s.io.ingress/index.vue +8 -6
  150. package/edit/persistentvolume/index.vue +30 -27
  151. package/edit/persistentvolume/plugins/cephfs.vue +29 -29
  152. package/edit/persistentvolume/plugins/csi.vue +102 -62
  153. package/edit/persistentvolume/plugins/fc.vue +19 -19
  154. package/edit/persistentvolume/plugins/iscsi.vue +45 -45
  155. package/edit/persistentvolume/plugins/rbd.vue +39 -39
  156. package/edit/persistentvolumeclaim.vue +78 -75
  157. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +11 -7
  158. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
  159. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
  160. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
  161. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +93 -0
  162. package/edit/provisioning.cattle.io.cluster/import.vue +1 -1
  163. package/edit/provisioning.cattle.io.cluster/index.vue +29 -6
  164. package/edit/provisioning.cattle.io.cluster/rke2.vue +440 -152
  165. package/edit/secret/index.vue +3 -7
  166. package/edit/service.vue +3 -1
  167. package/edit/storage.k8s.io.storageclass/index.vue +100 -16
  168. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
  169. package/edit/workload/__tests__/index.test.ts +98 -0
  170. package/edit/workload/index.vue +58 -8
  171. package/edit/workload/mixins/workload.js +107 -70
  172. package/edit/workload/storage/ContainerMountPaths.vue +0 -10
  173. package/edit/workload/storage/emptyDir.vue +88 -0
  174. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  175. package/edit/workload/storage/index.vue +8 -0
  176. package/edit/workload/storage/persistentVolumeClaim/index.vue +1 -1
  177. package/layouts/default.vue +57 -44
  178. package/list/__tests__/workload.test.ts +5 -2
  179. package/list/catalog.cattle.io.app.vue +1 -0
  180. package/list/cis.cattle.io.clusterscan.vue +1 -0
  181. package/list/fleet.cattle.io.bundle.vue +5 -6
  182. package/list/fleet.cattle.io.cluster.vue +6 -3
  183. package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
  184. package/list/fleet.cattle.io.gitrepo.vue +4 -9
  185. package/list/helm.cattle.io.projecthelmchart.vue +1 -5
  186. package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
  187. package/list/logging.banzaicloud.io.flow.vue +6 -5
  188. package/list/management.cattle.io.cluster.vue +1 -0
  189. package/list/management.cattle.io.feature.vue +3 -4
  190. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
  191. package/list/management.cattle.io.setting.vue +2 -2
  192. package/list/management.cattle.io.user.vue +4 -10
  193. package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
  194. package/list/node.vue +8 -5
  195. package/list/persistentvolume.vue +3 -3
  196. package/list/persistentvolumeclaim.vue +3 -4
  197. package/list/provisioning.cattle.io.cluster.vue +18 -19
  198. package/list/service.vue +6 -14
  199. package/list/workload.vue +43 -38
  200. package/machine-config/azure.vue +429 -60
  201. package/machine-config/pnap.vue +288 -0
  202. package/mixins/auth-config.js +1 -3
  203. package/mixins/browser-tab-visibility.js +8 -14
  204. package/mixins/chart.js +1 -1
  205. package/mixins/create-edit-view/impl.js +4 -0
  206. package/mixins/create-edit-view/index.js +4 -2
  207. package/mixins/resource-fetch-namespaced.js +98 -0
  208. package/mixins/resource-fetch.js +79 -45
  209. package/mixins/resource-manager.js +1 -23
  210. package/models/apps.controllerrevision.js +7 -0
  211. package/models/apps.daemonset.js +18 -0
  212. package/models/apps.deployment.js +44 -0
  213. package/models/apps.replicaset.js +7 -0
  214. package/models/apps.statefulset.js +18 -0
  215. package/models/batch.job.js +7 -14
  216. package/models/cluster/node.js +10 -2
  217. package/models/cluster.x-k8s.io.machine.js +26 -4
  218. package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
  219. package/models/event.js +7 -0
  220. package/models/logging.banzaicloud.io.flow.js +4 -0
  221. package/models/management.cattle.io.cluster.js +1 -1
  222. package/models/management.cattle.io.clusterroletemplatebinding.js +1 -1
  223. package/models/management.cattle.io.globalrole.js +2 -2
  224. package/models/management.cattle.io.node.js +37 -2
  225. package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
  226. package/models/management.cattle.io.project.js +30 -11
  227. package/models/management.cattle.io.setting.js +1 -1
  228. package/models/management.cattle.io.user.js +37 -1
  229. package/models/namespace.js +42 -5
  230. package/models/persistentvolume.js +14 -2
  231. package/models/pod.js +15 -0
  232. package/models/projectroletemplatebinding.js +7 -0
  233. package/models/provisioning.cattle.io.cluster.js +61 -10
  234. package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
  235. package/models/service.js +14 -13
  236. package/models/storage.k8s.io.storageclass.js +33 -18
  237. package/models/workload.js +38 -7
  238. package/nuxt.config.js +27 -17
  239. package/package.json +7 -7
  240. package/pages/about.vue +14 -2
  241. package/pages/c/_cluster/apps/charts/index.vue +4 -3
  242. package/pages/c/_cluster/apps/charts/install.vue +59 -22
  243. package/pages/c/_cluster/auth/config/_id.vue +6 -0
  244. package/pages/c/_cluster/auth/config/index.vue +8 -6
  245. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
  246. package/pages/c/_cluster/auth/roles/index.vue +1 -1
  247. package/pages/c/_cluster/explorer/index.vue +12 -6
  248. package/pages/c/_cluster/longhorn/index.vue +1 -1
  249. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
  250. package/pages/c/_cluster/monitoring/index.vue +1 -1
  251. package/pages/c/_cluster/neuvector/index.vue +1 -1
  252. package/pages/c/_cluster/settings/performance.vue +48 -2
  253. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +34 -1
  254. package/pages/c/_cluster/uiplugins/index.vue +28 -2
  255. package/pages/diagnostic.vue +5 -4
  256. package/pages/home.vue +105 -30
  257. package/pages/prefs.vue +23 -12
  258. package/pages/rio/mesh.vue +1 -1
  259. package/pkg/dynamic-importer.lib.js +8 -0
  260. package/pkg/vue.config.js +4 -0
  261. package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
  262. package/plugins/dashboard-store/actions.js +32 -25
  263. package/plugins/dashboard-store/getters.js +50 -33
  264. package/plugins/dashboard-store/mutations.js +134 -28
  265. package/plugins/dashboard-store/resource-class.js +21 -41
  266. package/plugins/steve/actions.js +30 -0
  267. package/plugins/steve/caches/resourceCache.js +60 -0
  268. package/plugins/steve/getters.js +44 -1
  269. package/plugins/steve/mutations.js +97 -36
  270. package/plugins/steve/resourceWatcher.js +277 -0
  271. package/plugins/steve/schema.utils.js +25 -0
  272. package/plugins/steve/subscribe.js +288 -115
  273. package/plugins/steve/worker/index.js +17 -0
  274. package/plugins/steve/worker/web-worker.advanced.js +302 -0
  275. package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +3 -44
  276. package/rancher-components/Card/Card.vue +3 -3
  277. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  278. package/rancher-components/StringList/StringList.test.ts +45 -420
  279. package/rancher-components/StringList/StringList.vue +1 -10
  280. package/rancher-components/components/Banner/Banner.test.ts +44 -0
  281. package/rancher-components/components/Banner/Banner.vue +129 -61
  282. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +13 -22
  283. package/rancher-components/components/Form/Checkbox/Checkbox.vue +8 -6
  284. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +9 -9
  285. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -1
  286. package/rancher-components/components/StringList/StringList.test.ts +7 -7
  287. package/rancher-components/components/StringList/StringList.vue +21 -15
  288. package/scripts/test-plugins-build.sh +8 -0
  289. package/static/loading-indicator.html +1 -1
  290. package/store/index.js +54 -3
  291. package/store/plugins.js +0 -17
  292. package/store/pnap.js +128 -0
  293. package/store/prefs.js +4 -2
  294. package/store/type-map.js +55 -13
  295. package/types/pod-security-admission.ts +36 -0
  296. package/types/shell/index.d.ts +496 -396
  297. package/utils/__tests__/object.test.ts +17 -1
  298. package/utils/__tests__/pod-security-admission.test.ts +61 -0
  299. package/utils/async.ts +36 -0
  300. package/utils/color.js +45 -0
  301. package/utils/crypto/browserHashUtils.js +18 -0
  302. package/utils/dynamic-importer.js +8 -0
  303. package/utils/install-redirect.js +1 -1
  304. package/utils/object.js +24 -0
  305. package/utils/pod-security-admission.ts +39 -0
  306. package/utils/socket.js +61 -24
  307. package/utils/string.js +2 -0
  308. package/utils/svg-filter.js +301 -0
  309. package/utils/time.js +49 -0
  310. package/utils/validators/cidr.js +4 -0
  311. package/utils/validators/formRules/__tests__/index.test.ts +23 -3
  312. package/utils/validators/formRules/index.ts +14 -0
  313. package/config/product/harvester-manager.js +0 -162
  314. package/edit/harvesterhci.io.management.cluster.vue +0 -153
  315. package/list/harvesterhci.io.management.cluster.vue +0 -241
  316. package/machine-config/harvester.vue +0 -693
  317. package/models/harvesterhci.io.management.cluster.js +0 -228
  318. package/pages/c/_cluster/harvesterManager/index.vue +0 -24
  319. package/rancher-components/Card/Card.test.ts +0 -39
  320. package/rancher-components/Utils/DraggableZone/DraggableZone.vue +0 -181
  321. package/rancher-components/Utils/DraggableZone/index.ts +0 -1
  322. package/rancher-components/components/Utils/DraggableZone/index.ts +0 -1
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@rancher/create-pkg",
3
+ "version": "0.1.37",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "fs-extra": {
8
+ "version": "10.1.0",
9
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
10
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
11
+ "requires": {
12
+ "graceful-fs": "^4.2.0",
13
+ "jsonfile": "^6.0.1",
14
+ "universalify": "^2.0.0"
15
+ }
16
+ },
17
+ "graceful-fs": {
18
+ "version": "4.2.10",
19
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
20
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
21
+ },
22
+ "jsonfile": {
23
+ "version": "6.1.0",
24
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
25
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
26
+ "requires": {
27
+ "graceful-fs": "^4.1.6",
28
+ "universalify": "^2.0.0"
29
+ }
30
+ },
31
+ "universalify": {
32
+ "version": "2.0.0",
33
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
34
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
35
+ }
36
+ }
37
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rancher/create-pkg",
3
3
  "description": "Rancher UI Package generator",
4
- "version": "0.0.0",
4
+ "version": "0.0.1",
5
5
  "license": "Apache-2.0",
6
6
  "author": "SUSE",
7
7
  "private": false,
@@ -30,7 +30,7 @@ export default {
30
30
  },
31
31
 
32
32
  async fetch() {
33
- await this.$store.dispatch('catalog/load');
33
+ await this.$store.dispatch('catalog/load', { force: true, reset: true });
34
34
 
35
35
  this.allOperations = await this.$store.dispatch('cluster/findAll', { type: CATALOG.OPERATION });
36
36
  },
package/detail/pod.vue CHANGED
@@ -98,7 +98,7 @@ export default {
98
98
  stateDisplay: status ? this.value.containerStateDisplay(status) : undefined,
99
99
  stateBackground: status ? this.value.containerStateColor(status).replace('text', 'bg') : undefined,
100
100
  nameSort: sortableNumericSuffix(container.name).toLowerCase(),
101
- readyIcon: status?.ready ? 'icon-checkmark icon-2x text-success ml-5' : 'icon-x icon-2x text-error ml-5',
101
+ readyIcon: status?.ready ? 'icon-checkmark text-success ml-5' : 'icon-x text-error ml-5',
102
102
  availableActions: this.value.containerActions,
103
103
  stateObj: status, // Required if there's a description
104
104
  stateDescription: descriptions.join(' | '), // Required to display the description
@@ -9,7 +9,7 @@ import Tab from '@shell/components/Tabbed/Tab';
9
9
  import { allHash } from '@shell/utils/promise';
10
10
  import { CAPI, MANAGEMENT, NORMAN, SNAPSHOT } from '@shell/config/types';
11
11
  import {
12
- STATE, NAME as NAME_COL, AGE, AGE_NORMAN, STATE_NORMAN, ROLES, MACHINE_NODE_OS, MANAGEMENT_NODE_OS, NAME, IP_ADDRESS
12
+ STATE, NAME as NAME_COL, AGE, AGE_NORMAN, INTERNAL_EXTERNAL_IP, STATE_NORMAN, ROLES, MACHINE_NODE_OS, MANAGEMENT_NODE_OS, NAME,
13
13
  } from '@shell/config/table-headers';
14
14
  import CustomCommand from '@shell/edit/provisioning.cattle.io.cluster/CustomCommand';
15
15
  import AsyncButton from '@shell/components/AsyncButton.vue';
@@ -17,7 +17,7 @@ import AnsiUp from 'ansi_up';
17
17
  import day from 'dayjs';
18
18
  import { addParams } from '@shell/utils/url';
19
19
  import { base64Decode } from '@shell/utils/crypto';
20
- import { DATE_FORMAT, TIME_FORMAT } from '@shell/store/prefs';
20
+ import { DATE_FORMAT, TIME_FORMAT, SCALE_POOL_PROMPT } from '@shell/store/prefs';
21
21
  import { escapeHtml } from '@shell/utils/string';
22
22
  import MachineSummaryGraph from '@shell/components/formatter/MachineSummaryGraph';
23
23
  import Socket, {
@@ -29,6 +29,7 @@ import Socket, {
29
29
  } from '@shell/utils/socket';
30
30
  import { get } from '@shell/utils/object';
31
31
  import CapiMachineDeployment from '@shell/models/cluster.x-k8s.io.machinedeployment';
32
+ import { isAlternate } from '@shell/utils/platform';
32
33
 
33
34
  let lastId = 1;
34
35
  const ansiup = new AnsiUp();
@@ -253,7 +254,9 @@ export default {
253
254
  const emptyPools = (this.value.spec.rkeConfig?.machinePools || []).filter((mp) => {
254
255
  const machinePrefix = `${ this.value.name }-${ mp.name }`;
255
256
  const machines = this.value.machines.filter((machine) => {
256
- return machine.spec?.infrastructureRef?.name.startsWith(machinePrefix);
257
+ const isElementalCluster = machine.spec?.infrastructureRef?.apiVersion.startsWith('elemental.cattle.io');
258
+
259
+ return !isElementalCluster ? machine.spec?.infrastructureRef?.name.startsWith(machinePrefix) : machine.spec?.infrastructureRef?.name.includes(machinePrefix);
257
260
  });
258
261
 
259
262
  return machines.length === 0;
@@ -356,7 +359,7 @@ export default {
356
359
  formatterOpts: { reference: 'kubeNodeDetailLocation' },
357
360
  dashIfEmpty: true,
358
361
  },
359
- IP_ADDRESS,
362
+ INTERNAL_EXTERNAL_IP,
360
363
  MACHINE_NODE_OS,
361
364
  ROLES,
362
365
  AGE,
@@ -375,7 +378,7 @@ export default {
375
378
  formatterOpts: { reference: 'kubeNodeDetailLocation' },
376
379
  dashIfEmpty: true,
377
380
  },
378
- IP_ADDRESS,
381
+ INTERNAL_EXTERNAL_IP,
379
382
  MANAGEMENT_NODE_OS,
380
383
  ROLES,
381
384
  AGE
@@ -500,6 +503,24 @@ export default {
500
503
  },
501
504
 
502
505
  methods: {
506
+ toggleScaleDownModal( event, resources ) {
507
+ // Check if the user held alt key when an action is clicked.
508
+ const alt = isAlternate(event);
509
+ const showScalePoolPrompt = this.$store.getters['prefs/get'](SCALE_POOL_PROMPT);
510
+
511
+ // Prompt if showScalePoolPrompt pref not store and user did not held alt key
512
+ if (!alt && !showScalePoolPrompt) {
513
+ this.$store.dispatch('management/promptModal', {
514
+ component: 'ScalePoolDownDialog',
515
+ resources,
516
+ modalWidth: '450px'
517
+ });
518
+ } else {
519
+ // User held alt key, so don't prompt
520
+ resources.scalePool(-1);
521
+ }
522
+ },
523
+
503
524
  async takeSnapshot(btnCb) {
504
525
  try {
505
526
  await this.value.takeSnapshot();
@@ -679,16 +700,21 @@ export default {
679
700
  </div>
680
701
  </div>
681
702
  <div
682
- v-if="group.ref"
683
- class="right mr-45"
703
+ v-if="group.ref && poolSummaryInfo[group.ref]"
704
+ class="right group-header-buttons mr-20"
684
705
  >
706
+ <MachineSummaryGraph
707
+ :row="poolSummaryInfo[group.ref]"
708
+ :horizontal="true"
709
+ class="mr-20"
710
+ />
685
711
  <template v-if="value.hasLink('update') && group.ref.showScalePool">
686
712
  <button
687
713
  v-tooltip="t('node.list.scaleDown')"
688
714
  :disabled="!group.ref.canScaleDownPool()"
689
715
  type="button"
690
716
  class="btn btn-sm role-secondary"
691
- @click="group.ref.scalePool(-1)"
717
+ @click="toggleScaleDownModal($event, group.ref)"
692
718
  >
693
719
  <i class="icon icon-sm icon-minus" />
694
720
  </button>
@@ -772,7 +798,7 @@ export default {
772
798
  :disabled="group.ref.spec.quantity < 2"
773
799
  type="button"
774
800
  class="btn btn-sm role-secondary"
775
- @click="group.ref.scalePool(-1)"
801
+ @click="toggleScaleDownModal($event, group.ref)"
776
802
  >
777
803
  <i class="icon icon-sm icon-minus" />
778
804
  </button>
@@ -11,7 +11,6 @@ import Tab from '@shell/components/Tabbed/Tab';
11
11
  import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
12
12
  import { KEY, VALUE } from '@shell/config/table-headers';
13
13
  import { POD } from '@shell/config/types';
14
- import { allHash } from '@shell/utils/promise';
15
14
  import { findBy } from '@shell/utils/array';
16
15
 
17
16
  export default {
@@ -36,13 +35,7 @@ export default {
36
35
  },
37
36
 
38
37
  async fetch() {
39
- const hash = { pods: this.value.pods() };
40
-
41
- const res = await allHash(hash);
42
-
43
- for (const k in res) {
44
- this[k] = res[k];
45
- }
38
+ await this.value.fetchPods();
46
39
  },
47
40
 
48
41
  data() {
@@ -159,7 +152,7 @@ export default {
159
152
  :weight="4"
160
153
  >
161
154
  <ResourceTable
162
- :rows="pods"
155
+ :rows="value.pods"
163
156
  :headers="podTableHeaders"
164
157
  key-field="id"
165
158
  :table-actions="false"
@@ -373,7 +373,6 @@ export default {
373
373
  </div>
374
374
  <ResourceTabs
375
375
  :value="value"
376
- :always-show-events="true"
377
376
  >
378
377
  <Tab
379
378
  v-if="isCronJob"
@@ -9,9 +9,9 @@ export default {
9
9
  },
10
10
 
11
11
  props: {
12
- resources: {
13
- type: Array,
14
- required: true
12
+ onAdd: {
13
+ type: Function,
14
+ default: () => {}
15
15
  }
16
16
  },
17
17
 
@@ -19,12 +19,6 @@ export default {
19
19
  return { bindings: [] };
20
20
  },
21
21
 
22
- computed: {
23
- onAdd() {
24
- return this.resources[0];
25
- },
26
- },
27
-
28
22
  methods: {
29
23
  close() {
30
24
  this.$emit('close');
@@ -39,33 +33,33 @@ export default {
39
33
  </script>
40
34
 
41
35
  <template>
42
- <Card
43
- class="prompt-rotate"
44
- :show-highlight-border="false"
36
+ <Card
37
+ class="prompt-rotate"
38
+ :show-highlight-border="false"
45
39
  >
46
- <h4
47
- slot="title"
48
- class="text-default-text"
49
- v-html="t('addClusterMemberDialog.title')"
40
+ <h4
41
+ slot="title"
42
+ class="text-default-text"
43
+ v-html="t('addClusterMemberDialog.title')"
50
44
  />
51
45
 
52
- <div
53
- slot="body"
54
- class="pl-10 pr-10"
46
+ <div
47
+ slot="body"
48
+ class="pl-10 pr-10"
55
49
  >
56
- <ClusterPermissionsEditor
57
- v-model="bindings"
58
- :use-two-columns-for-custom="true"
50
+ <ClusterPermissionsEditor
51
+ v-model="bindings"
52
+ :use-two-columns-for-custom="true"
59
53
  />
60
54
  </div>
61
55
 
62
- <div
63
- slot="actions"
64
- class="buttons"
56
+ <div
57
+ slot="actions"
58
+ class="buttons"
65
59
  >
66
- <button
67
- class="btn role-secondary mr-10"
68
- @click="close"
60
+ <button
61
+ class="btn role-secondary mr-10"
62
+ @click="close"
69
63
  >
70
64
  {{ t('generic.cancel') }}
71
65
  </button>
@@ -1,18 +1,37 @@
1
1
  <script>
2
2
  import { Card } from '@components/Card';
3
3
  import ProjectMemberEditor from '@shell/components/form/ProjectMemberEditor';
4
+ import AsyncButton from '@shell/components/AsyncButton';
5
+ import Banner from '@components/Banner/Banner.vue';
4
6
  import { NORMAN } from '@shell/config/types';
5
7
 
6
8
  export default {
7
9
  components: {
8
10
  Card,
9
- ProjectMemberEditor
11
+ ProjectMemberEditor,
12
+ AsyncButton,
13
+ Banner
10
14
  },
11
15
 
12
16
  props: {
13
17
  resources: {
14
18
  type: Array,
15
19
  required: true
20
+ },
21
+
22
+ onAdd: {
23
+ type: Function,
24
+ default: () => {}
25
+ },
26
+
27
+ projectId: {
28
+ type: String,
29
+ default: null
30
+ },
31
+
32
+ saveInModal: {
33
+ type: Boolean,
34
+ default: false
16
35
  }
17
36
  },
18
37
 
@@ -22,17 +41,13 @@ export default {
22
41
  permissionGroup: 'member',
23
42
  custom: {},
24
43
  principalId: '',
25
- projectId: null,
26
44
  roleTemplateIds: []
27
- }
45
+ },
46
+ error: null
28
47
  };
29
48
  },
30
49
 
31
50
  computed: {
32
- onAdd() {
33
- return this.resources[0];
34
- },
35
-
36
51
  principal() {
37
52
  const principalId = this.member.principalId.replace(/\//g, '%2F');
38
53
 
@@ -66,10 +81,26 @@ export default {
66
81
  type: NORMAN.PROJECT_ROLE_TEMPLATE_BINDING,
67
82
  roleTemplateId,
68
83
  [principalProperty]: this.member.principalId,
69
- projectId: this.member.projectId,
84
+ projectId: this.projectId,
70
85
  }));
71
86
 
72
87
  return Promise.all(promises);
88
+ },
89
+
90
+ saveBindings(btnCB) {
91
+ this.error = null;
92
+ this.createBindings()
93
+ .then((bindings) => {
94
+ return Promise.all(bindings.map(b => b.save()));
95
+ })
96
+ .then(() => {
97
+ btnCB(true);
98
+ setTimeout(this.close, 500);
99
+ })
100
+ .catch((err) => {
101
+ this.error = err;
102
+ btnCB(false);
103
+ });
73
104
  }
74
105
  }
75
106
  };
@@ -89,8 +120,14 @@ export default {
89
120
 
90
121
  <div
91
122
  slot="body"
92
- class="pl-10 pr-10 pb-10"
123
+ class="pl-10 pr-10"
93
124
  >
125
+ <Banner
126
+ v-if="error"
127
+ color="error"
128
+ >
129
+ {{ error }}
130
+ </Banner>
94
131
  <ProjectMemberEditor
95
132
  v-model="member"
96
133
  :use-two-columns-for-custom="true"
@@ -108,7 +145,14 @@ export default {
108
145
  {{ t('generic.cancel') }}
109
146
  </button>
110
147
 
148
+ <AsyncButton
149
+ v-if="saveInModal"
150
+ mode="create"
151
+ @click="cb=>saveBindings(cb)"
152
+ />
153
+
111
154
  <button
155
+ v-else
112
156
  class="btn role-primary"
113
157
  @click="apply"
114
158
  >
@@ -13,8 +13,12 @@ export default {
13
13
  },
14
14
 
15
15
  props: {
16
- resources: {
17
- type: Array,
16
+ downloadData: {
17
+ type: Function,
18
+ required: true
19
+ },
20
+ gatherResponseTimes: {
21
+ type: Function,
18
22
  required: true
19
23
  }
20
24
  },
@@ -24,9 +28,6 @@ export default {
24
28
  },
25
29
 
26
30
  computed: {
27
- config() {
28
- return this.resources[0];
29
- },
30
31
 
31
32
  applyMode() {
32
33
  return 'diagnostic';
@@ -48,7 +49,7 @@ export default {
48
49
 
49
50
  apply(btnCb) {
50
51
  try {
51
- this.config.downloadData(btnCb);
52
+ this.downloadData(btnCb);
52
53
  this.close();
53
54
  } catch (err) {
54
55
  console.error(err); // eslint-disable-line
@@ -84,7 +85,7 @@ export default {
84
85
  <AsyncButton
85
86
  mode="timing"
86
87
  class="row mt-20"
87
- @click="config.gatherResponseTimes"
88
+ @click="gatherResponseTimes"
88
89
  />
89
90
  </div>
90
91
  </slot>
@@ -19,9 +19,14 @@ export default {
19
19
  },
20
20
 
21
21
  props: {
22
- resources: {
23
- type: Array,
24
- required: true
22
+ kubeNodes: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+
27
+ normanNodeId: {
28
+ type: String,
29
+ default: ''
25
30
  }
26
31
  },
27
32
 
@@ -66,15 +71,6 @@ export default {
66
71
  };
67
72
  },
68
73
 
69
- computed: {
70
- kubeNodes() {
71
- return this.resources[0];
72
- },
73
- normanNodeId() {
74
- return this.resources[1];
75
- },
76
- },
77
-
78
74
  watch: {
79
75
  gracePeriod(neu) {
80
76
  if (neu && !this.body.gracePeriod) {
@@ -130,13 +126,13 @@ export default {
130
126
  </script>
131
127
 
132
128
  <template>
133
- <Card
134
- class="prompt-rotate"
135
- :show-highlight-border="false"
129
+ <Card
130
+ class="prompt-rotate"
131
+ :show-highlight-border="false"
136
132
  >
137
- <h4
138
- slot="title"
139
- class="text-default-text"
133
+ <h4
134
+ slot="title"
135
+ class="text-default-text"
140
136
  >
141
137
  <template v-if="kubeNodes.length > 1">
142
138
  {{ t('drainNode.titleMultiple', { count: kubeNodes.length }) }}
@@ -146,9 +142,9 @@ export default {
146
142
  </template>
147
143
  </h4>
148
144
 
149
- <div
150
- slot="body"
151
- class="pl-10 pr-10"
145
+ <div
146
+ slot="body"
147
+ class="pl-10 pr-10"
152
148
  >
153
149
  <div>
154
150
  <RadioGroup
@@ -162,22 +158,22 @@ export default {
162
158
  <h5>{{ t('drainNode.deleteLocalData') }}</h5>
163
159
  </template>
164
160
  </RadioGroup>
165
- <RadioGroup
166
- v-model="body.force"
167
- name="force"
168
- :options="radioOptions"
169
- :row="true"
170
- class="mb-15"
161
+ <RadioGroup
162
+ v-model="body.force"
163
+ name="force"
164
+ :options="radioOptions"
165
+ :row="true"
166
+ class="mb-15"
171
167
  >
172
168
  <template #label>
173
169
  <h5>{{ t('drainNode.force') }}</h5>
174
170
  </template>
175
171
  </RadioGroup>
176
- <RadioGroup
177
- v-model="gracePeriod"
178
- name="gracePeriod"
179
- :options="gracePeriodOptions"
180
- class="mb-15"
172
+ <RadioGroup
173
+ v-model="gracePeriod"
174
+ name="gracePeriod"
175
+ :options="gracePeriodOptions"
176
+ class="mb-15"
181
177
  >
182
178
  <template #label>
183
179
  <h5>{{ t('drainNode.gracePeriod.title') }}</h5>
@@ -192,11 +188,11 @@ export default {
192
188
  :placeholder="t('drainNode.gracePeriod.placeholder')"
193
189
  class="mb-10"
194
190
  />
195
- <RadioGroup
196
- v-model="timeout"
197
- name="timeout"
198
- :options="timeoutOptions"
199
- class="mb-15"
191
+ <RadioGroup
192
+ v-model="timeout"
193
+ name="timeout"
194
+ :options="timeoutOptions"
195
+ class="mb-15"
200
196
  >
201
197
  <template #label>
202
198
  <h5>{{ t('drainNode.timeout.title') }}</h5>
@@ -212,21 +208,21 @@ export default {
212
208
  :placeholder="t('drainNode.timeout.placeholder')"
213
209
  />
214
210
  </div>
215
- <Banner
216
- v-for="(err, i) in errors"
217
- :key="i"
218
- color="error"
219
- :label="err"
211
+ <Banner
212
+ v-for="(err, i) in errors"
213
+ :key="i"
214
+ color="error"
215
+ :label="err"
220
216
  />
221
217
  </div>
222
218
 
223
- <div
224
- slot="actions"
225
- class="buttons"
219
+ <div
220
+ slot="actions"
221
+ class="buttons"
226
222
  >
227
- <button
228
- class="btn role-secondary mr-10"
229
- @click="close"
223
+ <button
224
+ class="btn role-secondary mr-10"
225
+ @click="close"
230
226
  >
231
227
  {{ t('generic.cancel') }}
232
228
  </button>
@@ -16,9 +16,11 @@ export default {
16
16
  },
17
17
 
18
18
  props: {
19
- resources: {
20
- type: Array,
21
- required: true
19
+ machine: {
20
+ type: Object,
21
+ default: () => {
22
+ return {};
23
+ }
22
24
  }
23
25
  },
24
26
 
@@ -29,10 +31,6 @@ export default {
29
31
  computed: {
30
32
  ...mapGetters({ t: 'i18n/t' }),
31
33
 
32
- machine() {
33
- return this.resources[0];
34
- },
35
-
36
34
  nameToMatch() {
37
35
  return this.machine.spec.infrastructureRef.name;
38
36
  },
@@ -11,32 +11,27 @@ export default {
11
11
  Banner,
12
12
  },
13
13
  props: {
14
- resources: {
15
- type: Array,
16
- required: true
14
+ applyAction: {
15
+ type: Function,
16
+ default: () => {}
17
+ },
18
+ applyMode: {
19
+ type: String,
20
+ default: 'create'
21
+ },
22
+ title: {
23
+ type: String,
24
+ default: ''
25
+ },
26
+ body: {
27
+ type: String,
28
+ default: ''
17
29
  }
18
30
  },
19
31
  data() {
20
32
  return { errors: [] };
21
33
  },
22
- computed: {
23
- config() {
24
- return this.resources[0];
25
- },
26
- applyAction() {
27
- return this.config.applyAction;
28
- },
29
- applyMode() {
30
- return this.config.applyMode || 'create';
31
- },
32
- title() {
33
- return this.config.title;
34
- },
35
- body() {
36
- return this.config.body;
37
- },
38
34
 
39
- },
40
35
  methods: {
41
36
  close() {
42
37
  this.$emit('close');