@rancher/shell 1.2.5-rc.1 → 1.2.6

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.
@@ -355,9 +355,8 @@ addClusterMemberDialog:
355
355
  title: Add Cluster Member
356
356
 
357
357
  addonConfigConfirmation:
358
- title: Add-On Config Reset
359
- body: Changing the Kubernetes Version can reset the Add-On Config values. You should check that the values are as expected before continuing.
360
-
358
+ title: Add-On Reset
359
+ body: Changing the Kubernetes Version can reset Add-On values. You should check that the values are as expected before continuing.
361
360
  addProjectMemberDialog:
362
361
  title: Add Project Member
363
362
 
@@ -1107,17 +1106,39 @@ cis:
1107
1106
 
1108
1107
  cluster:
1109
1108
  addonChart:
1110
- rancher-vsphere-cpi: vSphere CPI Configuration
1111
- rancher-vsphere-csi: vSphere CSI Configuration
1112
- rke2-calico: Calico Configuration
1113
- rke2-calico-crd: Calico Configuration
1114
- rke2-canal: Canal Configuration
1115
- rke2-cilium: Cilium Configuration
1116
- rke2-coredns: CoreDNS Configuration
1117
- rke2-ingress-nginx: NGINX Ingress Configuration
1118
- rke2-kube-proxy: Kube Proxy Configuration
1119
- rke2-metrics-server: Metrics Server Configuration
1120
- rke2-multus: Multus Configuration
1109
+ rancher-vsphere-cpi:
1110
+ label: "Add-on: vSphere CPI"
1111
+ configuration: vSphere CPI
1112
+ rancher-vsphere-csi:
1113
+ label: "Add-on: vSphere CSI"
1114
+ configuration: vSphere CSI
1115
+ rke2-calico:
1116
+ label: "Add-on: Calico"
1117
+ configuration: Calico
1118
+ rke2-calico-crd:
1119
+ label: "Add-on: Calico"
1120
+ configuration: Calico
1121
+ rke2-canal:
1122
+ label: "Add-on: Canal"
1123
+ configuration: Canal
1124
+ rke2-cilium:
1125
+ label: "Add-on: Cilium"
1126
+ configuration: Cilium
1127
+ rke2-coredns:
1128
+ label: "Add-on: CoreDNS"
1129
+ configuration: CoreDNS
1130
+ rke2-ingress-nginx:
1131
+ label: "Add-on: NGINX"
1132
+ configuration: NGINX Ingress
1133
+ rke2-kube-proxy:
1134
+ label: "Add-on: Kube Proxy"
1135
+ configuration: Kube Proxy
1136
+ rke2-metrics-server:
1137
+ label: "Add-on: Metrics Server"
1138
+ configuration: Metrics Server
1139
+ rke2-multus:
1140
+ label: "Add-on: Multus"
1141
+ configuration: Multus
1121
1142
  agentEnvVars:
1122
1143
  label: Agent Environment
1123
1144
  detail: Add additional environment variables to the agent container. This is most commonly useful for configuring a HTTP proxy.
@@ -1133,7 +1154,7 @@ cluster:
1133
1154
  label: Google
1134
1155
  rancher-vsphere:
1135
1156
  label: vSphere
1136
- note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-On Config tab.'
1157
+ note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-on tabs.'
1137
1158
  harvester:
1138
1159
  label: Harvester
1139
1160
  copyConfig: Copy KubeConfig to Clipboard
@@ -1279,8 +1300,10 @@ cluster:
1279
1300
  macAddress: Mac Address
1280
1301
  macFormat: 'Invalid MAC address format.'
1281
1302
  vGpus:
1303
+ warnings:
1304
+ minimumAllocatable: It's highly recommended to select a vGPU with a number of allocatable devices greater than the number of nodes (Machine Count) to avoid "un-schedulable" errors after cluster updates.
1282
1305
  errors:
1283
- notAllocatable: '"VGPUs" not allocatable. There are not enough [{vGpus}] devices to be allocated to each node in machine pool [{pool}]'
1306
+ notAllocatable: '[{vGpu}] vGPU device is not allocatable; required: {allocated}, allocatable: {allocatable}'
1284
1307
  volume:
1285
1308
  title: Volumes
1286
1309
  volume: Volume
@@ -1633,7 +1656,7 @@ cluster:
1633
1656
  serverOs:
1634
1657
  label: OS
1635
1658
  addOns:
1636
- dependencyBanner: Add-On Configurations can vary between Kubernetes versions. Changing the Kubernetes version may reset the values below.
1659
+ dependencyBanner: Add-On Configuration can vary between Kubernetes versions. Changing the Kubernetes version may reset the values below.
1637
1660
  additionalManifest:
