@rancher/shell 3.0.2-rc.5 → 3.0.2

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 (219) hide show
  1. package/assets/images/providers/nutanix.svg +12 -1
  2. package/assets/styles/base/_basic.scss +2 -1
  3. package/assets/styles/base/_helpers.scss +4 -0
  4. package/assets/styles/base/_variables.scss +2 -0
  5. package/assets/styles/global/_labeled-input.scss +5 -13
  6. package/assets/styles/global/_layout.scss +4 -1
  7. package/assets/styles/global/_select.scss +5 -0
  8. package/assets/styles/themes/_dark.scss +1 -3
  9. package/assets/styles/themes/_light.scss +5 -1
  10. package/assets/translations/en-us.yaml +130 -23
  11. package/assets/translations/zh-hans.yaml +0 -3
  12. package/cloud-credential/azure.vue +1 -1
  13. package/components/ActionMenuShell.vue +105 -0
  14. package/components/AppModal.vue +2 -2
  15. package/components/AsyncButton.vue +2 -0
  16. package/components/ButtonGroup.vue +9 -2
  17. package/components/ClusterBadge.vue +1 -0
  18. package/components/ClusterIconMenu.vue +3 -0
  19. package/components/ClusterProviderIcon.vue +14 -1
  20. package/components/CodeMirror.vue +96 -5
  21. package/components/Collapse.vue +16 -3
  22. package/components/CruResource.vue +9 -0
  23. package/components/CruResourceFooter.vue +1 -1
  24. package/components/ExplorerMembers.vue +2 -1
  25. package/components/FixedBanner.vue +19 -12
  26. package/components/Import.vue +14 -1
  27. package/components/LandingPagePreference.vue +4 -2
  28. package/components/PodSecurityAdmission.vue +8 -6
  29. package/components/PromptChangePassword.vue +1 -0
  30. package/components/PromptRemove.vue +23 -21
  31. package/components/ResourceDetail/Masthead.vue +30 -11
  32. package/components/ResourceDetail/__tests__/Masthead.test.ts +61 -0
  33. package/components/ResourceDetail/index.vue +6 -0
  34. package/components/ResourceTable.vue +6 -1
  35. package/components/ResourceYaml.vue +1 -0
  36. package/components/Setting.vue +115 -0
  37. package/components/SortableTable/THead.vue +2 -0
  38. package/components/SortableTable/index.vue +7 -12
  39. package/components/StatusBadge.vue +71 -0
  40. package/components/Tabbed/index.vue +16 -15
  41. package/components/Wizard.vue +108 -104
  42. package/components/YamlEditor.vue +12 -2
  43. package/components/__tests__/Collapse.test.ts +2 -2
  44. package/components/__tests__/FixedBanner.test.ts +3 -3
  45. package/components/auth/Principal.vue +29 -17
  46. package/components/auth/__tests__/Principal.test.ts +40 -0
  47. package/components/auth/login/ldap.vue +7 -0
  48. package/components/fleet/FleetBundles.vue +1 -1
  49. package/components/fleet/FleetRepos.vue +1 -1
  50. package/components/fleet/FleetResources.vue +0 -2
  51. package/components/fleet/FleetSummary.vue +60 -65
  52. package/components/fleet/ForceDirectedTreeChart/index.vue +5 -1
  53. package/components/fleet/__tests__/FleetSummary.test.ts +49 -9
  54. package/components/form/ArrayList.vue +6 -2
  55. package/components/form/ColorInput.vue +1 -0
  56. package/components/form/KeyValue.vue +11 -12
  57. package/components/form/LabeledSelect.vue +15 -3
  58. package/components/form/Labels.vue +8 -1
  59. package/components/form/Members/MembershipEditor.vue +230 -222
  60. package/components/form/Members/__tests__/MembershipEditor.test.ts +62 -0
  61. package/components/form/Password.vue +3 -0
  62. package/components/form/ProjectMemberEditor.vue +6 -3
  63. package/components/form/ResourceTabs/index.vue +15 -13
  64. package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +5 -4
  65. package/components/form/SchedulingCustomization.vue +85 -0
  66. package/components/form/Select.vue +3 -2
  67. package/components/form/SelectOrCreateAuthSecret.vue +2 -1
  68. package/components/form/UnitInput.vue +3 -4
  69. package/components/form/__tests__/ArrayList.test.ts +9 -6
  70. package/components/form/__tests__/LabeledSelect.test.ts +37 -0
  71. package/components/form/__tests__/SelectOrCreateAuthSecret.test.ts +34 -0
  72. package/components/form/__tests__/UnitInput.test.ts +4 -5
  73. package/components/formatter/LiveDate.vue +3 -1
  74. package/components/formatter/ServiceType.vue +12 -4
  75. package/components/formatter/WorkloadHealthScale.vue +2 -1
  76. package/components/nav/Header.vue +35 -2
  77. package/components/nav/HeaderPageActionMenu.vue +11 -40
  78. package/components/nav/Jump.vue +8 -2
  79. package/components/nav/NamespaceFilter.vue +5 -4
  80. package/components/nav/Pinned.vue +1 -1
  81. package/components/nav/TopLevelMenu.helper.ts +5 -5
  82. package/components/nav/TopLevelMenu.vue +1 -12
  83. package/components/nav/WindowManager/ContainerLogs.vue +96 -58
  84. package/components/nav/WindowManager/ContainerShell.vue +99 -18
  85. package/components/nav/WindowManager/index.vue +74 -6
  86. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
  87. package/components/templates/default.vue +2 -47
  88. package/config/features.js +1 -0
  89. package/config/labels-annotations.js +11 -1
  90. package/config/router/navigation-guards/index.js +2 -1
  91. package/config/router/navigation-guards/record-last-route.js +24 -0
  92. package/config/settings.ts +66 -98
  93. package/config/version.js +1 -1
  94. package/core/types-provisioning.ts +7 -0
  95. package/detail/fleet.cattle.io.bundle.vue +7 -0
  96. package/detail/fleet.cattle.io.cluster.vue +0 -3
  97. package/detail/fleet.cattle.io.gitrepo.vue +8 -15
  98. package/detail/provisioning.cattle.io.cluster.vue +8 -2
  99. package/dialog/DeactivateDriverDialog.vue +5 -5
  100. package/dialog/GitRepoForceUpdateDialog.vue +132 -0
  101. package/directives/strip-html-aria-label.js +19 -0
  102. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +87 -0
  103. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +217 -37
  104. package/edit/auth/__tests__/oidc.test.ts +60 -12
  105. package/edit/auth/ldap/__tests__/config.test.ts +40 -0
  106. package/edit/auth/ldap/config.vue +67 -89
  107. package/edit/auth/oidc.vue +16 -2
  108. package/edit/catalog.cattle.io.clusterrepo.vue +12 -8
  109. package/edit/cis.cattle.io.clusterscan.vue +13 -1
  110. package/edit/fleet.cattle.io.gitrepo.vue +198 -72
  111. package/edit/logging-flow/Match.vue +0 -21
  112. package/edit/management.cattle.io.project.vue +1 -1
  113. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +10 -3
  114. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +5 -1
  115. package/edit/monitoring.coreos.com.prometheusrule/index.vue +5 -2
  116. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +8 -1
  117. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -0
  118. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -2
  119. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +55 -15
  120. package/edit/provisioning.cattle.io.cluster/index.vue +28 -30
  121. package/edit/provisioning.cattle.io.cluster/rke2.vue +64 -13
  122. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +37 -2
  123. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -2
  124. package/edit/resources.cattle.io.backup.vue +150 -15
  125. package/edit/secret/__tests__/ssh.test.ts +79 -0
  126. package/edit/secret/ssh.vue +7 -1
  127. package/edit/service.vue +0 -3
  128. package/edit/workload/Job.vue +8 -8
  129. package/edit/workload/__tests__/Job.test.ts +0 -1
  130. package/edit/workload/index.vue +3 -1
  131. package/initialize/install-directives.js +2 -0
  132. package/initialize/install-plugins.js +6 -1
  133. package/list/catalog.cattle.io.app.vue +21 -4
  134. package/list/fleet.cattle.io.bundle.vue +1 -1
  135. package/list/management.cattle.io.setting.vue +34 -132
  136. package/list/provisioning.cattle.io.cluster.vue +11 -3
  137. package/machine-config/vmwarevsphere.vue +15 -8
  138. package/mixins/__tests__/auth-config.test.ts +74 -0
  139. package/mixins/__tests__/chart.test.ts +5 -4
  140. package/mixins/__tests__/create-edit-view.test.ts +38 -0
  141. package/mixins/auth-config.js +8 -0
  142. package/mixins/chart.js +2 -2
  143. package/mixins/create-edit-view/impl.js +4 -1
  144. package/mixins/vue-select-overrides.js +10 -0
  145. package/models/__tests__/catalog.cattle.io.app.test.ts +148 -0
  146. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +157 -0
  147. package/models/__tests__/secret.test.ts +56 -13
  148. package/models/catalog.cattle.io.app.js +112 -37
  149. package/models/cluster.js +11 -0
  150. package/models/fleet.cattle.io.bundle.js +40 -2
  151. package/models/fleet.cattle.io.gitrepo.js +169 -109
  152. package/models/management.cattle.io.fleetworkspace.js +4 -0
  153. package/models/management.cattle.io.kontainerdriver.js +7 -0
  154. package/models/nodedriver.js +4 -1
  155. package/models/provisioning.cattle.io.cluster.js +24 -0
  156. package/models/secret.js +1 -1
  157. package/package.json +5 -5
  158. package/pages/auth/login.vue +5 -11
  159. package/pages/auth/verify.vue +11 -1
  160. package/pages/c/_cluster/apps/charts/index.vue +6 -4
  161. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  162. package/pages/c/_cluster/explorer/ConfigBadge.vue +3 -5
  163. package/pages/c/_cluster/explorer/EventsTable.vue +3 -2
  164. package/pages/c/_cluster/explorer/__tests__/index.test.ts +9 -9
  165. package/pages/c/_cluster/explorer/index.vue +33 -35
  166. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  167. package/pages/c/_cluster/fleet/index.vue +0 -5
  168. package/pages/c/_cluster/legacy/project/index.vue +1 -1
  169. package/pages/c/_cluster/settings/performance.vue +52 -53
  170. package/pages/c/_cluster/uiplugins/index.vue +19 -22
  171. package/pages/home.vue +17 -12
  172. package/pages/prefs.vue +5 -1
  173. package/plugins/shortkey.js +10 -1
  174. package/plugins/steve/steve-pagination-utils.ts +58 -8
  175. package/promptRemove/management.cattle.io.fleetworkspace.vue +98 -0
  176. package/promptRemove/management.cattle.io.globalrole.vue +1 -1
  177. package/promptRemove/management.cattle.io.project.vue +2 -8
  178. package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
  179. package/promptRemove/mixin/roleDeletionCheck.js +1 -7
  180. package/promptRemove/pod.vue +7 -28
  181. package/rancher-components/Card/Card.vue +9 -1
  182. package/rancher-components/Form/Checkbox/Checkbox.vue +42 -6
  183. package/rancher-components/Form/LabeledInput/LabeledInput.vue +30 -3
  184. package/rancher-components/Form/Radio/RadioButton.vue +18 -3
  185. package/rancher-components/Form/Radio/RadioGroup.vue +39 -5
  186. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +13 -1
  187. package/rancher-components/RcButton/RcButton.test.ts +97 -0
  188. package/rancher-components/RcButton/RcButton.vue +14 -9
  189. package/rancher-components/RcDropdown/RcDropdown.vue +3 -1
  190. package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -2
  191. package/rancher-components/RcDropdown/RcDropdownMenu.vue +66 -0
  192. package/rancher-components/RcDropdown/index.ts +1 -0
  193. package/rancher-components/RcDropdown/types.ts +27 -0
  194. package/rancher-components/RcDropdown/useDropdownContext.ts +5 -2
  195. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
  196. package/scripts/typegen.sh +1 -0
  197. package/store/__tests__/auth.test.ts +120 -0
  198. package/store/action-menu.js +13 -3
  199. package/store/auth.js +14 -9
  200. package/store/aws.js +9 -2
  201. package/store/catalog.js +14 -7
  202. package/store/features.js +1 -0
  203. package/store/prefs.js +9 -28
  204. package/store/type-map.utils.ts +4 -0
  205. package/types/resources/settings.d.ts +27 -20
  206. package/types/shell/index.d.ts +18 -12
  207. package/utils/__tests__/array.test.ts +13 -1
  208. package/utils/__tests__/string.test.ts +80 -1
  209. package/utils/array.ts +13 -0
  210. package/utils/auth.js +4 -0
  211. package/utils/banners.js +0 -45
  212. package/utils/cluster.js +1 -1
  213. package/{edit/monitoring.coreos.com.prometheusrule → utils}/duration.js +5 -3
  214. package/utils/object.js +0 -3
  215. package/utils/pagination-utils.ts +15 -2
  216. package/utils/string.js +31 -7
  217. package/utils/validators/formRules/__tests__/index.test.ts +27 -0
  218. package/utils/validators/formRules/index.ts +16 -0
  219. package/edit/provisioning.cattle.io.cluster/import.vue +0 -198
