@rancher/shell 0.1.21 → 0.2.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.
- package/assets/styles/global/_button.scss +1 -0
- package/assets/translations/en-us.yaml +48 -6
- package/assets/translations/zh-hans.yaml +18 -0
- package/components/HarvesterServiceAddOnConfig.vue +10 -10
- package/components/ResourceList/index.vue +34 -14
- package/components/ResourceTable.vue +19 -0
- package/components/SortableTable/THead.vue +311 -70
- package/components/SortableTable/advanced-filtering.js +272 -0
- package/components/SortableTable/filtering.js +90 -29
- package/components/SortableTable/index.vue +474 -271
- package/components/form/WorkloadPorts.vue +2 -2
- package/config/product/settings.js +1 -0
- package/config/product/uiplugins.js +1 -0
- package/config/uiplugins.js +13 -0
- package/creators/app/init +2 -2
- package/creators/app/package.json +1 -1
- package/creators/pkg/package.json +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/ACE.vue +2 -1
- package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +0 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +25 -24
- package/edit/service.vue +1 -1
- package/models/management.cattle.io.cluster.js +9 -1
- package/package.json +1 -1
- package/pages/c/_cluster/apps/charts/install.vue +119 -31
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +1 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +5 -2
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +1 -1
- package/pages/c/_cluster/uiplugins/index.vue +48 -11
- package/promptRemove/mixin/roleDeletionCheck.js +15 -1
- package/scripts/record-deps.js +3 -3
- package/store/type-map.js +2 -0
|
@@ -366,7 +366,7 @@ export default {
|
|
|
366
366
|
v-model="row._ipam"
|
|
367
367
|
:mode="mode"
|
|
368
368
|
:options="ipamOptions"
|
|
369
|
-
:label="t('harvester.
|
|
369
|
+
:label="t('servicesPage.harvester.ipam.label')"
|
|
370
370
|
:disabled="mode === 'edit'"
|
|
371
371
|
@input="queueUpdate"
|
|
372
372
|
/>
|
|
@@ -376,7 +376,7 @@ export default {
|
|
|
376
376
|
v-model="rows[ipamIndex]._ipam"
|
|
377
377
|
:mode="mode"
|
|
378
378
|
:options="ipamOptions"
|
|
379
|
-
:label="t('harvester.
|
|
379
|
+
:label="t('servicesPage.harvester.ipam.label')"
|
|
380
380
|
:disabled="true"
|
|
381
381
|
@input="queueUpdate"
|
|
382
382
|
/>
|
package/config/uiplugins.js
CHANGED
|
@@ -34,6 +34,7 @@ export const UI_PLUGIN_CHART_ANNOTATIONS = {
|
|
|
34
34
|
RANCHER_VERSION: 'catalog.cattle.io/rancher-version',
|
|
35
35
|
EXTENSIONS_VERSION: 'catalog.cattle.io/ui-extenstions-version',
|
|
36
36
|
EXTENSIONS_HOST: 'catalog.cattle.io/ui-extenstions-host',
|
|
37
|
+
DISPLAY_NAME: 'catalog.cattle.io/display-name',
|
|
37
38
|
};
|
|
38
39
|
|
|
39
40
|
// Plugin Metadata properties
|
|
@@ -41,6 +42,7 @@ export const UI_PLUGIN_METADATA = {
|
|
|
41
42
|
RANCHER_VERSION: 'rancherVersion',
|
|
42
43
|
EXTENSION_VERSION: 'extVersion',
|
|
43
44
|
EXTENSIONS_HOST: 'host',
|
|
45
|
+
DISPLAY_NAME: 'displayName',
|
|
44
46
|
};
|
|
45
47
|
|
|
46
48
|
export function isUIPlugin(chart) {
|
|
@@ -55,6 +57,17 @@ export function uiPluginHasAnnotation(chart, name, value) {
|
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Get value of the annotation from teh latest version for a chart
|
|
62
|
+
*/
|
|
63
|
+
export function uiPluginAnnotation(chart, name) {
|
|
64
|
+
if (chart?.versions?.length > 0) {
|
|
65
|
+
return chart.versions[0].annotations?.[name];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
|
|
58
71
|
// Should we load a plugin, based on the metadata returned by the backend?
|
|
59
72
|
// Returns error key string or false
|
|
60
73
|
export function shouldNotLoadPlugin(plugin, rancherVersion) {
|
package/creators/app/init
CHANGED
|
@@ -73,8 +73,8 @@ pkg.dependencies['@rancher/shell'] = `^${ creatorPkg.version }`;
|
|
|
73
73
|
|
|
74
74
|
// Rest of dependencies are in the _pkgs property of package.json - copy then across
|
|
75
75
|
if (creatorPkg._pkgs) {
|
|
76
|
-
Object.keys(creatorPkg._pkgs).forEach((
|
|
77
|
-
pkg.dependencies[
|
|
76
|
+
Object.keys(creatorPkg._pkgs).forEach((pkgName) => {
|
|
77
|
+
pkg.dependencies[pkgName] = creatorPkg._pkgs[pkgName];
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -709,7 +709,7 @@ export default {
|
|
|
709
709
|
</Tab>
|
|
710
710
|
|
|
711
711
|
<Tab v-if="showRegistration" name="registration" :label="t('cluster.tabs.registration')" :weight="2">
|
|
712
|
-
<Banner color="warning" :label="t('cluster.import.warningBanner')" />
|
|
712
|
+
<Banner v-if="!value.isCustom" color="warning" :label="t('cluster.import.warningBanner')" />
|
|
713
713
|
<CustomCommand v-if="value.isCustom" :cluster-token="clusterToken" :cluster="value" @copied-windows="hasWindowsMachine ? null : showWindowsWarning = true" />
|
|
714
714
|
<template v-else>
|
|
715
715
|
<h4 v-html="t('cluster.import.commandInstructions', null, true)" />
|
|
@@ -4,6 +4,7 @@ import { LabeledInput } from '@components/Form/LabeledInput';
|
|
|
4
4
|
import FileSelector, { createOnSelected } from '@shell/components/form/FileSelector';
|
|
5
5
|
import { set } from '@shell/utils/object';
|
|
6
6
|
import isEmpty from 'lodash/isEmpty';
|
|
7
|
+
import { _CREATE } from '@shell/config/query-params';
|
|
7
8
|
|
|
8
9
|
export default {
|
|
9
10
|
components: {
|
|
@@ -23,7 +24,7 @@ export default {
|
|
|
23
24
|
},
|
|
24
25
|
|
|
25
26
|
data() {
|
|
26
|
-
if ( isEmpty(this.value?.spec?.localClusterAuthEndpoint) ) {
|
|
27
|
+
if ( isEmpty(this.value?.spec?.localClusterAuthEndpoint) && this.mode === _CREATE ) {
|
|
27
28
|
set(this.value, 'spec.localClusterAuthEndpoint', {
|
|
28
29
|
enabled: false,
|
|
29
30
|
caCerts: '',
|
|
@@ -10,7 +10,6 @@ const DEFAULTS = {
|
|
|
10
10
|
force: false, // Show; true = Delete standalone pods, false = fail if there are any
|
|
11
11
|
gracePeriod: -1, // Show; Pod shut down time, negative value uses pod default
|
|
12
12
|
ignoreDaemonSets: true, // Hide; true = work, false = never work because there's always daemonSets
|
|
13
|
-
ignoreErrors: false, // Hide; profit?
|
|
14
13
|
skipWaitForDeleteTimeoutSeconds: 0, // Hide; If the pod deletion time is older than this > 0, don't wait, for some reason
|
|
15
14
|
timeout: 120, // Show; Give up after this many seconds
|
|
16
15
|
};
|
|
@@ -202,26 +202,6 @@ export default {
|
|
|
202
202
|
set(this.value.spec, 'kubernetesVersion', this.defaultVersion);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
for ( const k in this.serverArgs ) {
|
|
206
|
-
if ( this.serverConfig[k] === undefined ) {
|
|
207
|
-
const def = this.serverArgs[k].default;
|
|
208
|
-
|
|
209
|
-
set(this.serverConfig, k, (def !== undefined ? def : undefined));
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
for ( const k in this.agentArgs ) {
|
|
214
|
-
if ( this.agentConfig[k] === undefined ) {
|
|
215
|
-
const def = this.agentArgs[k].default;
|
|
216
|
-
|
|
217
|
-
set(this.agentConfig, k, (def !== undefined ? def : undefined));
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
if ( !this.serverConfig.profile ) {
|
|
222
|
-
set(this.serverConfig, 'profile', null);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
205
|
if ( this.rkeConfig.etcd?.s3?.bucket ) {
|
|
226
206
|
this.s3Backup = true;
|
|
227
207
|
}
|
|
@@ -922,6 +902,9 @@ export default {
|
|
|
922
902
|
|
|
923
903
|
// Allow time for addonNames to update... then fetch any missing addons
|
|
924
904
|
this.$nextTick(() => this.initAddons());
|
|
905
|
+
if (this.mode === _CREATE) {
|
|
906
|
+
this.initServerAgentArgs();
|
|
907
|
+
}
|
|
925
908
|
},
|
|
926
909
|
|
|
927
910
|
showCni(neu) {
|
|
@@ -1113,10 +1096,6 @@ export default {
|
|
|
1113
1096
|
entry.config = await entry.config.save();
|
|
1114
1097
|
}
|
|
1115
1098
|
|
|
1116
|
-
if ( !entry.pool.hostnamePrefix ) {
|
|
1117
|
-
entry.pool.hostnamePrefix = `${ prefix }-`;
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
1099
|
finalPools.push(entry.pool);
|
|
1121
1100
|
}
|
|
1122
1101
|
|
|
@@ -1387,6 +1366,28 @@ export default {
|
|
|
1387
1366
|
return merge({}, defaultChartValue?.values || {}, this.userChartValues[key] || {});
|
|
1388
1367
|
},
|
|
1389
1368
|
|
|
1369
|
+
initServerAgentArgs() {
|
|
1370
|
+
for ( const k in this.serverArgs ) {
|
|
1371
|
+
if ( this.serverConfig[k] === undefined ) {
|
|
1372
|
+
const def = this.serverArgs[k].default;
|
|
1373
|
+
|
|
1374
|
+
set(this.serverConfig, k, (def !== undefined ? def : undefined));
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
for ( const k in this.agentArgs ) {
|
|
1379
|
+
if ( this.agentConfig[k] === undefined ) {
|
|
1380
|
+
const def = this.agentArgs[k].default;
|
|
1381
|
+
|
|
1382
|
+
set(this.agentConfig, k, (def !== undefined ? def : undefined));
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
if ( !this.serverConfig.profile ) {
|
|
1387
|
+
set(this.serverConfig, 'profile', null);
|
|
1388
|
+
}
|
|
1389
|
+
},
|
|
1390
|
+
|
|
1390
1391
|
chartVersionKey(name) {
|
|
1391
1392
|
const addonVersion = this.addonVersions.find(av => av.name === name);
|
|
1392
1393
|
|
package/edit/service.vue
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Vue from 'vue';
|
|
2
2
|
import { CATALOG, CLUSTER_BADGE } from '@shell/config/labels-annotations';
|
|
3
|
-
import { NODE, FLEET, MANAGEMENT } from '@shell/config/types';
|
|
3
|
+
import { NODE, FLEET, MANAGEMENT, CAPI } from '@shell/config/types';
|
|
4
4
|
import { insertAt } from '@shell/utils/array';
|
|
5
5
|
import { downloadFile } from '@shell/utils/download';
|
|
6
6
|
import { parseSi } from '@shell/utils/units';
|
|
@@ -430,4 +430,12 @@ export default class MgmtCluster extends HybridModel {
|
|
|
430
430
|
get nodes() {
|
|
431
431
|
return this.$getters['all'](MANAGEMENT.NODE).filter(node => node.id.startsWith(this.id));
|
|
432
432
|
}
|
|
433
|
+
|
|
434
|
+
get provClusterId() {
|
|
435
|
+
const verb = this.isLocal ? 'to' : 'from';
|
|
436
|
+
const from = `${ verb }Type`;
|
|
437
|
+
const id = `${ verb }Id`;
|
|
438
|
+
|
|
439
|
+
return this.metadata.relationships.find(r => r[from] === CAPI.RANCHER_CLUSTER)?.[id];
|
|
440
|
+
}
|
|
433
441
|
}
|
package/package.json
CHANGED
|
@@ -5,13 +5,13 @@ import isEqual from 'lodash/isEqual';
|
|
|
5
5
|
import { mapPref, DIFF } from '@shell/store/prefs';
|
|
6
6
|
import { mapFeature, MULTI_CLUSTER, LEGACY } from '@shell/store/features';
|
|
7
7
|
import { mapGetters } from 'vuex';
|
|
8
|
-
|
|
9
8
|
import { Banner } from '@components/Banner';
|
|
10
9
|
import ButtonGroup from '@shell/components/ButtonGroup';
|
|
11
10
|
import ChartReadme from '@shell/components/ChartReadme';
|
|
12
11
|
import { Checkbox } from '@components/Form/Checkbox';
|
|
13
12
|
import LabeledSelect from '@shell/components/form/LabeledSelect';
|
|
14
13
|
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
14
|
+
import { LabeledTooltip } from '@components/LabeledTooltip';
|
|
15
15
|
import LazyImage from '@shell/components/LazyImage';
|
|
16
16
|
import Loading from '@shell/components/Loading';
|
|
17
17
|
import NameNsDescription from '@shell/components/form/NameNsDescription';
|
|
@@ -24,7 +24,7 @@ import Wizard from '@shell/components/Wizard';
|
|
|
24
24
|
import TypeDescription from '@shell/components/TypeDescription';
|
|
25
25
|
import ChartMixin from '@shell/mixins/chart';
|
|
26
26
|
import ChildHook, { BEFORE_SAVE_HOOKS, AFTER_SAVE_HOOKS } from '@shell/mixins/child-hook';
|
|
27
|
-
import { CATALOG, MANAGEMENT, DEFAULT_WORKSPACE } from '@shell/config/types';
|
|
27
|
+
import { CATALOG, MANAGEMENT, DEFAULT_WORKSPACE, CAPI } from '@shell/config/types';
|
|
28
28
|
import {
|
|
29
29
|
CHART, FROM_CLUSTER, FROM_TOOLS, HIDE_SIDE_NAV, NAMESPACE, REPO, REPO_TYPE, VERSION, _FLAGGED
|
|
30
30
|
} from '@shell/config/query-params';
|
|
@@ -61,6 +61,7 @@ export default {
|
|
|
61
61
|
Checkbox,
|
|
62
62
|
LabeledInput,
|
|
63
63
|
LabeledSelect,
|
|
64
|
+
LabeledTooltip,
|
|
64
65
|
LazyImage,
|
|
65
66
|
Loading,
|
|
66
67
|
NameNsDescription,
|
|
@@ -93,10 +94,12 @@ export default {
|
|
|
93
94
|
|
|
94
95
|
this.errors = [];
|
|
95
96
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
// If the chart doesn't contain system `systemDefaultRegistry` properties there's no point applying them
|
|
98
|
+
if (this.showCustomRegistry) {
|
|
99
|
+
this.clusterRegistry = await this.getClusterRegistry();
|
|
100
|
+
this.globalRegistry = await this.getGlobalRegistry();
|
|
101
|
+
this.defaultRegistrySetting = this.clusterRegistry || this.globalRegistry;
|
|
102
|
+
}
|
|
100
103
|
|
|
101
104
|
this.serverUrlSetting = await this.$store.dispatch('management/find', {
|
|
102
105
|
type: MANAGEMENT.SETTING,
|
|
@@ -281,6 +284,16 @@ export default {
|
|
|
281
284
|
*/
|
|
282
285
|
this.chartValues = merge(merge({}, this.versionInfo?.values || {}), userValues);
|
|
283
286
|
|
|
287
|
+
if (this.showCustomRegistry) {
|
|
288
|
+
const existingRegistry = this.chartValues?.global?.systemDefaultRegistry || this.chartValues?.global?.cattle?.systemDefaultRegistry;
|
|
289
|
+
|
|
290
|
+
delete this.chartValues?.global?.systemDefaultRegistry;
|
|
291
|
+
delete this.chartValues?.global?.cattle?.systemDefaultRegistry;
|
|
292
|
+
|
|
293
|
+
this.customRegistrySetting = existingRegistry || this.defaultRegistrySetting;
|
|
294
|
+
this.showCustomRegistryInput = !!this.customRegistrySetting;
|
|
295
|
+
}
|
|
296
|
+
|
|
284
297
|
/* Serializes an object as a YAML document */
|
|
285
298
|
this.valuesYaml = saferDump(this.chartValues);
|
|
286
299
|
|
|
@@ -292,6 +305,7 @@ export default {
|
|
|
292
305
|
this.loadedVersionValues = this.versionInfo?.values || {};
|
|
293
306
|
this.loadedVersion = this.version?.key;
|
|
294
307
|
}
|
|
308
|
+
|
|
295
309
|
/* Check if chart exists and if required values exist */
|
|
296
310
|
this.updateStepOneReady();
|
|
297
311
|
|
|
@@ -317,13 +331,16 @@ export default {
|
|
|
317
331
|
};
|
|
318
332
|
|
|
319
333
|
return {
|
|
320
|
-
defaultRegistrySetting:
|
|
334
|
+
defaultRegistrySetting: '',
|
|
335
|
+
customRegistrySetting: '',
|
|
321
336
|
serverUrlSetting: null,
|
|
322
337
|
chartValues: null,
|
|
338
|
+
clusterRegistry: '',
|
|
323
339
|
originalYamlValues: null,
|
|
324
340
|
previousYamlValues: null,
|
|
325
341
|
errors: null,
|
|
326
342
|
existing: null,
|
|
343
|
+
globalRegistry: '',
|
|
327
344
|
forceNamespace: null,
|
|
328
345
|
loadedVersion: null,
|
|
329
346
|
loadedVersionValues: null,
|
|
@@ -335,22 +352,22 @@ export default {
|
|
|
335
352
|
valuesYaml: '',
|
|
336
353
|
project: null,
|
|
337
354
|
migratedApp: false,
|
|
338
|
-
|
|
339
355
|
defaultCmdOpts,
|
|
340
|
-
customCmdOpts:
|
|
356
|
+
customCmdOpts: { ...defaultCmdOpts },
|
|
341
357
|
|
|
342
358
|
nameDisabled: false,
|
|
343
359
|
|
|
344
|
-
preFormYamlOption:
|
|
345
|
-
formYamlOption:
|
|
346
|
-
showDiff:
|
|
347
|
-
showValuesComponent:
|
|
348
|
-
showQuestions:
|
|
349
|
-
showSlideIn:
|
|
350
|
-
shownReadmeWindows:
|
|
351
|
-
componentHasTabs:
|
|
352
|
-
showCommandStep:
|
|
353
|
-
|
|
360
|
+
preFormYamlOption: VALUES_STATE.YAML,
|
|
361
|
+
formYamlOption: VALUES_STATE.YAML,
|
|
362
|
+
showDiff: false,
|
|
363
|
+
showValuesComponent: true,
|
|
364
|
+
showQuestions: true,
|
|
365
|
+
showSlideIn: false,
|
|
366
|
+
shownReadmeWindows: [],
|
|
367
|
+
componentHasTabs: false,
|
|
368
|
+
showCommandStep: false,
|
|
369
|
+
showCustomRegistryInput: false,
|
|
370
|
+
isNamespaceNew: false,
|
|
354
371
|
|
|
355
372
|
stepBasic: {
|
|
356
373
|
name: 'basics',
|
|
@@ -645,6 +662,23 @@ export default {
|
|
|
645
662
|
}
|
|
646
663
|
|
|
647
664
|
return null;
|
|
665
|
+
},
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Check if the chart contains `systemDefaultRegistry` properties. If not we shouldn't apply the setting (or show the UI for them)
|
|
669
|
+
*/
|
|
670
|
+
showCustomRegistry() {
|
|
671
|
+
const global = this.versionInfo?.values?.global || {};
|
|
672
|
+
|
|
673
|
+
return global.systemDefaultRegistry !== undefined || global.cattle?.systemDefaultRegistry !== undefined;
|
|
674
|
+
},
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* True if we should apply/save the custom registry value. This should be false if matching the global registry
|
|
678
|
+
* (we shouldn't save the global registry to avoid issues on upgrade where we might confused it with a custom one)
|
|
679
|
+
*/
|
|
680
|
+
applyCustomRegistry() {
|
|
681
|
+
return this.customRegistrySetting !== this.globalRegistry;
|
|
648
682
|
}
|
|
649
683
|
},
|
|
650
684
|
|
|
@@ -744,6 +778,42 @@ export default {
|
|
|
744
778
|
},
|
|
745
779
|
|
|
746
780
|
methods: {
|
|
781
|
+
async getClusterRegistry() {
|
|
782
|
+
const hasPermissionToSeeProvCluster = this.$store.getters[`management/schemaFor`](CAPI.RANCHER_CLUSTER);
|
|
783
|
+
|
|
784
|
+
if (hasPermissionToSeeProvCluster) {
|
|
785
|
+
const mgmCluster = this.$store.getters['currentCluster'];
|
|
786
|
+
const provCluster = await this.$store.dispatch('management/find', {
|
|
787
|
+
type: CAPI.RANCHER_CLUSTER,
|
|
788
|
+
id: mgmCluster.provClusterId
|
|
789
|
+
});
|
|
790
|
+
|
|
791
|
+
if (provCluster.isRke2) { // isRke2 returns true for both RKE2 and K3s clusters.
|
|
792
|
+
const agentConfig = provCluster.spec.rkeConfig.machineSelectorConfig.find(x => !x.machineLabelSelector).config;
|
|
793
|
+
|
|
794
|
+
// If a cluster scoped registry exists,
|
|
795
|
+
// it should be used by default.
|
|
796
|
+
const clusterRegistry = agentConfig?.['system-default-registry'] || '';
|
|
797
|
+
|
|
798
|
+
if (clusterRegistry) {
|
|
799
|
+
return clusterRegistry;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
|
|
805
|
+
async getGlobalRegistry() {
|
|
806
|
+
// Use the global registry as a fallback.
|
|
807
|
+
// If it is an empty string, the container
|
|
808
|
+
// runtime will pull images from docker.io.
|
|
809
|
+
const globalRegistry = await this.$store.dispatch('management/find', {
|
|
810
|
+
type: MANAGEMENT.SETTING,
|
|
811
|
+
id: 'system-default-registry'
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
return globalRegistry.value;
|
|
815
|
+
},
|
|
816
|
+
|
|
747
817
|
updateValue(value) {
|
|
748
818
|
if (this.$refs.yaml) {
|
|
749
819
|
this.$refs.yaml.updateValue(value);
|
|
@@ -905,7 +975,7 @@ export default {
|
|
|
905
975
|
const cluster = this.currentCluster;
|
|
906
976
|
const projects = this.$store.getters['management/all'](MANAGEMENT.PROJECT);
|
|
907
977
|
const systemProjectId = projects.find(p => p.spec?.displayName === 'System')?.id?.split('/')?.[1] || '';
|
|
908
|
-
|
|
978
|
+
|
|
909
979
|
const serverUrl = this.serverUrlSetting?.value || '';
|
|
910
980
|
const isWindows = (cluster.workerOSs || []).includes(WINDOWS);
|
|
911
981
|
const pathPrefix = cluster?.spec?.rancherKubernetesEngineConfig?.prefixPath || '';
|
|
@@ -913,8 +983,15 @@ export default {
|
|
|
913
983
|
|
|
914
984
|
setIfNotSet(cattle, 'clusterId', cluster?.id);
|
|
915
985
|
setIfNotSet(cattle, 'clusterName', cluster?.nameDisplay);
|
|
916
|
-
|
|
917
|
-
|
|
986
|
+
if (this.showCustomRegistry) {
|
|
987
|
+
// If this is the current global registry leave it blank. This avoids the scenario on upgrade where a previous global registry that's
|
|
988
|
+
// been updated is confused with a custom user registry
|
|
989
|
+
const registry = this.applyCustomRegistry ? this.customRegistrySetting : '';
|
|
990
|
+
|
|
991
|
+
set(cattle, 'systemDefaultRegistry', registry);
|
|
992
|
+
set(global, 'systemDefaultRegistry', registry);
|
|
993
|
+
}
|
|
994
|
+
|
|
918
995
|
setIfNotSet(global, 'cattle.systemProjectId', systemProjectId);
|
|
919
996
|
setIfNotSet(cattle, 'url', serverUrl);
|
|
920
997
|
setIfNotSet(cattle, 'rkePathPrefix', pathPrefix);
|
|
@@ -939,7 +1016,6 @@ export default {
|
|
|
939
1016
|
}
|
|
940
1017
|
|
|
941
1018
|
const cluster = this.$store.getters['currentCluster'];
|
|
942
|
-
const defaultRegistry = this.defaultRegistrySetting?.value || '';
|
|
943
1019
|
const serverUrl = this.serverUrlSetting?.value || '';
|
|
944
1020
|
const isWindows = (cluster.workerOSs || []).includes(WINDOWS);
|
|
945
1021
|
const pathPrefix = cluster?.spec?.rancherKubernetesEngineConfig?.prefixPath || '';
|
|
@@ -948,7 +1024,6 @@ export default {
|
|
|
948
1024
|
if ( values.global?.cattle ) {
|
|
949
1025
|
deleteIfEqual(values.global.cattle, 'clusterId', cluster?.id);
|
|
950
1026
|
deleteIfEqual(values.global.cattle, 'clusterName', cluster?.nameDisplay);
|
|
951
|
-
deleteIfEqual(values.global.cattle, 'systemDefaultRegistry', defaultRegistry);
|
|
952
1027
|
deleteIfEqual(values.global.cattle, 'url', serverUrl);
|
|
953
1028
|
deleteIfEqual(values.global.cattle, 'rkePathPrefix', pathPrefix);
|
|
954
1029
|
deleteIfEqual(values.global.cattle, 'rkeWindowsPathPrefix', windowsPathPrefix);
|
|
@@ -966,10 +1041,6 @@ export default {
|
|
|
966
1041
|
delete values.global.cattle;
|
|
967
1042
|
}
|
|
968
1043
|
|
|
969
|
-
if ( values.global ) {
|
|
970
|
-
deleteIfEqual(values.global, 'systemDefaultRegistry', defaultRegistry);
|
|
971
|
-
}
|
|
972
|
-
|
|
973
1044
|
if ( !Object.keys(values.global || {}).length ) {
|
|
974
1045
|
delete values.global;
|
|
975
1046
|
}
|
|
@@ -1289,7 +1360,6 @@ export default {
|
|
|
1289
1360
|
</div>
|
|
1290
1361
|
</div>
|
|
1291
1362
|
<NameNsDescription
|
|
1292
|
-
v-if="chart"
|
|
1293
1363
|
v-model="value"
|
|
1294
1364
|
:description-hidden="true"
|
|
1295
1365
|
:mode="mode"
|
|
@@ -1316,13 +1386,31 @@ export default {
|
|
|
1316
1386
|
/>
|
|
1317
1387
|
</template>
|
|
1318
1388
|
</NameNsDescription>
|
|
1389
|
+
<Checkbox v-model="showCommandStep" class="mb-20" :label="t('catalog.install.steps.helmCli.checkbox', { action, existing: !!existing })" />
|
|
1390
|
+
|
|
1391
|
+
<Checkbox
|
|
1392
|
+
v-if="showCustomRegistry"
|
|
1393
|
+
v-model="showCustomRegistryInput"
|
|
1394
|
+
class="mb-20"
|
|
1395
|
+
:label="t('catalog.chart.registry.custom.checkBoxLabel')"
|
|
1396
|
+
:tooltip="t('catalog.chart.registry.tooltip')"
|
|
1397
|
+
/>
|
|
1398
|
+
<div v-if="showCustomRegistry" class="row">
|
|
1399
|
+
<div class="col span-6">
|
|
1400
|
+
<LabeledInput
|
|
1401
|
+
v-if="showCustomRegistryInput"
|
|
1402
|
+
v-model="customRegistrySetting"
|
|
1403
|
+
label-key="catalog.chart.registry.custom.inputLabel"
|
|
1404
|
+
placeholder-key="catalog.chart.registry.custom.placeholder"
|
|
1405
|
+
:min-height="30"
|
|
1406
|
+
/>
|
|
1407
|
+
</div>
|
|
1408
|
+
</div>
|
|
1319
1409
|
<div class="step__values__controls--spacer" style="flex:1">
|
|
1320
1410
|
|
|
1321
1411
|
</div>
|
|
1322
1412
|
<Banner v-if="isNamespaceNew" color="info" v-html="t('catalog.install.steps.basics.createNamespace', {namespace: value.metadata.namespace}, true) ">
|
|
1323
1413
|
</Banner>
|
|
1324
|
-
|
|
1325
|
-
<Checkbox v-model="showCommandStep" class="mb-20" :label="t('catalog.install.steps.helmCli.checkbox', { action, existing: !!existing })" />
|
|
1326
1414
|
</div>
|
|
1327
1415
|
</template>
|
|
1328
1416
|
<template #clusterTplVersion>
|
|
@@ -208,7 +208,7 @@ export default {
|
|
|
208
208
|
>
|
|
209
209
|
<div v-if="plugin" class="plugin-install-dialog">
|
|
210
210
|
<h4 class="mt-10">
|
|
211
|
-
{{ t(`plugins.${ mode }.title`, { name: plugin.
|
|
211
|
+
{{ t(`plugins.${ mode }.title`, { name: plugin.label }) }}
|
|
212
212
|
</h4>
|
|
213
213
|
<div class="custom mt-10">
|
|
214
214
|
<div class="dialog-panel">
|
|
@@ -117,8 +117,11 @@ export default {
|
|
|
117
117
|
</div>
|
|
118
118
|
<div>
|
|
119
119
|
<Banner v-if="info.error" color="error" :label="info.error" class="mt-10" />
|
|
120
|
-
<Banner v-if="
|
|
121
|
-
<
|
|
120
|
+
<Banner v-if="info.builtin" color="warning" :label="t('plugins.descriptions.built-in')" class="mt-10" />
|
|
121
|
+
<template v-else>
|
|
122
|
+
<Banner v-if="!info.certified" color="warning" :label="t('plugins.descriptions.third-party')" class="mt-10" />
|
|
123
|
+
<Banner v-if="info.experimental" color="warning" :label="t('plugins.descriptions.experimental')" class="mt-10" />
|
|
124
|
+
</template>
|
|
122
125
|
</div>
|
|
123
126
|
|
|
124
127
|
<h3 v-if="info.versions.length">
|
|
@@ -69,7 +69,7 @@ export default {
|
|
|
69
69
|
>
|
|
70
70
|
<div v-if="plugin" class="plugin-install-dialog">
|
|
71
71
|
<h4 class="mt-10">
|
|
72
|
-
{{ t('plugins.uninstall.title', { name: plugin.
|
|
72
|
+
{{ t('plugins.uninstall.title', { name: plugin.label }) }}
|
|
73
73
|
</h4>
|
|
74
74
|
<div class="mt-10 dialog-panel">
|
|
75
75
|
<div class="dialog-info">
|