1638
1661
  title: Additional Manifest
1639
1662
  tooltip: 'Additional Kubernetes Manifest YAML to be applied to the cluster on startup.'
@@ -1981,7 +2004,7 @@ cluster:
1981
2004
  s3: s3
1982
2005
  tabs:
1983
2006
  ace: Authorized Endpoint
1984
- addons: Add-On Config
2007
+ addOnAdditionalManifest: Additional Manifest
1985
2008
  advanced: Advanced
1986
2009
  agentEnv: Agent Environment Vars
1987
2010
  basic: Basics
@@ -178,12 +178,16 @@ export default {
178
178
  }
179
179
  },
180
180
  // since the Header is a "persistent component" we need to update it at every route change...
181
- $route(nue) {
182
- if (nue) {
183
- this.extensionHeaderActions = getApplicableExtensionEnhancements(this, ExtensionPoint.ACTION, ActionLocation.HEADER, nue);
181
+ $route: {
182
+ handler(nue) {
183
+ if (nue) {
184
+ this.extensionHeaderActions = getApplicableExtensionEnhancements(this, ExtensionPoint.ACTION, ActionLocation.HEADER, nue);
184
185
 
185
- this.navHeaderRight = this.$plugin?.getDynamic('component', 'NavHeaderRight');
186
- }
186
+ this.navHeaderRight = this.$plugin?.getDynamic('component', 'NavHeaderRight');
187
+ }
188
+ },
189
+ immediate: true,
190
+ deep: true,
187
191
  }
188
192
  },
189
193
 
