@rancher/shell 1.2.3 → 1.2.5

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 (62) hide show
  1. package/assets/translations/en-us.yaml +49 -18
  2. package/assets/translations/zh-hans.yaml +1 -0
  3. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  4. package/cloud-credential/harvester.vue +9 -1
  5. package/components/AlertTable.vue +17 -7
  6. package/components/GrafanaDashboard.vue +6 -4
  7. package/components/nav/Header.vue +9 -5
  8. package/components/nav/TopLevelMenu.vue +1 -4
  9. package/config/product/explorer.js +11 -4
  10. package/config/settings.ts +9 -2
  11. package/config/types.js +1 -1
  12. package/config/uiplugins.js +2 -2
  13. package/detail/catalog.cattle.io.app.vue +17 -4
  14. package/edit/management.cattle.io.setting.vue +15 -2
  15. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +8 -2
  16. package/edit/provisioning.cattle.io.cluster/__tests__/RegistryConfigs.test.ts +61 -0
  17. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
  18. package/edit/provisioning.cattle.io.cluster/rke2.vue +73 -77
  19. package/edit/provisioning.cattle.io.cluster/tabs/AddOnAdditionalManifest.vue +45 -0
  20. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +97 -0
  21. package/mixins/chart.js +6 -2
  22. package/models/catalog.cattle.io.app.js +112 -21
  23. package/models/management.cattle.io.cluster.js +18 -6
  24. package/package.json +1 -1
  25. package/pages/c/_cluster/apps/charts/install.vue +2 -1
  26. package/plugins/dashboard-store/actions.js +3 -2
  27. package/scripts/extension/bundle +1 -1
  28. package/scripts/publish-shell.sh +62 -55
  29. package/scripts/test-plugins-build.sh +111 -29
  30. package/scripts/typegen.sh +26 -23
  31. package/store/catalog.js +1 -1
  32. package/store/features.js +1 -0
  33. package/store/type-map.utils.ts +44 -0
  34. package/types/shell/index.d.ts +2 -0
  35. package/types/store/dashboard-store.types.ts +23 -0
  36. package/types/store/vuex.d.ts +9 -0
  37. package/utils/cluster.js +9 -0
  38. package/utils/v-sphere.ts +277 -0
  39. package/.DS_Store +0 -0
  40. package/creators/app/app.package.json +0 -13
  41. package/creators/app/files/.eslintignore +0 -18
  42. package/creators/app/files/.eslintrc.js +0 -173
  43. package/creators/app/files/.gitignore +0 -70
  44. package/creators/app/files/.vscode/settings.json +0 -22
  45. package/creators/app/files/babel.config.js +0 -1
  46. package/creators/app/files/tsconfig.json +0 -42
  47. package/creators/app/files/vue.config.js +0 -6
  48. package/creators/app/init +0 -101
  49. package/creators/app/package.json +0 -25
  50. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +0 -28
  51. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +0 -26
  52. package/creators/pkg/files/babel.config.js +0 -1
  53. package/creators/pkg/files/index.ts +0 -14
  54. package/creators/pkg/files/tsconfig.json +0 -53
  55. package/creators/pkg/files/vue.config.js +0 -1
  56. package/creators/pkg/init +0 -254
  57. package/creators/pkg/package.json +0 -19
  58. package/creators/pkg/pkg.package.json +0 -21
  59. package/creators/pkg/vue-shim.ts +0 -4
  60. package/creators/update/init +0 -56
  61. package/creators/update/package.json +0 -20
  62. package/creators/update/upgrade +0 -56
