show one secret dropdown in storageClass create page

This commit is contained in:
andy.lee 2024-09-18 13:03:58 +08:00 committed by Francesco Torchia
parent f60d22ab9b
commit 958e97f769
No known key found for this signature in database
GPG Key ID: E6D011B7415D4393
3 changed files with 39 additions and 57 deletions

View File

@ -55,10 +55,13 @@ export default {
async fetch() { async fetch() {
const inStore = this.$store.getters['currentProduct'].inStore; const inStore = this.$store.getters['currentProduct'].inStore;
const allNamespaces = await this.$store.dispatch(`${ inStore }/findAll`, { type: NAMESPACE });
this.secrets = await this.$store.dispatch(`${ inStore }/findAll`, { type: SECRET }); await this.$store.dispatch(`${ inStore }/findAll`, { type: NAMESPACE });
this.namespaces = allNamespaces.filter(ns => ns.isSystem === false).map(ns => ns.id); // only show non-system namespaces to user to select
const allSecrets = await this.$store.dispatch(`${ inStore }/findAll`, { type: SECRET });
// only show non-system secret to user to select
this.secrets = allSecrets.filter(secret => secret.isSystem === false);
}, },
data() { data() {
if (this.realMode === _CREATE) { if (this.realMode === _CREATE) {
@ -72,20 +75,7 @@ export default {
}; };
} }
return { return { secrets: [] };
secrets: [],
namespaces: [],
};
},
watch: {
secretNamespace() {
this.$set(this.value, 'parameters', {
...this.value.parameters,
[CSI_PROVISIONER_SECRET_NAME]: '',
[CSI_NODE_PUBLISH_SECRET_NAME]: '',
[CSI_NODE_STAGE_SECRET_NAME]: ''
});
}
}, },
computed: { computed: {
longhornNodes() { longhornNodes() {
@ -131,13 +121,7 @@ export default {
}, },
secretOptions() { secretOptions() {
const selectedNS = this.secretNamespace; return this.secrets.map(secret => secret.id);
return this.secrets.filter(secret => secret.namespace === selectedNS).map(secret => secret.name);
},
secretNameOptions() {
return this.namespaces;
}, },
volumeEncryptionOptions() { volumeEncryptionOptions() {
@ -183,32 +167,29 @@ export default {
} }
}, },
secretName: { secret: {
get() { get() {
return this.value.parameters[CSI_PROVISIONER_SECRET_NAME]; const selectedNs = this.value.parameters[CSI_PROVISIONER_SECRET_NAMESPACE];
const selectedName = this.value.parameters[CSI_PROVISIONER_SECRET_NAME];
if (selectedNs && selectedName) {
return `${ selectedNs }/${ selectedName }`;
}
return '';
}, },
set(neu) { set(selectedSecret) {
const [namespace, name] = selectedSecret.split('/');
this.$set(this.value, 'parameters', { this.$set(this.value, 'parameters', {
...this.value.parameters, ...this.value.parameters,
[CSI_PROVISIONER_SECRET_NAME]: neu, [CSI_PROVISIONER_SECRET_NAME]: name,
[CSI_NODE_PUBLISH_SECRET_NAME]: neu, [CSI_NODE_PUBLISH_SECRET_NAME]: name,
[CSI_NODE_STAGE_SECRET_NAME]: neu [CSI_NODE_STAGE_SECRET_NAME]: name,
}); [CSI_PROVISIONER_SECRET_NAMESPACE]: namespace,
} [CSI_NODE_PUBLISH_SECRET_NAMESPACE]: namespace,
}, [CSI_NODE_STAGE_SECRET_NAMESPACE]: namespace
secretNamespace: {
get() {
return this.value.parameters[CSI_PROVISIONER_SECRET_NAMESPACE];
},
set(neu) {
this.$set(this.value, 'parameters', {
...this.value.parameters,
[CSI_PROVISIONER_SECRET_NAMESPACE]: neu,
[CSI_NODE_PUBLISH_SECRET_NAMESPACE]: neu,
[CSI_NODE_STAGE_SECRET_NAMESPACE]: neu
}); });
} }
}, },
@ -342,16 +323,8 @@ export default {
<div v-if="value.parameters.encrypted === 'true'" class="row mt-20"> <div v-if="value.parameters.encrypted === 'true'" class="row mt-20">
<div class="col span-6"> <div class="col span-6">
<LabeledSelect <LabeledSelect
v-model:value="secretNamespace" v-model:value="secret"
:label="t('harvester.storage.secretNamespace')" :label="t('harvester.storage.secret')"
:options="secretNameOptions"
:mode="mode"
/>
</div>
<div class="col span-6">
<LabeledSelect
v-model:value="secretName"
:label="t('harvester.storage.secretName')"
:options="secretOptions" :options="secretOptions"
:mode="mode" :mode="mode"
/> />

View File

@ -1113,8 +1113,7 @@ harvester:
label: Storage label: Storage
useDefault: Use the default storage useDefault: Use the default storage
volumeEncryption: Volume Encryption volumeEncryption: Volume Encryption
secretName: Secret Name secret: Secret
secretNamespace: Secret Namespace
migratable: migratable:
label: Migratable label: Migratable
numberOfReplicas: numberOfReplicas:

View File

@ -2,6 +2,8 @@ import { clone } from '@shell/utils/object';
import Secret from '@shell/models/secret'; import Secret from '@shell/models/secret';
import { HCI } from '../../types'; import { HCI } from '../../types';
import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../config/harvester'; import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../config/harvester';
import Secret from '@shell/models/secret';
import { NAMESPACE } from '@shell/config/types';
export default class HciSecret extends Secret { export default class HciSecret extends Secret {
get _detailLocation() { get _detailLocation() {
@ -52,6 +54,14 @@ export default class HciSecret extends Secret {
return this.doneOverride; return this.doneOverride;
} }
get isSystem() {
const inStore = this.$rootGetters['currentProduct'].inStore;
const systemNs = this.$rootGetters[`${ inStore }/all`](NAMESPACE).filter(ns => ns.isSystem === true).map(ns => ns.metadata.name);
return systemNs.includes(this.metadata.namespace);
}
get details() { get details() {
const out = [ const out = [
{ {