package/core/types.ts CHANGED
@@ -237,6 +237,16 @@ export interface ProductOptions {
237
237
  */
238
238
  to?: Location;
239
239
 
240
+ /**
241
+ * Alternative to the icon property. Uses require
242
+ */
243
+ svg?: Function;
244
+
245
+ /**
246
+ * Product name
247
+ */
248
+ name?: string;
249
+
240
250
  /**
241
251
  * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.
242
252
  */
@@ -373,10 +383,25 @@ export interface ConfigureTypeOptions {
373
383
  }
374
384
 
375
385
  export interface ConfigureVirtualTypeOptions extends ConfigureTypeOptions {
386
+ /**
387
+ * Only load the product if the type is present
388
+ */
389
+ ifHave?: string;
390
+
391
+ /**
392
+ * Only load the product if the type is present
393
+ */
394
+ ifHaveType?: string | RegExp | Object;
395
+
396
+ /**
397
+ * The label that this type should display
398
+ */
399
+ label?: string;
400
+
376
401
  /**
377
402
  * The translation key displayed anywhere this type is referenced
378
403
  */
379
- labelKey: string;
404
+ labelKey?: string;
380
405
 
381
406
  /**
382
407
  * An identifier that should be unique across all types
@@ -9,7 +9,8 @@ import RelatedResources from '@shell/components/RelatedResources';
9
9
  import jsyaml from 'js-yaml';
10
10
  import merge from 'lodash/merge';
11
11
  import { CATALOG } from '@shell/config/types';
12
- import { sortBy } from '~shell/utils/sort';
12
+ import { sortBy } from '@shell/utils/sort';
13
+ import { allHash } from '@shell/utils/promise';
13
14
 
14
15
  export default {
15
16
  name: 'DetailRelease',
@@ -30,9 +31,15 @@ export default {
30
31
  },
31
32
 
32
33
  async fetch() {
33
- await this.$store.dispatch('catalog/load', { force: true, reset: true });
34
+ const promises = {
35
+ catalog: this.$store.dispatch('catalog/load', { force: true, reset: true }),
36
+ allOperations: this.$store.dispatch('cluster/findAll', { type: CATALOG.OPERATION }),
37
+ secrets: this.value.fetchValues(true),
38
+ };
34
39
 
35
- this.allOperations = await this.$store.dispatch('cluster/findAll', { type: CATALOG.OPERATION });
40
+ const res = await allHash(promises);
41
+
42
+ this.allOperations = res.allOperations;
36
43
  },
37
44
 
38
45
  computed: {
@@ -45,7 +52,7 @@ export default {
45
52
  },
46
53
 
47
54
  valuesYaml() {
48
- const combined = merge(merge({}, this.value?.spec?.chart?.values || {}), this.value?.spec?.values || {});
55
+ const combined = merge(merge({}, this.value?.chartValues || {}), this.value?.values || {});
49
56
 
50
57
  return jsyaml.dump(combined);
51
58
  },
@@ -95,6 +102,12 @@ export default {
95
102
  }
96
103
  },
97
104
  },
105
+
106
+ watch: {
107
+ 'value.secretId'(neu, old) {
108
+ this.value.fetchValues(true);
109
+ }
110
+ },
98
111
  };
99
112
  </script>
100
113
 
@@ -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>
@@ -0,0 +1,97 @@
1
+ <script>
2
+ import { Banner } from '@components/Banner';
3
+
4
+ import Questions from '@shell/components/Questions';
5
+ import YamlEditor from '@shell/components/YamlEditor';
6
+ import { labelForAddon } from '@shell/utils/cluster';
7
+ import { _EDIT } from '@shell/config/query-params';
8
+
9
+ export default {
10
+ components: {
11
+ Banner,
12
+ Questions,
13
+ YamlEditor
14
+ },
15
+
16
+ props: {
17
+ mode: {
18
+ type: String,
19
+ required: true,
20
+ },
21
+ value: {
22
+ type: Object,
23
+ required: true,
24
+ },
25
+ versionInfo: {
26
+ type: Object,
27
+ required: true,
28
+ },
29
+ addonVersion: {
30
+ type: Object,
31
+ required: false,
32
+ default: null
33
+ },
34
+ addonsRev: {
35
+ type: Number,
36
+ required: true,
37
+ },
38
+ userChartValuesTemp: {
39
+ type: Object,
40
+ required: true,
41
+ },
42
+ initYamlEditor: {
43
+ type: Function,
44
+ required: true,
45
+ }
46
+ },
47
+
48
+ data() {
49
+ return { labelForAddon };
50
+ },
51
+
52
+ computed: {
53
+ isEdit() {
54
+ return this.mode === _EDIT;
55
+ },
56
+ }
57
+ };
58
+ </script>
59
+
60
+ <template>
61
+ <div>
62
+ <Banner
63
+ v-if="isEdit"
64
+ color="warning"
65
+ >
66
+ {{ t('cluster.addOns.dependencyBanner') }}
67
+ </Banner>
68
+ <div
69
+ v-if="versionInfo && addonVersion"
70
+ :key="addonsRev"
71
+ >
72
+ <h3>{{ labelForAddon(addonVersion.name) }}</h3>
73
+ <Questions
74
+ v-if="versionInfo[addonVersion.name] && versionInfo[addonVersion.name].questions && addonVersion.name && userChartValuesTemp[addonVersion.name]"
75
+ v-model="userChartValuesTemp[addonVersion.name]"
76
+ :emit="true"
77
+ in-store="management"
78
+ :mode="mode"
79
+ :tabbed="false"
80
+ :source="versionInfo[addonVersion.name]"
81
+ :target-namespace="value.metadata.namespace"
82
+ @updated="$emit('update-questions', addonVersion.name)"
83
+ />
84
+ <YamlEditor
85
+ v-else
86
+ ref="yaml-values"
87
+ :value="initYamlEditor(addonVersion.name)"
88
+ :scrolling="true"
89
+ :as-object="true"
90
+ :editor-mode="mode === 'view' ? 'VIEW_CODE' : 'EDIT_CODE'"
91
+ :hide-preview-buttons="true"
92
+ @input="data => $emit('update-values', addonVersion.name, data)"
93
+ />
94
+ <div class="spacer" />
95
+ </div>
96
+ </div>
97
+ </template>
package/mixins/chart.js CHANGED
@@ -263,6 +263,8 @@ export default {
263
263
  id: `${ this.query.appNamespace }/${ this.query.appName }`,
264
264
  });
265
265
 
266
+ await this.existing?.fetchValues(true);
267
+
266
268
  this.mode = _EDIT;
267
269
  } catch (e) {
268
270
  this.mode = _CREATE;
@@ -420,10 +422,12 @@ export default {
420
422
  }
421
423
  }
422
424
  if (existingCRDApp) {
425
+ await existingCRDApp.fetchValues(true);
426
+
423
427
  // spec.values are any non-default values the user configured
424
428
  // the installation form should show these, as well as any default values from the chart
425
- const existingValues = clone(existingCRDApp.spec?.values || {});
426
- const defaultValues = clone(existingCRDApp.spec?.chart?.values || {});
429
+ const existingValues = clone(existingCRDApp.values || {});
430
+ const defaultValues = clone(existingCRDApp.chartValues || {});
427
431
 
428
432
  crdVersionInfo.existingValues = existingValues;
429
433
  crdVersionInfo.allValues = merge(defaultValues, existingValues);