@@ -0,0 +1,386 @@
1
+ export const PROV_CLUSTER = {
2
+ id: 'fleet-default/test-args',
3
+ type: 'provisioning.cattle.io.cluster',
4
+ apiVersion: 'provisioning.cattle.io/v1',
5
+ kind: 'Cluster',
6
+ metadata: {
7
+ annotations: { 'field.cattle.io/creatorId': 'user' },
8
+ creationTimestamp: '2024-01-14T10:03:39Z',
9
+ generation: 3,
10
+ name: 'test-args',
11
+ namespace: 'fleet-default',
12
+ state: {
13
+ error: false,
14
+ message: 'Resource is Ready',
15
+ name: 'active',
16
+ transitioning: false
17
+ },
18
+ uid: 'eab4ed52-c339-4d61-8dc2-804d09f36425',
19
+ labels: {}
20
+ },
21
+ spec: {
22
+ kubernetesVersion: 'v1.27.8+rke2r1',
23
+ localClusterAuthEndpoint: {
24
+ enabled: false,
25
+ caCerts: '',
26
+ fqdn: ''
27
+ },
28
+ rkeConfig: {
29
+ chartValues: { 'rke2-calico': {} },
30
+ etcd: {
31
+ snapshotRetention: 5,
32
+ snapshotScheduleCron: '0 */5 * * *',
33
+ disableSnapshots: false
34
+ },
35
+ machineGlobalConfig: {
36
+ cni: 'calico',
37
+ 'disable-kube-proxy': false,
38
+ 'etcd-expose-metrics': false
39
+ },
40
+ machinePoolDefaults: {},
41
+ machinePools: [
42
+ {
43
+ controlPlaneRole: true,
44
+ drainBeforeDelete: true,
45
+ etcdRole: true,
46
+ machineConfigRef: {
47
+ kind: 'DigitaloceanConfig',
48
+ name: 'nc-test-args-pool1-dfvbh'
49
+ },
50
+ name: 'pool1',
51
+ quantity: 1,
52
+ unhealthyNodeTimeout: '0s',
53
+ workerRole: true
54
+ }
55
+ ],
56
+ machineSelectorConfig: [
57
+ { config: { 'protect-kernel-defaults': false } }
58
+ ],
59
+ registries: {
60
+ configs: {},
61
+ mirrors: {}
62
+ },
63
+ },
64
+ defaultPodSecurityAdmissionConfigurationTemplateName: '',
65
+ },
66
+ status: {
67
+ agentDeployed: true,
68
+ clientSecretName: 'test-args-kubeconfig',
69
+ clusterName: 'c-m-qk7hvstl',
70
+ fleetWorkspaceName: 'fleet-default',
71
+ observedGeneration: 3,
72
+ ready: true
73
+ }
74
+ };
75
+
76
+ export const VERSION_CLUSTER = {
77
+ label: 'v1.27.8+rke2r1',
78
+ value: 'v1.27.8+rke2r1',
79
+ sort: '0000000001.0000000027.0000000008.rke0000000002r0000000001',
80
+ serverArgs: {
81
+ 'audit-policy-file': {
82
+ type: 'string',
83
+ create: false,
84
+ update: false
85
+ },
86
+ 'cluster-cidr': {
87
+ type: 'string',
88
+ create: false,
89
+ update: false
90
+ },
91
+ 'cluster-dns': {
92
+ type: 'string',
93
+ create: false,
94
+ update: false
95
+ },
96
+ 'cluster-domain': {
97
+ type: 'string',
98
+ create: false,
99
+ update: false
100
+ },
101
+ cni: {
102
+ type: 'array',
103
+ default: 'calico',
104
+ create: false,
105
+ update: false,
106
+ options: [
107
+ 'canal',
108
+ 'cilium',
109
+ 'calico',
110
+ 'multus,canal',
111
+ 'multus,cilium',
112
+ 'multus,calico'
113
+ ]
114
+ },
115
+ 'container-runtime-endpoint': {
116
+ type: 'string',
117
+ create: false,
118
+ update: false
119
+ },
120
+ disable: {
121
+ type: 'array',
122
+ create: false,
123
+ update: false,
124
+ options: [
125
+ 'rke2-coredns',
126
+ 'rke2-ingress-nginx',
127
+ 'rke2-metrics-server'
128
+ ]
129
+ },
130
+ 'disable-cloud-controller': {
131
+ type: 'bool',
132
+ create: false,
133
+ update: false
134
+ },
135
+ 'disable-kube-proxy': {
136
+ type: 'boolean',
137
+ default: false,
138
+ create: false,
139
+ update: false
140
+ },
141
+ 'disable-scheduler': {
142
+ type: 'bool',
143
+ create: false,
144
+ update: false
145
+ },
146
+ 'egress-selector-mode': {
147
+ type: 'string',
148
+ create: false,
149
+ update: false
150
+ },
151
+ 'etcd-arg': {
152
+ type: 'array',
153
+ create: false,
154
+ update: false
155
+ },
156
+ 'etcd-expose-metrics': {
157
+ type: 'boolean',
158
+ default: false,
159
+ create: false,
160
+ update: false
161
+ },
162
+ 'etcd-image': {
163
+ type: 'string',
164
+ create: false,
165
+ update: false
166
+ },
167
+ 'kube-apiserver-arg': {
168
+ type: 'array',
169
+ create: false,
170
+ update: false
171
+ },
172
+ 'kube-apiserver-image': {
173
+ type: 'string',
174
+ create: false,
175
+ update: false
176
+ },
177
+ 'kube-cloud-controller-manager-arg': {
178
+ type: 'array',
179
+ create: false,
180
+ update: false
181
+ },
182
+ 'kube-controller-manager-arg': {
183
+ type: 'array',
184
+ create: false,
185
+ update: false
186
+ },
187
+ 'kube-controller-manager-image': {
188
+ type: 'string',
189
+ create: false,
190
+ update: false
191
+ },
192
+ 'kube-proxy-arg': {
193
+ type: 'array',
194
+ create: false,
195
+ update: false
196
+ },
197
+ 'kube-scheduler-arg': {
198
+ type: 'array',
199
+ create: false,
200
+ update: false
201
+ },
202
+ 'kube-scheduler-image': {
203
+ type: 'string',
204
+ create: false,
205
+ update: false
206
+ },
207
+ 'kubelet-path': {
208
+ type: 'string',
209
+ create: false,
210
+ update: false
211
+ },
212
+ 'pause-image': {
213
+ type: 'string',
214
+ create: false,
215
+ update: false
216
+ },
217
+ 'runtime-image': {
218
+ type: 'string',
219
+ create: false,
220
+ update: false
221
+ },
222
+ 'service-cidr': {
223
+ type: 'string',
224
+ create: false,
225
+ update: false
226
+ },
227
+ 'service-node-port-range': {
228
+ type: 'string',
229
+ create: false,
230
+ update: false
231
+ },
232
+ snapshotter: {
233
+ type: 'string',
234
+ create: false,
235
+ update: false
236
+ },
237
+ 'tls-san': {
238
+ type: 'array',
239
+ create: false,
240
+ update: false
241
+ },
242
+ 'tls-san-security': {
243
+ type: 'boolean',
244
+ create: false,
245
+ update: false
246
+ }
247
+ },
248
+ agentArgs: {
249
+ 'audit-policy-file': {
250
+ type: 'string',
251
+ create: false,
252
+ update: false
253
+ },
254
+ 'cloud-controller-manager-extra-env': {
255
+ type: 'array',
256
+ create: false,
257
+ update: false
258
+ },
259
+ 'cloud-controller-manager-extra-mount': {
260
+ type: 'array',
261
+ create: false,
262
+ update: false
263
+ },
264
+ 'cloud-provider-config': {
265
+ type: 'string',
266
+ create: false,
267
+ update: false
268
+ },
269
+ 'cloud-provider-name': {
270
+ type: 'enum',
271
+ nullable: true,
272
+ create: false,
273
+ update: false,
274
+ options: [
275
+ 'aws',
276
+ 'azure',
277
+ 'gcp',
278
+ 'rancher-vsphere',
279
+ 'harvester',
280
+ 'external'
281
+ ]
282
+ },
283
+ 'control-plane-resource-limits': {
284
+ type: 'string',
285
+ create: false,
286
+ update: false
287
+ },
288
+ 'control-plane-resource-requests': {
289
+ type: 'string',
290
+ create: false,
291
+ update: false
292
+ },
293
+ 'etcd-extra-env': {
294
+ type: 'array',
295
+ create: false,
296
+ update: false
297
+ },
298
+ 'etcd-extra-mount': {
299
+ type: 'array',
300
+ create: false,
301
+ update: false
302
+ },
303
+ 'kube-apiserver-extra-env': {
304
+ type: 'array',
305
+ create: false,
306
+ update: false
307
+ },
308
+ 'kube-apiserver-extra-mount': {
309
+ type: 'array',
310
+ create: false,
311
+ update: false
312
+ },
313
+ 'kube-controller-manager-extra-env': {
314
+ type: 'array',
315
+ create: false,
316
+ update: false
317
+ },
318
+ 'kube-controller-manager-extra-mount': {
319
+ type: 'array',
320
+ create: false,
321
+ update: false
322
+ },
323
+ 'kube-proxy-arg': {
324
+ type: 'array',
325
+ create: false,
326
+ update: false
327
+ },
328
+ 'kube-proxy-extra-env': {
329
+ type: 'array',
330
+ create: false,
331
+ update: false
332
+ },
333
+ 'kube-proxy-extra-mount': {
334
+ type: 'array',
335
+ create: false,
336
+ update: false
337
+ },
338
+ 'kube-scheduler-extra-env': {
339
+ type: 'array',
340
+ create: false,
341
+ update: false
342
+ },
343
+ 'kube-scheduler-extra-mount': {
344
+ type: 'array',
345
+ create: false,
346
+ update: false
347
+ },
348
+ 'kubelet-arg': {
349
+ type: 'array',
350
+ create: false,
351
+ update: false
352
+ },
353
+ profile: {
354
+ type: 'enum',
355
+ nullable: true,
356
+ create: false,
357
+ update: false,
358
+ options: [
359
+ 'cis',
360
+ 'cis-1.23'
361
+ ]
362
+ },
363
+ 'protect-kernel-defaults': {
364
+ type: 'boolean',
365
+ default: false,
366
+ create: false,
367
+ update: false
368
+ },
369
+ 'resolv-conf': {
370
+ type: 'string',
371
+ create: false,
372
+ update: false
373
+ },
374
+ selinux: {
375
+ type: 'bool',
376
+ create: false,
377
+ update: false
378
+ },
379
+ 'system-default-registry': {
380
+ type: 'string',
381
+ create: false,
382
+ update: false
383
+ }
384
+ },
385
+ disabled: false
386
+ };
@@ -28,9 +28,8 @@ import {
28
28
  import { allHash } from '@shell/utils/promise';
29
29
  import { sortBy } from '@shell/utils/sort';
30
30
 
31
- import { camelToTitle } from '@shell/utils/string';
32
31
  import { compare, sortable } from '@shell/utils/version';
33
- import { isHarvesterSatisfiesVersion } from '@shell/utils/cluster';
32
+ import { isHarvesterSatisfiesVersion, labelForAddon } from '@shell/utils/cluster';
34
33
  import * as VERSION from '@shell/utils/version';
35
34
 
36
35
  import ArrayList from '@shell/components/form/ArrayList';
@@ -74,6 +73,9 @@ import { getApplicableExtensionEnhancements } from '@shell/core/plugin-helpers';
74
73
  import { ExtensionPoint, TabLocation } from '@shell/core/types';
75
74
  import MemberRoles from '@shell/edit/provisioning.cattle.io.cluster/MemberRoles';
76
75
  import Basics from '@shell/edit/provisioning.cattle.io.cluster/Basics';
76
+ import AddOnConfig from '@shell/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig';
77
+ import AddOnAdditionalManifest from '@shell/edit/provisioning.cattle.io.cluster/tabs/AddOnAdditionalManifest';
78
+ import VsphereUtils from '@shell/utils/v-sphere';
77
79
 
78
80
  const HARVESTER = 'harvester';
79
81
  const HARVESTER_CLOUD_PROVIDER = 'harvester-cloud-provider';
@@ -132,7 +134,9 @@ export default {
132
134
  UnitInput,
133
135
  YamlEditor,
134
136
  MemberRoles,
135
- Basics
137
+ Basics,
138
+ AddOnConfig,
139
+ AddOnAdditionalManifest
136
140
  },
137
141
 
138
142
  mixins: [CreateEditView, FormValidation],
@@ -250,6 +254,7 @@ export default {
250
254
  machinePoolErrors: {},
251
255
  allNamespaces: [],
252
256
  extensionTabs: getApplicableExtensionEnhancements(this, ExtensionPoint.TAB, TabLocation.CLUSTER_CREATE_RKE2, this.$route, this),
257
+ labelForAddon,
253
258
  };
254
259
  },
