@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
@@ -37,8 +37,8 @@ export default {
37
37
  YamlEditor,
38
38
  },
39
39
  props: {
40
- resources: {
41
- type: Array,
40
+ workload: {
41
+ type: Object,
42
42
  required: true
43
43
  }
44
44
  },
@@ -55,46 +55,17 @@ export default {
55
55
  computed: {
56
56
  ...mapGetters({ t: 'i18n/t' }),
57
57
  ...mapGetters(['currentCluster']),
58
- workload() {
59
- return this.resources[0];
60
- },
61
58
  workloadName() {
62
59
  return this.workload.metadata.name;
63
60
  },
64
61
  workloadNamespace() {
65
62
  return this.workload.metadata.namespace;
66
63
  },
67
- currentRevisionNumber() {
68
- return this.workload.metadata.annotations['deployment.kubernetes.io/revision'];
64
+ workloadType() {
65
+ return this.workload.kind.toLowerCase();
69
66
  },
70
- rollbackRequestBody() {
71
- if (!this.selectedRevision) {
72
- return null;
73
- }
74
-
75
- // Build the request body in the same format that kubectl
76
- // uses to call the Kubernetes API to roll back a workload.
77
- // To see an example request body, run:
78
- // kubectl rollout undo deployment/[deployment name] --to-revision=[revision number] -v=8
79
- const body = [
80
- {
81
- op: 'replace',
82
- path: '/spec/template',
83
- value: {
84
- metadata: {
85
- creationTimestamp: null,
86
- labels: { 'workload.user.cattle.io/workloadselector': this.selectedRevision.spec.template.metadata.labels['workload.user.cattle.io/workloadselector'] }
87
- },
88
- spec: this.selectedRevision.spec.template.spec
89
- }
90
- }, {
91
- op: 'replace',
92
- path: '/metadata/annotations',
93
- value: { 'deployment.kubernetes.io/revision': this.selectedRevision.metadata.annotations['deployment.kubernetes.io/revision'] }
94
- }
95
- ];
96
-
97
- return body;
67
+ revisionsType() {
68
+ return this.workloadType === 'deployment' ? WORKLOAD_TYPES.REPLICA_SET : 'apps.controllerrevision';
98
69
  },
99
70
  selectedRevisionId() {
100
71
  return this.selectedRevision.id;
@@ -111,9 +82,9 @@ export default {
111
82
  },
112
83
  fetch() {
113
84
  // Fetch revisions of the current workload
114
- this.$store.dispatch('cluster/findAll', { type: WORKLOAD_TYPES.REPLICA_SET })
85
+ this.$store.dispatch('cluster/findAll', { type: this.revisionsType })
115
86
  .then(( response ) => {
116
- const allReplicaSets = response;
87
+ const allRevisions = response;
117
88
 
118
89
  const hasRelationshipWithCurrentWorkload = ( replicaSet ) => {
119
90
  const relationshipsOfReplicaSet = replicaSet.metadata.relationships;
@@ -127,15 +98,13 @@ export default {
127
98
  return revisionsOfCurrentWorkload.length > 0;
128
99
  };
129
100
 
130
- const workloadRevisions = allReplicaSets.filter(( replicaSet ) => {
101
+ const workloadRevisions = allRevisions.filter(( replicaSet ) => {
131
102
  return hasRelationshipWithCurrentWorkload( replicaSet );
132
103
  });
133
104
 
134
105
  const revisionOptions = workloadRevisions
135
106
  .map( (revision ) => {
136
- const isCurrentRevision = this.getRevisionNumber(revision) === this.currentRevisionNumber;
137
-
138
- if (isCurrentRevision) {
107
+ if (this.isCurrentRevision(revision)) {
139
108
  this.currentRevision = revision;
140
109
  }
141
110
 
@@ -155,18 +124,18 @@ export default {
155
124
  },
156
125
  async save() {
157
126
  try {
158
- await this.workload.rollBackWorkload(this.currentCluster, this.workload, this.rollbackRequestBody);
127
+ await this.workload.rollBack(this.currentCluster, this.workload, this.selectedRevision);
159
128
  this.close();
160
129
  } catch (err) {
161
130
  this.errors = exceptionToErrorsArray(err);
162
131
  }
163
132
  },
164
- getRevisionNumber( revision ) {
165
- return revision.metadata.annotations['deployment.kubernetes.io/revision'];
133
+ isCurrentRevision(revision) {
134
+ return revision.revisionNumber === this.workload.currentRevisionNumber;
166
135
  },
167
136
  buildRevisionOption( revision ) {
168
- const revisionNumber = this.getRevisionNumber(revision);
169
- const isCurrentRevision = revisionNumber === this.currentRevisionNumber;
137
+ const { revisionNumber } = revision;
138
+ const isCurrentRevision = this.isCurrentRevision(revision);
170
139
  const now = day();
171
140
  const createdDate = day(revision.metadata.creationTimestamp);
172
141
  const createdDateFormatted = createdDate.format(this.timeFormatStr);
@@ -19,9 +19,11 @@ export default {
19
19
  },
20
20
 
21
21
  props: {
22
- resources: {
23
- type: Array,
24
- required: true
22
+ cluster: {
23
+ type: Object,
24
+ default: () => {
25
+ return {};
26
+ }
25
27
  }
26
28
  },
27
29
 
@@ -34,10 +36,6 @@ export default {
34
36
  },
35
37
 
36
38
  computed: {
37
- cluster() {
38
- return this.resources?.[0];
39
- },
40
-
41
39
  serviceOptions() {
42
40
  if (this.cluster.isRke2) {
43
41
  const options = [
@@ -19,9 +19,11 @@ export default {
19
19
  },
20
20
 
21
21
  props: {
22
- resources: {
23
- type: Array,
24
- required: true
22
+ cluster: {
23
+ type: Object,
24
+ default: () => {
25
+ return {};
26
+ }
25
27
  }
26
28
  },
27
29
 
@@ -51,12 +53,6 @@ export default {
51
53
  return { errors: [], latestBackup: null };
52
54
  },
53
55
 
54
- computed: {
55
- cluster() {
56
- return this.resources?.[0];
57
- },
58
- },
59
-
60
56
  methods: {
61
57
  close(buttonDone) {
62
58
  if (buttonDone && typeof buttonDone === 'function') {
@@ -15,25 +15,17 @@ export default {
15
15
  LabeledInput,
16
16
  },
17
17
  props: {
18
- resources: {
19
- type: Array,
20
- required: true
18
+ cluster: {
19
+ type: Object,
20
+ default: () => {
21
+ return {};
22
+ }
21
23
  }
22
24
  },
23
25
  data() {
24
26
  return { errors: [], name: '' };
25
27
  },
26
- computed: {
27
- cluster() {
28
- if (this.resources?.length === 1) {
29
- const c = this.resources[0];
30
-
31
- return c;
32
- }
33
28
 
34
- return {};
35
- },
36
- },
37
29
  mounted() {
38
30
  this.$nextTick(() => {
39
31
  this.$refs.templateName.focus();
@@ -97,7 +97,7 @@ export default {
97
97
 
98
98
  <template>
99
99
  <GenericPrompt
100
- :resources="[config]"
100
+ v-bind="config"
101
101
  @close="$emit('close')"
102
102
  >
103
103
  <template slot="body">
@@ -0,0 +1,121 @@
1
+ <script>
2
+ import { Card } from '@components/Card';
3
+ import { alternateLabel } from '@shell/utils/platform';
4
+ import { Checkbox } from '@components/Form/Checkbox';
5
+ import { SCALE_POOL_PROMPT } from '@shell/store/prefs';
6
+
7
+ export default {
8
+ components: { Card, Checkbox },
9
+
10
+ props: {
11
+ resources: {
12
+ type: Array,
13
+ required: true
14
+ }
15
+ },
16
+
17
+ data() {
18
+ const allToDelete = Array.isArray(this.resources) ? this.resources : [this.resources];
19
+
20
+ return {
21
+ allToDelete,
22
+ type: this.$store.getters['type-map/labelFor'](allToDelete[0].schema, allToDelete.length),
23
+ promptConfirmation: true
24
+ };
25
+ },
26
+ computed: {
27
+ machinenName() {
28
+ const name = this.resources.length > 0 ? this.resources[0].id.split('/')[1] : '';
29
+
30
+ return name;
31
+ },
32
+ protip() {
33
+ return this.t('promptRemove.protip', { alternateLabel });
34
+ },
35
+ },
36
+ created() {
37
+ const showScalePoolPrompt = this.$store.getters['prefs/get'](SCALE_POOL_PROMPT);
38
+
39
+ // Check for showScalePoolPrompt pref
40
+ // If it is not set, set it to true and update promt checkbox
41
+ if ( showScalePoolPrompt === null ) {
42
+ this.promptConfirmation = true;
43
+ this.$store.dispatch('prefs/set', { key: SCALE_POOL_PROMPT, value: true });
44
+ } else {
45
+ this.promptConfirmation = showScalePoolPrompt;
46
+ }
47
+ },
48
+
49
+ methods: {
50
+ close() {
51
+ this.$emit('close');
52
+ },
53
+
54
+ update() {
55
+ this.$store.dispatch('prefs/set', { key: SCALE_POOL_PROMPT, value: !!this.promptConfirmation });
56
+ },
57
+
58
+ remove() {
59
+ // Delete pool
60
+ if (this.resources.length > 0 ) {
61
+ this.resources[0].scalePool(-1);
62
+ }
63
+ this.close();
64
+ }
65
+ }
66
+ };
67
+ </script>
68
+
69
+ <template>
70
+ <Card
71
+ class="prompt-remove"
72
+ :show-highlight-border="false"
73
+ >
74
+ <h4
75
+ slot="title"
76
+ class="text-default-text"
77
+ >
78
+ {{ t('promptForceRemove.modalTitle') }}
79
+ </h4>
80
+ <div
81
+ slot="body"
82
+ class="pl-10 pr-10"
83
+ >
84
+ <div>
85
+ {{ t('promptRemove.attemptingToRemove', { type }) }} <b>{{ machinenName }}</b>
86
+ </div>
87
+ <div>
88
+ <Checkbox
89
+ v-model="promptConfirmation"
90
+ :label="t('promptRemove.promptConfirmation')"
91
+ class="mt-10"
92
+ @input="update()"
93
+ />
94
+ </div>
95
+ <div class="text-info mt-20">
96
+ {{ protip }}
97
+ </div>
98
+ </div>
99
+ <template #actions>
100
+ <button
101
+ class="btn role-secondary mr-10"
102
+ @click="close"
103
+ >
104
+ {{ t('generic.cancel') }}
105
+ </button>
106
+ <div class="spacer" />
107
+ <button
108
+ class="btn bg-error ml-10 btn role-primary"
109
+ @click="remove"
110
+ >
111
+ {{ t('generic.confirm') }}
112
+ </button>
113
+ </template>
114
+ </Card>
115
+ </template>
116
+
117
+ <style lang='scss' scoped>
118
+ .actions {
119
+ text-align: right;
120
+ }
121
+ </style>
@@ -32,7 +32,7 @@ describe('management.cattle.io.setting should', () => {
32
32
  });
33
33
 
34
34
  describe('using predefined generic rule', () => {
35
- const id = SETTING.CATTLE_PASSWORD_MIN_LENGTH;
35
+ const id = SETTING.PASSWORD_MIN_LENGTH;
36
36
 
37
37
  describe('validate input with provided settings', () => {
38
38
  it('allowing to save if pass', () => {
@@ -65,7 +65,7 @@ describe('management.cattle.io.setting should', () => {
65
65
  });
66
66
  const expectation = [{
67
67
  path: 'value',
68
- rules: ['betweenValues']
68
+ rules: ['betweenValues', 'isInteger', 'isPositive', 'isOctal']
69
69
  }];
70
70
 
71
71
  expect(wrapper.vm.$data['fvFormRuleSets']).toStrictEqual(expectation);
@@ -76,7 +76,7 @@ describe('management.cattle.io.setting should', () => {
76
76
  propsData: { value: { id, value: '' } },
77
77
  ...requiredSetup()
78
78
  });
79
- const expectation = ['betweenValues'];
79
+ const expectation = ['betweenValues', 'isInteger', 'isPositive', 'isOctal'];
80
80
 
81
81
  // Avoid integration tests with mixin as it returns the whole function
82
82
  const rules = Object.keys((wrapper.vm as any)['fvExtraRules']);
@@ -219,8 +219,8 @@ export default {
219
219
 
220
220
  promptUpdate() {
221
221
  this.$store.dispatch('management/promptModal', {
222
- component: 'GenericPrompt',
223
- resources: [this.modalConfig]
222
+ component: 'GenericPrompt',
223
+ componentProps: this.modalConfig
224
224
  });
225
225
  },
226
226
 
@@ -267,10 +267,10 @@ export default {
267
267
  @cancel="cancel"
268
268
  >
269
269
  <template v-if="model.enabled && !isEnabling && !editConfig">
270
- <AuthBanner
271
- :t-args="tArgs"
272
- :disable="disable"
273
- :edit="goToEdit"
270
+ <AuthBanner
271
+ :t-args="tArgs"
272
+ :disable="disable"
273
+ :edit="goToEdit"
274
274
  >
275
275
  <template slot="rows">
276
276
  <tr>
@@ -298,9 +298,9 @@ export default {
298
298
  <td>{{ model.authEndpoint }}</td>
299
299
  </tr>
300
300
  </template>
301
- <template
302
- v-if="needsUpdate"
303
- slot="actions"
301
+ <template
302
+ v-if="needsUpdate"
303
+ slot="actions"
304
304
  >
305
305
  <button
306
306
  type="button"
@@ -328,17 +328,17 @@ export default {
328
328
  color="warning"
329
329
  />
330
330
 
331
- <InfoBox
332
- v-if="!model.enabled"
333
- id="reply-info"
334
- class="mt-20 mb-20 p-10"
331
+ <InfoBox
332
+ v-if="!model.enabled"
333
+ id="reply-info"
334
+ class="mt-20 mb-20 p-10"
335
335
  >
336
336
  {{ t('authConfig.azuread.reply.info') }}
337
337
  <br>
338
338
  <label class="reply-url">{{ t('authConfig.azuread.reply.label') }} </label>
339
- <CopyToClipboardText
340
- :plain="true"
341
- :text="replyUrl"
339
+ <CopyToClipboardText
340
+ :plain="true"
341
+ :text="replyUrl"
342
342
  />
343
343
  </InfoBox>
344
344
 
@@ -269,4 +269,12 @@ export default {
269
269
  .step-list li:not(:last-child) {
270
270
  margin-bottom: 8px;
271
271
  }
272
+ .banner {
273
+ display: block;
274
+
275
+ &::v-deep code {
276
+ padding: 0 3px;
277
+ margin: 0 3px;
278
+ }
279
+ }
272
280
  </style>
@@ -246,7 +246,7 @@ export default {
246
246
  v-if="!model.enabled"
247
247
  class="row"
248
248
  >
249
- <div class="col span-12">
249
+ <div class="col span-12 google">
250
250
  <Banner
251
251
  color="info"
252
252
  v-html="t('authConfig.associatedWarning', tArgs, true)"
@@ -261,4 +261,13 @@ export default {
261
261
  .step-list li:not(:last-child) {
262
262
  margin-bottom: 8px;
263
263
  }
264
+
265
+ .banner {
266
+ display: block;
267
+
268
+ &::v-deep code {
269
+ padding: 0 3px;
270
+ margin: 0 3px;
271
+ }
272
+ }
264
273
  </style>
@@ -156,3 +156,13 @@ export default {
156
156
  </CruResource>
157
157
  </div>
158
158
  </template>
159
+ <style lang="scss" scoped>
160
+ .banner {
161
+ display: block;
162
+
163
+ &::v-deep code {
164
+ padding: 0 3px;
165
+ margin: 0 3px;
166
+ }
167
+ }
168
+ </style>
@@ -285,3 +285,13 @@ export default {
285
285
  </CruResource>
286
286
  </div>
287
287
  </template>
288
+ <style lang="scss" scoped>
289
+ .banner {
290
+ display: block;
291
+
292
+ &::v-deep code {
293
+ padding: 0 3px;
294
+ margin: 0 3px;
295
+ }
296
+ }
297
+ </style>
@@ -265,3 +265,13 @@ export default {
265
265
  </CruResource>
266
266
  </div>
267
267
  </template>
268
+ <style lang="scss" scoped>
269
+ .banner {
270
+ display: block;
271
+
272
+ &::v-deep code {
273
+ padding: 0 3px;
274
+ margin: 0 3px;
275
+ }
276
+ }
277
+ </style>
@@ -228,7 +228,7 @@ export default {
228
228
  class="btn role-link close btn-sm"
229
229
  @click="removeProps.remove"
230
230
  >
231
- <i class="icon icon-2x icon-x" />
231
+ <i class="icon icon-x" />
232
232
  </button>
233
233
  <span v-else />
234
234
  </template>
@@ -10,7 +10,6 @@ import Labels from '@shell/components/form/Labels';
10
10
  import { HIDE_SENSITIVE } from '@shell/store/prefs';
11
11
  import { CAPI } from '@shell/config/labels-annotations';
12
12
  import { clear, uniq } from '@shell/utils/array';
13
- import { importCloudCredential } from '@shell/utils/dynamic-importer';
14
13
  import SelectIconGrid from '@shell/components/SelectIconGrid';
15
14
  import { sortBy } from '@shell/utils/sort';
16
15
  import { ucFirst } from '@shell/utils/string';
@@ -95,14 +94,11 @@ export default {
95
94
  },
96
95
 
97
96
  cloudComponent() {
98
- const driver = this.driverName;
99
- const haveProviders = this.$store.getters['plugins/credentialDrivers'];
100
-
101
- if ( haveProviders.includes(driver) ) {
102
- return importCloudCredential(driver);
97
+ if (this.$store.getters['type-map/hasCustomCloudCredentialComponent'](this.driverName)) {
98
+ return this.$store.getters['type-map/importCloudCredential'](this.driverName);
103
99
  }
104
100
 
105
- return importCloudCredential('generic');
101
+ return this.$store.getters['type-map/importCloudCredential']('generic');
106
102
  },
107
103
 
108
104
  // array of id, label, description, initials for type selection step
@@ -27,6 +27,16 @@ export default {
27
27
  type: Array,
28
28
  default: () => [],
29
29
  },
30
+
31
+ namespaces: {
32
+ type: Array,
33
+ default: () => [],
34
+ },
35
+
36
+ isClusterFlow: {
37
+ type: Boolean,
38
+ default: false
39
+ }
30
40
  },
31
41
 
32
42
  methods: {
@@ -43,19 +53,19 @@ export default {
43
53
  <div>
44
54
  <KeyValue
45
55
  v-model="value.labels"
46
- :title="value.select ? 'Include Pods' : 'Exclude Pods'"
56
+ :title="value.select ? t('logging.flow.matches.pods.title.include') : t('logging.flow.matches.pods.title.exclude')"
47
57
  :mode="mode"
48
58
  :initial-empty-row="true"
49
59
  :read-allowed="false"
50
60
  :title-add="true"
51
61
  protip=""
52
- key-label="Pod Label Key"
53
- value-label="Pod Label Value"
54
- add-label="Add Pod"
62
+ :key-label="t('logging.flow.matches.pods.keyLabel')"
63
+ :value-label="t('logging.flow.matches.pods.valueLabel')"
64
+ :add-label="t('logging.flow.matches.pods.addLabel')"
55
65
  />
56
66
  <div class="spacer" />
57
67
  <h3>
58
- Limit to specific nodes
68
+ {{ value.select ? t('logging.flow.matches.nodes.title.include') : t('logging.flow.matches.nodes.title.exclude') }}
59
69
  </h3>
60
70
  <div class="row">
61
71
  <div class="col span-12">
@@ -63,7 +73,7 @@ export default {
63
73
  v-model="value.hosts"
64
74
  class="lg"
65
75
  :options="nodes"
66
- placeholder="Default: Any node"
76
+ :placeholder="t('logging.flow.matches.nodes.placeholder')"
67
77
  :multiple="true"
68
78
  :searchable="true"
69
79
  :taggable="true"
@@ -75,7 +85,7 @@ export default {
75
85
  </div>
76
86
  <div class="spacer" />
77
87
  <h3>
78
- Limit to specific container names
88
+ {{ value.select ? t('logging.flow.matches.containerNames.title.include') : t('logging.flow.matches.containerNames.title.exclude') }}
79
89
  </h3>
80
90
  <div class="row">
81
91
  <div class="col span-12">
@@ -83,7 +93,7 @@ export default {
83
93
  v-model="value.container_names"
84
94
  class="lg"
85
95
  :options="containers"
86
- placeholder="Default: Any container"
96
+ :placeholder="t('logging.flow.matches.containerNames.placeholder')"
87
97
  :multiple="true"
88
98
  :taggable="true"
89
99
  :clearable="true"
@@ -92,5 +102,26 @@ export default {
92
102
  />
93
103
  </div>
94
104
  </div>
105
+ <div v-if="isClusterFlow">
106
+ <div class="spacer" />
107
+ <h3>
108
+ {{ value.select ? t('logging.flow.matches.namespaces.title.include') : t('logging.flow.matches.namespaces.title.exclude') }}
109
+ </h3>
110
+ <div class="row">
111
+ <div class="col span-12">
112
+ <Select
113
+ v-model="value.namespaces"
114
+ class="lg"
115
+ :options="namespaces"
116
+ :placeholder="t('logging.flow.matches.namespaces.placeholder')"
117
+ :multiple="true"
118
+ :taggable="true"
119
+ :clearable="true"
120
+ :close-on-select="false"
121
+ placement="top"
122
+ />
123
+ </div>
124
+ </div>
125
+ </div>
95
126
  </div>
96
127
  </template>