@@ -1,4 +1,4 @@
1
- import { PaginationSettings } from '@shell/types/resources/settings';
1
+ import { PaginationSettings, PaginationSettingsStore } from '@shell/types/resources/settings';
2
2
  import {
3
3
  NAMESPACE_FILTER_ALL_USER as ALL_USER,
4
4
  NAMESPACE_FILTER_ALL as ALL,
@@ -14,6 +14,7 @@ import { sameArrayObjects } from '@shell/utils/array';
14
14
  import { isEqual } from '@shell/utils/object';
15
15
  import { STEVE_CACHE } from '@shell/store/features';
16
16
  import { getPerformanceSetting } from '@shell/utils/settings';
17
+ import { PAGINATION_SETTINGS_STORE_DEFAULTS } from '@shell/plugins/steve/steve-pagination-utils';
17
18
 
18
19
  /**
19
20
  * Helper functions for server side pagination
@@ -32,6 +33,18 @@ class PaginationUtils {
32
33
  return perf.serverPagination;
33
34
  }
34
35
 
36
+ public getStoreSettings(ctx: any): PaginationSettingsStore
37
+ public getStoreSettings(serverPagination: PaginationSettings): PaginationSettingsStore
38
+ public getStoreSettings(arg: any | PaginationSettings): PaginationSettingsStore {
39
+ const serverPagination: PaginationSettings = arg?.rootGetters !== undefined ? this.getSettings(arg) : arg;
40
+
41
+ return serverPagination?.useDefaultStores ? this.getStoreDefault() : serverPagination?.stores || this.getStoreDefault();
42
+ }
43
+
44
+ public getStoreDefault(): PaginationSettingsStore {
45
+ return PAGINATION_SETTINGS_STORE_DEFAULTS;
46
+ }
47
+
35
48
  isSteveCacheEnabled({ rootGetters }: any): boolean {
36
49
  // We always get Feature flags as part of start up (see `dispatch('features/loadServer')` in loadManagement)
37
50
  return rootGetters['features/get']?.(STEVE_CACHE);
@@ -58,7 +71,7 @@ class PaginationUtils {
58
71
  return false;
59
72
  }
60
73
 
61
- const storeSettings = settings.stores?.[enabledFor.store];
74
+ const storeSettings = this.getStoreSettings(settings)?.[enabledFor.store];
62
75
 
63
76
  // No pagination setting for target store, not enabled
64
77
  if (!storeSettings) {
package/utils/string.js CHANGED
@@ -151,16 +151,36 @@ export function pluralize(str) {
151
151
  }
152
152
  }
153
153
 
154
- export function resourceNames(names, plusMore, t) {
154
+ export function resourceNames(names, t, options = {}) {
155
+ const MAX_NAMES_COUNT = 5;
156
+
157
+ let { plusMore, endString } = options;
158
+
159
+ // plusMore default value
160
+ if (!plusMore) {
161
+ plusMore = t('promptRemove.andOthers', { count: names.length > MAX_NAMES_COUNT ? names.length - MAX_NAMES_COUNT : 0 });
162
+ }
163
+
164
+ // endString default value
165
+ if (!endString) {
166
+ endString = endString === false ? ' ' : '.';
167
+ }
168
+
155
169
  return names.reduce((res, name, i) => {
156
- if (i >= 5) {
157
- return res;
170
+ if (i < MAX_NAMES_COUNT) {
171
+ res += `<b>${ escapeHtml( name ) }</b>`;
172
+
173
+ if (i === names.length - 1) {
174
+ res += endString;
175
+ } else if (i === names.length - 2) {
176
+ res += names.length <= 5 ? t('generic.and') : '';
177
+ } else {
178
+ res += i < MAX_NAMES_COUNT - 1 ? t('generic.comma') : '';
179
+ }
158
180
  }
159
- res += `<b>${ escapeHtml( name ) }</b>`;
160
- if (i === names.length - 1) {
181
+
182
+ if (i === MAX_NAMES_COUNT) {
161
183
  res += plusMore;
162
- } else {
163
- res += i === names.length - 2 ? t('generic.and') : t('generic.comma');
164
184
  }
165
185
 
166
186
  return res;
@@ -336,3 +356,7 @@ export function isBase64(value) {
336
356
 
337
357
  return base64regex.test(value);
338
358
  }
359
+
360
+ export function generateRandomAlphaString(length) {
361
+ return Array.from({ length }, () => String.fromCharCode(97 + Math.random() * 26 | 0)).join('');
362
+ }
@@ -244,6 +244,33 @@ describe('formRules', () => {
244
244
  expect(formRuleResult).toStrictEqual(expectedResult);
245
245
  });
246
246
 
247
+ describe('"registryUrl": has the expected output for each input', () => {
248
+ const expectedTranslation = JSON.stringify({ message: 'cluster.privateRegistry.privateRegistryUrlError' });
249
+ const testCases = [
250
+ // Empty
251
+ [undefined, undefined],
252
+
253
+ // Word
254
+ ['registry', expectedTranslation],
255
+
256
+ // Without schema
257
+ ['registry.io', undefined],
258
+
259
+ // With schemas
260
+ ['http://registry.io', undefined],
261
+ ['https://registry.io', undefined],
262
+ ];
263
+
264
+ it.each(testCases)(
265
+ 'should return undefined or correct message based on the provided url',
266
+ (url, expected) => {
267
+ const formRuleResult = formRules.registryUrl(url);
268
+
269
+ expect(formRuleResult).toStrictEqual(expected);
270
+ }
271
+ );
272
+ });
273
+
247
274
  it('"ruleGroups" : returns undefined when rulegroups are supplied', () => {
248
275
  const testValue = { groups: ['group1'] };
249
276
  const formRuleResult = formRules.ruleGroups(testValue);
@@ -176,6 +176,21 @@ export default function(t: Translation, { key = 'Value' }: ValidationOptions): {
176
176
  return containers.map((container: any) => containerImage(container)).find((containerError: string) => containerError);
177
177
  };
178
178
 
179
+ const registryUrl = (privateRegistryURL: string) => {
180
+ if (!privateRegistryURL) {
181
+ return;
182
+ }
183
+
184
+ const pattern = new RegExp('^([a-z\\-0-9]+:\\/\\/?)?' + // scheme (optional, https://, http://, file:/, admin:/)
185
+ '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
186
+ '((\\d{1,3}\\.){3}\\d{1,3}))' + // ip address
187
+ '(\\:\\d+)?'); // port
188
+
189
+ const isValid = pattern.test(privateRegistryURL);
190
+
191
+ return isValid ? undefined : t('cluster.privateRegistry.privateRegistryUrlError');
192
+ };
193
+
179
194
  const dnsLabel: Validator = (val: string) => {
180
195
  const validators = [
181
196
  dnsChars,
@@ -504,6 +519,7 @@ export default function(t: Translation, { key = 'Value' }: ValidationOptions): {
504
519
  minValue,
505
520
  noUpperCase,
506
521
  portNumber,
522
+ registryUrl,
507
523
  required,
508
524
  requiredInt,
509
525
  isInteger,
@@ -1,198 +0,0 @@
1
- <script>
2
- import CreateEditView from '@shell/mixins/create-edit-view';
3
-
4
- import CruResource from '@shell/components/CruResource';
5
- import Loading from '@shell/components/Loading';
6
- import NameNsDescription from '@shell/components/form/NameNsDescription';
7
- import Tab from '@shell/components/Tabbed/Tab';
8
- import Tabbed from '@shell/components/Tabbed';
9
- import { CAPI, HCI } from '@shell/config/types';
10
- import ClusterMembershipEditor, { canViewClusterMembershipEditor } from '@shell/components/form/Members/ClusterMembershipEditor';
11
- import { Banner } from '@components/Banner';
12
-
13
- import { NAME as HARVESTER_MANAGER } from '@shell/config/harvester-manager-types';
14
- import { HARVESTER as HARVESTER_FEATURE, mapFeature } from '@shell/store/features';
15
- import { addObject } from '@shell/utils/array';
16
- import { HIDE_DESC, mapPref } from '@shell/store/prefs';
17
- import Labels from '@shell/edit/provisioning.cattle.io.cluster/Labels';
18
- import AgentEnv from '@shell/edit/provisioning.cattle.io.cluster/AgentEnv';
19
-
20
- const HARVESTER_HIDE_KEY = 'cm-harvester-import';
21
-
22
- export default {
23
- emits: ['input'],
24
-
25
- components: {
26
- Banner,
27
- ClusterMembershipEditor,
28
- Loading,
29
- NameNsDescription,
30
- CruResource,
31
- Tab,
32
- Tabbed,
33
- Labels,
34
- AgentEnv
35
- },
36
-
37
- mixins: [CreateEditView],
38
-
39
- inheritAttrs: false,
40
-
41
- props: {
42
- mode: {
43
- type: String,
44
- required: true,
45
- },
46
-
47
- value: {
48
- type: Object,
49
- required: true,
50
- },
51
-
52
- provider: {
53
- type: String,
54
- required: true,
55
- },
56
- },
57
-
58
- fetch() {
59
- // if ( !this.value.spec.rkeConfig ) {
60
- // set(this.value.spec, 'rkeConfig', {});
61
- // }
62
- },
63
-
64
- data() {
65
- return { membershipUpdate: {} };
66
- },
67
-
68
- computed: {
69
- canManageMembers() {
70
- return canViewClusterMembershipEditor(this.$store);
71
- },
72
-
73
- hideDescriptions: mapPref(HIDE_DESC),
74
-
75
- harvesterEnabled: mapFeature(HARVESTER_FEATURE),
76
-
77
- harvesterLocation() {
78
- return this.isCreate && !this.hideDescriptions.includes(HARVESTER_HIDE_KEY) && this.harvesterEnabled ? {
79
- name: `c-cluster-product-resource`,
80
- params: {
81
- product: HARVESTER_MANAGER,
82
- resource: HCI.CLUSTER,
83
- }
84
- } : null;
85
- }
86
- },
87
-
88
- created() {
89
- this.registerAfterHook(this.saveRoleBindings, 'save-role-bindings');
90
- },
91
-
92
- methods: {
93
- done() {
94
- return this.$router.replace({
95
- name: 'c-cluster-product-resource-namespace-id',
96
- params: {
97
- resource: CAPI.RANCHER_CLUSTER,
98
- namespace: this.value.metadata.namespace,
99
- id: this.value.metadata.name,
100
- },
101
- });
102
- },
103
-
104
- async saveRoleBindings() {
105
- await this.value.waitForMgmt();
106
-
107
- if (this.membershipUpdate.save) {
108
- await this.membershipUpdate.save(this.value.mgmt.id);
109
- }
110
- },
111
-
112
- async saveOverride(btnCb) {
113
- await this.save(btnCb);
114
- },
115
-
116
- onMembershipUpdate(update) {
117
- this['membershipUpdate'] = update;
118
- },
119
-
120
- hideHarvesterNotice() {
121
- const neu = this.hideDescriptions.slice();
122
-
123
- addObject(neu, HARVESTER_HIDE_KEY);
124
-
125
- this.hideDescriptions = neu;
126
- },
127
- },
128
- };
129
- </script>
130
-
131
- <template>
132
- <Loading v-if="$fetchState.pending" />
133
- <CruResource
134
- v-else
135
- :mode="mode"
136
- :resource="value"
137
- :errors="errors"
138
- component-testid="cluster-manager-import"
139
- @finish="saveOverride"
140
- @error="e=>errors = e"
141
- >
142
- <Banner
143
- v-if="harvesterLocation"
144
- color="info"
145
- :closable="true"
146
- class="mb-20"
147
- @close="hideHarvesterNotice"
148
- >
149
- {{ t('cluster.harvester.importNotice') }}
150
- <router-link :to="harvesterLocation">
151
- {{ t('product.harvesterManager') }}
152
- </router-link>
153
- </Banner>
154
-
155
- <NameNsDescription
156
- v-if="!isView"
157
- :value="value"
158
- :mode="mode"
159
- :namespaced="false"
160
- name-label="cluster.name.label"
161
- name-placeholder="cluster.name.placeholder"
162
- description-label="cluster.description.label"
163
- description-placeholder="cluster.description.placeholder"
164
- @update:value="$emit('input', $event)"
165
- />
166
-
167
- <Tabbed :side-tabs="true">
168
- <Tab
169
- v-if="canManageMembers"
170
- name="memberRoles"
171
- label-key="cluster.tabs.memberRoles"
172
- :weight="3"
173
- >
174
- <Banner
175
- v-if="isEdit"
176
- color="info"
177
- >
178
- {{ t('cluster.memberRoles.removeMessage') }}
179
- </Banner>
180
- <ClusterMembershipEditor
181
- :mode="mode"
182
- :parent-id="value.mgmt ? value.mgmt.id : null"
183
- @membership-update="onMembershipUpdate"
184
- />
185
- </Tab>
186
- <AgentEnv
187
- :value="value"
188
- :mode="mode"
189
- @update:value="$emit('input', $event)"
190
- />
191
- <Labels
192
- :value="value"
193
- :mode="mode"
194
- @update:value="$emit('input', $event)"
195
- />
196
- </Tabbed>
197
- </CruResource>
198
- </template>