255
260
 
@@ -835,6 +840,8 @@ export default {
835
840
  created() {
836
841
  this.registerBeforeHook(this.saveMachinePools, 'save-machine-pools', 1);
837
842
  this.registerBeforeHook(this.setRegistryConfig, 'set-registry-config');
843
+ this.registerBeforeHook(this.handleVsphereCpiSecret, 'sync-vsphere-cpi');
844
+ this.registerBeforeHook(this.handleVsphereCsiSecret, 'sync-vsphere-csi');
838
845
  this.registerAfterHook(this.cleanupMachinePools, 'cleanup-machine-pools');
839
846
  this.registerAfterHook(this.saveRoleBindings, 'save-role-bindings');
840
847
 
@@ -847,6 +854,13 @@ export default {
847
854
  methods: {
848
855
  set,
849
856
 
857
+ async handleVsphereCpiSecret() {
858
+ return VsphereUtils.handleVsphereCpiSecret(this);
859
+ },
860
+ async handleVsphereCsiSecret() {
861
+ return VsphereUtils.handleVsphereCsiSecret(this);
862
+ },
863
+
850
864
  /**
851
865
  * Initialize all the cluster specs
852
866
  */
@@ -1549,30 +1563,34 @@ export default {
1549
1563
  }
1550
1564
  },
1551
1565
 
1552
- labelForAddon(name) {
1553
- const fallback = `${ camelToTitle(name.replace(/^(rke|rke2|rancher)-/, '')) } Configuration`;
1554
-
1555
- return this.$store.getters['i18n/withFallback'](`cluster.addonChart."${ name }"`, null, fallback);
1556
- },
1557
-
1558
- showAddons() {
1566
+ showAddons(key) {
1559
1567
  this.addonsRev++;
1560
1568
  this.addonNames.forEach((name) => {
1561
1569
  const chartValues = this.versionInfo[name]?.questions ? this.initYamlEditor(name) : {};
1562
1570
 
1563
1571
  set(this.userChartValuesTemp, name, chartValues);
1564
1572
  });
1565
- this.refreshYamls();
1573
+ this.refreshComponentWithYamls(key);
1574
+ },
1575
+
1576
+ refreshComponentWithYamls(key) {
1577
+ const component = this.$refs[key];
1578
+
1579
+ if (Array.isArray(component) && component.length > 0) {
1580
+ this.refreshYamls(component[0].$refs);
1581
+ } else if (component) {
1582
+ this.refreshYamls(component.$refs);
1583
+ }
1566
1584
  },
1567
1585
 
1568
- refreshYamls() {
1569
- const keys = Object.keys(this.$refs).filter((x) => x.startsWith('yaml'));
1586
+ refreshYamls(refs) {
1587
+ const keys = Object.keys(refs).filter((x) => x.startsWith('yaml'));
1570
1588
 
1571
- for ( const k of keys ) {
1572
- const entry = this.$refs[k];
1589
+ for (const k of keys) {
1590
+ const entry = refs[k];
1573
1591
  const list = isArray(entry) ? entry : [entry];
1574
1592
 
1575
- for ( const component of list ) {
1593
+ for (const component of list) {
1576
1594
  component?.refresh(); // `yaml` ref can be undefined on switching from Basic to Addon tab (Azure --> Amazon --> addon)
1577
1595
  }
1578
1596
  }
@@ -2005,6 +2023,10 @@ export default {
2005
2023
  }
2006
2024
  },
2007
2025
 
2026
+ updateAdditionalManifest(neu) {
2027
+ this.value.spec.rkeConfig.additionalManifest = neu;
2028
+ },
2029
+
2008
2030
  /**
2009
2031
  * Keep last PSP value
2010
2032
  */
@@ -2279,7 +2301,7 @@ export default {
2279
2301
  name="basic"
2280
2302
  label-key="cluster.tabs.basic"
2281
2303
  :weight="11"
2282
- @active="refreshYamls"
2304
+ @active="refreshComponentWithYamls('tab-Basics')"
2283
2305
  >
2284
2306
  <!-- Basic -->
2285
2307
  <Basics
@@ -2665,68 +2687,43 @@ export default {
2665
2687
  </template>
2666
2688
  </Tab>
2667
2689
 
2668
- <!-- Add-on Config -->
2690
+ <!-- Add-on Configs -->
2669
2691
  <Tab
2670
- name="addons"
2671
- label-key="cluster.tabs.addons"
2672
- @active="showAddons"
2692
+ v-for="v in addonVersions"
2693
+ :key="v.name"
2694
+ :name="v.name"
2695
+ :label="labelForAddon(v.name, false)"
2696
+ :weight="9"
2697
+ :showHeader="false"
2698
+ @active="showAddons(v.name)"
2673
2699
  >
2674
- <Banner
2675
- v-if="isEdit"
2676
- color="warning"
2677
- >
2678
- {{ t('cluster.addOns.dependencyBanner') }}
2679
- </Banner>
2680
- <div
2681
- v-if="versionInfo && addonVersions.length"
2682
- :key="addonsRev"
2683
- >
2684
- <div
2685
- v-for="v in addonVersions"
2686
- :key="v._key"
2687
- >
2688
- <h3>{{ labelForAddon(v.name) }}</h3>
2689
- <Questions
2690
- v-if="versionInfo[v.name] && versionInfo[v.name].questions && v.name && userChartValuesTemp[v.name]"
2691
- v-model="userChartValuesTemp[v.name]"
2692
- :emit="true"
2693
- in-store="management"
2694
- :mode="mode"
2695
- :tabbed="false"
2696
- :source="versionInfo[v.name]"
2697
- :target-namespace="value.metadata.namespace"
2698
- @updated="updateQuestions(v.name)"
2699
- />
2700
- <YamlEditor
2701
- v-else
2702
- ref="yaml-values"
2703
- :value="initYamlEditor(v.name)"
2704
- :scrolling="true"
2705
- :as-object="true"
2706
- :editor-mode="mode === 'view' ? 'VIEW_CODE' : 'EDIT_CODE'"
2707
- :hide-preview-buttons="true"
2708
- @input="data => updateValues(v.name, data)"
2709
- />
2710
- <div class="spacer" />
2711
- </div>
2712
- </div>
2700
+ <AddOnConfig
2701
+ :ref="v.name"
2702
+ v-model="value"
2703
+ :mode="mode"
2704
+ :version-info="versionInfo"
2705
+ :addon-version="v"
2706
+ :addons-rev="addonsRev"
2707
+ :user-chart-values-temp="userChartValuesTemp"
2708
+ :init-yaml-editor="initYamlEditor"
2709
+ @update-questions="syncChartValues"
2710
+ @update-values="updateValues"
2711
+ />
2712
+ </Tab>
2713
2713
 
2714
- <div>
2715
- <h3>
2716
- {{ t('cluster.addOns.additionalManifest.title') }}
2717
- <i
2718
- v-clean-tooltip="t('cluster.addOns.additionalManifest.tooltip')"
2719
- class="icon icon-info"
2720
- />
2721
- </h3>
2722
- <YamlEditor
2723
- ref="yaml-additional"
2724
- v-model="rkeConfig.additionalManifest"
2725
- :editor-mode="mode === 'view' ? 'VIEW_CODE' : 'EDIT_CODE'"
2726
- initial-yaml-values="# Additional Manifest YAML"
2727
- class="yaml-editor"
2728
- />
2729
- </div>
2714
+ <!-- Add-on Additional Manifest -->
2715
+ <Tab
2716
+ name="additionalmanifest"
2717
+ label-key="cluster.tabs.addOnAdditionalManifest"
2718
+ :showHeader="false"
2719
+ @active="refreshComponentWithYamls('additionalmanifest')"
2720
+ >
2721
+ <AddOnAdditionalManifest
2722
+ ref="additionalmanifest"
2723
+ :value="value"
2724
+ :mode="mode"
2725
+ @additional-manifest-changed="updateAdditionalManifest"
2726
+ />
2730
2727
  </Tab>
2731
2728
 
2732
2729
  <!-- Cluster Agent Configuration -->
@@ -2763,7 +2760,6 @@ export default {
2763
2760
  name="advanced"
2764
2761
  label-key="cluster.tabs.advanced"
2765
2762
  :weight="-1"
2766
- @active="refreshYamls"
2767
2763
  >
2768
2764
  <template v-if="haveArgInfo">
2769
2765
  <h3>{{ t('cluster.advanced.argInfo.title') }}</h3>
@@ -0,0 +1,45 @@
1
+ <script>
2
+ import YamlEditor from '@shell/components/YamlEditor';
3
+ export default {
4
+ components: { YamlEditor },
5
+ props: {
6
+ mode: {
7
+ type: String,
8
+ required: true,
9
+ },
10
+ value: {
11
+ type: Object,
12
+ required: true,
13
+ }
14
+ },
15
+ computed: {
16
+ additionalManifest: {
17
+ get() {
18
+ return this.value.spec.rkeConfig.additionalManifest;
19
+ },
20
+ set(neu) {
21
+ this.$emit('additional-manifest-changed', neu);
22
+ }
23
+ }
24
+ }
25
+ };
26
+ </script>
27
+
28
+ <template>
29
+ <div>
30
+ <h3>
31
+ {{ t('cluster.addOns.additionalManifest.title') }}
32
+ <i
33
+ v-clean-tooltip="t('cluster.addOns.additionalManifest.tooltip')"
34
+ class="icon icon-info"
35
+ />
36
+ </h3>
37
+ <YamlEditor
38
+ ref="yaml-additional"
39
+ v-model="additionalManifest"
40
+ :editor-mode="mode === 'view' ? 'VIEW_CODE' : 'EDIT_CODE'"
41
+ initial-yaml-values="# Additional Manifest YAML"
42
+ class="yaml-editor"
43
+ />
44
+ </div>
45
+ </template>