From 5013a5e7644b79cde61e8999104f97a87559b11f Mon Sep 17 00:00:00 2001 From: Vault Automation Date: Thu, 18 Dec 2025 16:19:37 -0700 Subject: [PATCH] UI: Updating KVV2 to use new config/tune flow (#11256) (#11511) * separate header comp * replacing header * redirect to general settings * moving kv configure under plugin settings * add exit button * removing all use of old header with new, updated logic * reuse secretPath, add button to badge * test updates pt1 * test updates pt2, refactors * test fixes * testing * removing extendedConfig * put tabs out of header * adding new config edit page & updates * adding page test * pr comments * replace type with effectiveType * test fixes * adding badges, cleanup test Co-authored-by: Dan Rivera --- ui/app/app.js | 1 + .../secret-engine/page/general-settings.hbs | 2 +- .../secret-engine/page/general-settings.ts | 14 ++ .../secret-engine/page/plugin-settings.hbs | 2 +- .../secret-engine/page/plugin-settings.ts | 13 ++ ui/app/utils/all-engines-metadata.ts | 1 + ui/lib/kv/addon/components/kv-header.hbs | 62 +++++++ ui/lib/kv/addon/components/kv-page-header.hbs | 49 ------ .../addon/components/page/configuration.hbs | 25 ++- ui/lib/kv/addon/components/page/configure.hbs | 63 +++++++ ui/lib/kv/addon/components/page/configure.ts | 67 +++++++ ui/lib/kv/addon/components/page/list.hbs | 68 +++++--- ui/lib/kv/addon/components/page/list.js | 20 +++ .../addon/components/page/secret/details.hbs | 8 +- .../kv/addon/components/page/secret/edit.hbs | 4 +- .../page/secret/metadata/details.hbs | 8 +- .../components/page/secret/metadata/edit.hbs | 2 +- .../page/secret/metadata/version-diff.hbs | 4 +- .../page/secret/metadata/version-history.hbs | 8 +- .../addon/components/page/secret/overview.hbs | 8 +- .../kv/addon/components/page/secret/patch.hbs | 2 +- .../kv/addon/components/page/secret/paths.hbs | 8 +- .../addon/components/page/secrets/create.hbs | 4 +- ui/lib/kv/addon/engine.js | 2 +- ui/lib/kv/addon/routes.js | 1 + ui/lib/kv/addon/routes/configuration.js | 25 +-- ui/lib/kv/addon/routes/configure.js | 35 ++++ ui/lib/kv/addon/routes/list-directory.js | 2 + ui/lib/kv/addon/templates/configure.hbs | 6 + ui/lib/kv/addon/templates/error.hbs | 13 +- ui/lib/kv/addon/templates/list-directory.hbs | 1 + ui/lib/kv/addon/templates/list.hbs | 1 + ui/lib/kv/package.json | 3 +- .../kv/kv-v2-workflow-edge-cases-test.js | 17 +- .../kv/kv-v2-workflow-navigation-test.js | 163 ++++++++++-------- .../secrets/backend/kv/secret-test.js | 4 +- ui/tests/acceptance/secrets/mounts-test.js | 28 ++- ui/tests/helpers/kv/kv-selectors.js | 4 +- ...-page-header-test.js => kv-header-test.js} | 49 +++--- .../kv/page/kv-page-configuration-test.js | 45 +++-- .../kv/page/kv-page-configure-test.js | 97 +++++++++++ .../components/kv/page/kv-page-list-test.js | 30 +++- 42 files changed, 701 insertions(+), 268 deletions(-) create mode 100644 ui/lib/kv/addon/components/kv-header.hbs delete mode 100644 ui/lib/kv/addon/components/kv-page-header.hbs create mode 100644 ui/lib/kv/addon/components/page/configure.hbs create mode 100644 ui/lib/kv/addon/components/page/configure.ts create mode 100644 ui/lib/kv/addon/routes/configure.js create mode 100644 ui/lib/kv/addon/templates/configure.hbs rename ui/tests/integration/components/kv/{kv-page-header-test.js => kv-header-test.js} (71%) create mode 100644 ui/tests/integration/components/kv/page/kv-page-configure-test.js diff --git a/ui/app/app.js b/ui/app/app.js index 5742408810..b4b201e196 100644 --- a/ui/app/app.js +++ b/ui/app/app.js @@ -111,6 +111,7 @@ export default class App extends Application { externalRoutes: { secrets: 'vault.cluster.secrets.backends', syncDestination: 'vault.cluster.sync.secrets.destinations.destination', + secretsGeneralSettingsConfiguration: 'vault.cluster.secrets.backend.configuration.general-settings', }, }, }, diff --git a/ui/app/components/secret-engine/page/general-settings.hbs b/ui/app/components/secret-engine/page/general-settings.hbs index 6e052e7fe2..3c6d9f1963 100644 --- a/ui/app/components/secret-engine/page/general-settings.hbs +++ b/ui/app/components/secret-engine/page/general-settings.hbs @@ -21,7 +21,7 @@ diff --git a/ui/app/components/secret-engine/page/general-settings.ts b/ui/app/components/secret-engine/page/general-settings.ts index bb3fb36b3f..ca2c25859f 100644 --- a/ui/app/components/secret-engine/page/general-settings.ts +++ b/ui/app/components/secret-engine/page/general-settings.ts @@ -14,6 +14,7 @@ import type FlashMessageService from 'vault/services/flash-messages'; import type ApiService from 'vault/services/api'; import type SecretsEngineResource from 'vault/resources/secrets/engine'; import type UnsavedChangesService from 'vault/services/unsaved-changes'; +import engineDisplayData from 'vault/helpers/engines-display-data'; const CHARACTER_LIMIT = 500; @@ -65,6 +66,19 @@ export default class GeneralSettingsComponent extends Component { return changedFieldsCopy; } + get configRoute() { + const engine = this.args.model.secretsEngine; + const isKvv2 = engine.version === 2 && engine.effectiveEngineType === 'kv'; + const engineMetadata = engineDisplayData(engine.effectiveEngineType); + + // Kvv2 is configurable but shares metadata with Kvv1 so isConfigurable is left unset + if (engineMetadata.isConfigurable || isKvv2) { + return engineMetadata.configRoute || 'configuration.plugin-settings'; + } else { + return false; + } + } + validateTtl(ttlValue: FormDataEntryValue | number | null) { if (isNaN(Number(ttlValue))) { return false; diff --git a/ui/app/components/secret-engine/page/plugin-settings.hbs b/ui/app/components/secret-engine/page/plugin-settings.hbs index 100cd53c90..d178bdf3e7 100644 --- a/ui/app/components/secret-engine/page/plugin-settings.hbs +++ b/ui/app/components/secret-engine/page/plugin-settings.hbs @@ -22,7 +22,7 @@ diff --git a/ui/app/components/secret-engine/page/plugin-settings.ts b/ui/app/components/secret-engine/page/plugin-settings.ts index 48a61d1ad5..a0d1e00fb6 100644 --- a/ui/app/components/secret-engine/page/plugin-settings.ts +++ b/ui/app/components/secret-engine/page/plugin-settings.ts @@ -79,6 +79,19 @@ export default class PluginSettingsComponent extends Component { } } + get configRoute() { + const engine = this.args.model.secretsEngine; + const isKvv2 = engine.version === 2 && engine.effectiveEngineType === 'kv'; + const engineMetadata = engineDisplayData(engine.effectiveEngineType); + + // Kvv2 is configurable but shares metadata with Kvv1 so isConfigurable is left unset + if (engineMetadata.isConfigurable || isKvv2) { + return engineMetadata.configRoute || 'configuration.plugin-settings'; + } else { + return false; + } + } + label = (field: string) => { const label = toLabel([field]); // convert words like id and ttl to uppercase diff --git a/ui/app/utils/all-engines-metadata.ts b/ui/app/utils/all-engines-metadata.ts index 45408afb6a..1145283ff0 100644 --- a/ui/app/utils/all-engines-metadata.ts +++ b/ui/app/utils/all-engines-metadata.ts @@ -159,6 +159,7 @@ export const ALL_ENGINES: EngineDisplayData[] = [ pluginCategory: 'generic', displayName: 'KV', engineRoute: 'kv.list', + configRoute: 'kv.configuration', // only utilized to display config data for kvv2, not in conjunction with isConfigurable as templates determine whether engine is kv v1 or v2 glyph: 'key-values', mountCategory: ['secret'], type: 'kv', diff --git a/ui/lib/kv/addon/components/kv-header.hbs b/ui/lib/kv/addon/components/kv-header.hbs new file mode 100644 index 0000000000..031d30f785 --- /dev/null +++ b/ui/lib/kv/addon/components/kv-header.hbs @@ -0,0 +1,62 @@ +{{! + Copyright IBM Corp. 2016, 2025 + SPDX-License-Identifier: BUSL-1.1 +}} + + + <:breadcrumbs> + + + <:actions> + {{#if (has-block "actions")}} + {{yield to="actions"}} + {{/if}} + + <:badges> + {{#if (has-block "badges")}} + {{yield to="badges"}} + {{/if}} + {{#if @secretPath}} + + {{/if}} + + + +{{#if @configRoute}} + +{{else}} + {{#if (has-block "tabs")}} +
+ +
+ {{/if}} +{{/if}} + +{{#if (has-block "syncDetails")}} + {{yield to="syncDetails"}} +{{/if}} + +{{#if (or (has-block "toolbarFilters") (has-block "toolbarActions"))}} + + + {{yield to="toolbarFilters"}} + + + {{yield to="toolbarActions"}} + + +{{/if}} \ No newline at end of file diff --git a/ui/lib/kv/addon/components/kv-page-header.hbs b/ui/lib/kv/addon/components/kv-page-header.hbs deleted file mode 100644 index fe4d16fce3..0000000000 --- a/ui/lib/kv/addon/components/kv-page-header.hbs +++ /dev/null @@ -1,49 +0,0 @@ -{{! - Copyright IBM Corp. 2016, 2025 - SPDX-License-Identifier: BUSL-1.1 -}} - - - - - - -

- {{#if @mountName}} - - {{@mountName}} - - {{else if @secretPath}} - {{@secretPath}} - - {{else}} - {{@pageTitle}} - {{/if}} -

-
-
- -{{#if (has-block "syncDetails")}} - {{yield to="syncDetails"}} -{{/if}} - -{{#if (has-block "tabLinks")}} -
- -
-{{/if}} - -{{#if (or (has-block "toolbarFilters") (has-block "toolbarActions"))}} - - - {{yield to="toolbarFilters"}} - - - {{yield to="toolbarActions"}} - - -{{/if}} \ No newline at end of file diff --git a/ui/lib/kv/addon/components/page/configuration.hbs b/ui/lib/kv/addon/components/page/configuration.hbs index 778cf55230..08126770d7 100644 --- a/ui/lib/kv/addon/components/page/configuration.hbs +++ b/ui/lib/kv/addon/components/page/configuration.hbs @@ -3,12 +3,25 @@ SPDX-License-Identifier: BUSL-1.1 }} - - <:tabLinks> -
  • Secrets
  • -
  • Configuration
  • - -
    + + <:badges> + + + <:actions> + + + + <:toolbarActions> + + Edit configuration + + +
    {{#each-in @config as |key value|}} diff --git a/ui/lib/kv/addon/components/page/configure.hbs b/ui/lib/kv/addon/components/page/configure.hbs new file mode 100644 index 0000000000..67f84390e1 --- /dev/null +++ b/ui/lib/kv/addon/components/page/configure.hbs @@ -0,0 +1,63 @@ +{{! + Copyright IBM Corp. 2016, 2025 + SPDX-License-Identifier: BUSL-1.1 +}} + + + <:badges> + + + <:actions> + + + + <:toolbarActions> + + + +
    +
    + + + {{#each @form.metadataFields as |field|}} + {{#unless (eq field.name "custom_metadata")}} + + {{/unless}} + {{/each}} +
    + +
    +
    + + + {{#if this.invalidFormAlert}} +
    + +
    + {{/if}} +
    +
    +
    \ No newline at end of file diff --git a/ui/lib/kv/addon/components/page/configure.ts b/ui/lib/kv/addon/components/page/configure.ts new file mode 100644 index 0000000000..7a4196d42d --- /dev/null +++ b/ui/lib/kv/addon/components/page/configure.ts @@ -0,0 +1,67 @@ +/** + * Copyright IBM Corp. 2016, 2025 + * SPDX-License-Identifier: BUSL-1.1 + */ + +import Component from '@glimmer/component'; +import { service } from '@ember/service'; + +import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; +import { task } from 'ember-concurrency'; +import type KvForm from 'vault/app/forms/secrets/kv'; +import type { Breadcrumb } from 'vault/vault/app-types'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type RouterService from '@ember/routing/router-service'; +import type ApiService from 'vault/services/api'; +import SecretsEngineResource from 'vault/app/resources/secrets/engine'; + +interface Args { + form: KvForm; + backend: SecretsEngineResource; + breadcrumbs: Array; +} + +/** + * @module KvConfigurePageComponent + * KvConfigurePageComponent is a component to show secrets mount and engine configuration data + * + * @param {object} form - config form data for mount and engine + * @param {string} backend - The kv secrets engine data + * @param {array} breadcrumbs - Breadcrumbs as an array of objects that contain label, route, and modelId. They are updated via the util kv-breadcrumbs to handle dynamic *pathToSecret on the list-directory route. + */ + +export default class KvConfigurePageComponent extends Component { + @service declare readonly flashMessages: FlashMessageService; + @service('app-router') declare readonly router: RouterService; + @service declare readonly api: ApiService; + + @tracked errorBanner = ''; + @tracked invalidFormAlert = ''; + @tracked modelValidations = null; + + @action + navigateToConfiguration() { + this.router.transitionTo(`vault.cluster.secrets.backend.kv.configuration`); + } + + @task + *save(event: Event | null) { + event.preventDefault(); + try { + const { isValid, state, invalidFormMessage, data } = this.args.form.toJSON(); + this.modelValidations = isValid ? null : state; + this.invalidFormAlert = invalidFormMessage; + + if (isValid) { + yield this.api.secrets.kvV2Configure(data.path, data); + this.flashMessages.success(`Successfully updated ${data.path}'s configuration.`); + this.navigateToConfiguration(); + } + } catch (error) { + const { message } = yield this.api.parseError(error); + this.errorBanner = message; + this.invalidFormAlert = 'There was an error submitting this form.'; + } + } +} diff --git a/ui/lib/kv/addon/components/page/list.hbs b/ui/lib/kv/addon/components/page/list.hbs index 38b098b54d..cfcb5f544a 100644 --- a/ui/lib/kv/addon/components/page/list.hbs +++ b/ui/lib/kv/addon/components/page/list.hbs @@ -3,39 +3,47 @@ SPDX-License-Identifier: BUSL-1.1 }} - - <:tabLinks> -
  • - Secrets -
  • -
  • - Configuration -
  • - - + <:toolbarFilters> {{#if (and (not-eq @secrets 403) (or @secrets @filterValue))}} {{/if}} - <:toolbarActions> - +
  • Secrets
  • + + <:badges> + + + + <:actions> + + + Configure + Delete + + + - Create secret -
    - -
    + data-test-button="create secret" + /> + + {{#if (eq @secrets 403)}}
    @@ -177,4 +185,14 @@ /> {{/if}} {{/if}} +{{/if}} + +{{#if this.engineToDisable}} + {{/if}} \ No newline at end of file diff --git a/ui/lib/kv/addon/components/page/list.js b/ui/lib/kv/addon/components/page/list.js index 7293ebdbf5..2f77aecdb3 100644 --- a/ui/lib/kv/addon/components/page/list.js +++ b/ui/lib/kv/addon/components/page/list.js @@ -10,6 +10,7 @@ import { tracked } from '@glimmer/tracking'; import { getOwner } from '@ember/owner'; import { ancestorKeysForKey } from 'core/utils/key-utils'; import { pathIsDirectory } from 'kv/utils/kv-breadcrumbs'; +import { task } from 'ember-concurrency'; /** * @module List @@ -31,6 +32,7 @@ export default class KvListPageComponent extends Component { @tracked secretPath; @tracked metadataToDelete = null; // set to the metadata intended to delete + @tracked engineToDisable = undefined; // used for KV list and list-directory view // ex: beep/ @@ -57,6 +59,24 @@ export default class KvListPageComponent extends Component { }; } + @task + *disableEngine(engine) { + const { engineType, id, path } = engine; + + try { + yield this.api.sys.mountsDisableSecretsEngine(id); + this.flashMessages.success(`The ${engineType} Secrets Engine at ${path} has been disabled.`); + this.router.transitionTo('vault.cluster.secrets.backends'); + } catch (err) { + const { message } = yield this.api.parseError(err); + this.flashMessages.danger( + `There was an error disabling the ${engineType} Secrets Engine at ${path}: ${message}.` + ); + } finally { + this.engineToDisable = undefined; + } + } + @action async onDelete(secretPath) { try { diff --git a/ui/lib/kv/addon/components/page/secret/details.hbs b/ui/lib/kv/addon/components/page/secret/details.hbs index 1f8a920f30..5ad6ee13fc 100644 --- a/ui/lib/kv/addon/components/page/secret/details.hbs +++ b/ui/lib/kv/addon/components/page/secret/details.hbs @@ -3,7 +3,7 @@ SPDX-License-Identifier: BUSL-1.1 }} - + <:syncDetails> {{#if this.syncStatus}} @@ -45,7 +45,7 @@ {{/if}} - <:tabLinks> + <:tabs>
  • Overview
  • @@ -67,7 +67,7 @@ >Version History {{/if}} - + <:toolbarFilters> {{#unless this.emptyState}} @@ -132,7 +132,7 @@ {{/if}} -
    + {{#if (or this.isSecretDeleted (not this.emptyState))}}
    diff --git a/ui/lib/kv/addon/components/page/secret/edit.hbs b/ui/lib/kv/addon/components/page/secret/edit.hbs index a44331c2e3..86ee725ee7 100644 --- a/ui/lib/kv/addon/components/page/secret/edit.hbs +++ b/ui/lib/kv/addon/components/page/secret/edit.hbs @@ -3,13 +3,13 @@ SPDX-License-Identifier: BUSL-1.1 }} - + <:toolbarFilters> JSON - + {{#if this.showOldVersionAlert}} diff --git a/ui/lib/kv/addon/components/page/secret/metadata/details.hbs b/ui/lib/kv/addon/components/page/secret/metadata/details.hbs index da4c324d37..5e9915f269 100644 --- a/ui/lib/kv/addon/components/page/secret/metadata/details.hbs +++ b/ui/lib/kv/addon/components/page/secret/metadata/details.hbs @@ -3,8 +3,8 @@ SPDX-License-Identifier: BUSL-1.1 }} - - <:tabLinks> + + <:tabs>
  • Overview
  • @@ -30,7 +30,7 @@ >Version History {{/if}} - + <:toolbarActions> {{#if @capabilities.canDeleteMetadata}} @@ -42,7 +42,7 @@ {{/if}} -
    +

    Custom metadata diff --git a/ui/lib/kv/addon/components/page/secret/metadata/edit.hbs b/ui/lib/kv/addon/components/page/secret/metadata/edit.hbs index e62676365f..7cb7724ba3 100644 --- a/ui/lib/kv/addon/components/page/secret/metadata/edit.hbs +++ b/ui/lib/kv/addon/components/page/secret/metadata/edit.hbs @@ -3,7 +3,7 @@ SPDX-License-Identifier: BUSL-1.1 }} - + {{#if @capabilities.canUpdateMetadata}}
    diff --git a/ui/lib/kv/addon/components/page/secret/metadata/version-diff.hbs b/ui/lib/kv/addon/components/page/secret/metadata/version-diff.hbs index f52624e851..8118c5f57d 100644 --- a/ui/lib/kv/addon/components/page/secret/metadata/version-diff.hbs +++ b/ui/lib/kv/addon/components/page/secret/metadata/version-diff.hbs @@ -3,7 +3,7 @@ SPDX-License-Identifier: BUSL-1.1 }} - + <:toolbarFilters> FROM: {{/if}} - +
    {{#if this.deactivatedState}} - <:tabLinks> + + <:tabs>
  • Overview
  • @@ -29,14 +29,14 @@ Version History - + <:toolbarActions> {{#if @capabilities.canReadMetadata}} Version diff {{/if}} -
    + {{#if @capabilities.canReadMetadata}}
    diff --git a/ui/lib/kv/addon/components/page/secret/overview.hbs b/ui/lib/kv/addon/components/page/secret/overview.hbs index 802d5a15bb..59284ddd74 100644 --- a/ui/lib/kv/addon/components/page/secret/overview.hbs +++ b/ui/lib/kv/addon/components/page/secret/overview.hbs @@ -3,8 +3,8 @@ SPDX-License-Identifier: BUSL-1.1 }} - - <:tabLinks> + + <:tabs>
  • Overview
  • @@ -30,10 +30,10 @@ >Version History {{/if}} - + <:toolbarActions> -
    + {{#if (or @metadata @subkeys.metadata)}}
    diff --git a/ui/lib/kv/addon/components/page/secret/patch.hbs b/ui/lib/kv/addon/components/page/secret/patch.hbs index 27969d9e11..602fc16a47 100644 --- a/ui/lib/kv/addon/components/page/secret/patch.hbs +++ b/ui/lib/kv/addon/components/page/secret/patch.hbs @@ -3,7 +3,7 @@ SPDX-License-Identifier: BUSL-1.1 }} - + {{#if this.controlGroupError}} <:customMessage> diff --git a/ui/lib/kv/addon/components/page/secret/paths.hbs b/ui/lib/kv/addon/components/page/secret/paths.hbs index c4debe3a21..de9fd25572 100644 --- a/ui/lib/kv/addon/components/page/secret/paths.hbs +++ b/ui/lib/kv/addon/components/page/secret/paths.hbs @@ -3,8 +3,8 @@ SPDX-License-Identifier: BUSL-1.1 }} - - <:tabLinks> + + <:tabs>
  • Overview
  • @@ -36,7 +36,7 @@ {{/if}} - -
    + +
    \ No newline at end of file diff --git a/ui/lib/kv/addon/components/page/secrets/create.hbs b/ui/lib/kv/addon/components/page/secrets/create.hbs index 17d6627f8d..ff9df26559 100644 --- a/ui/lib/kv/addon/components/page/secrets/create.hbs +++ b/ui/lib/kv/addon/components/page/secrets/create.hbs @@ -3,13 +3,13 @@ SPDX-License-Identifier: BUSL-1.1 }} - + <:toolbarFilters> JSON - + {}); return { ...engineConfig, - type, - path, - accessor, - running_plugin_version, - local, - seal_wrap, - default_lease_ttl, - max_lease_ttl, - version, }; } setupController(controller, resolvedModel) { super.setupController(controller, resolvedModel); - const { id } = this.modelFor('application'); - controller.backend = id; + const backend = this.modelFor('application'); + controller.backend = backend; controller.breadcrumbs = [ { label: 'Secrets', route: 'secrets', linkExternal: true }, - { label: id, route: 'list', model: id }, + { label: backend.id, route: 'list', model: backend.id }, { label: 'Configuration' }, ]; } diff --git a/ui/lib/kv/addon/routes/configure.js b/ui/lib/kv/addon/routes/configure.js new file mode 100644 index 0000000000..2cb9313919 --- /dev/null +++ b/ui/lib/kv/addon/routes/configure.js @@ -0,0 +1,35 @@ +/** + * Copyright IBM Corp. 2016, 2025 + * SPDX-License-Identifier: BUSL-1.1 + */ + +import Route from '@ember/routing/route'; +import KvForm from 'vault/forms/secrets/kv'; +import { service } from '@ember/service'; + +export default class KvConfigureRoute extends Route { + @service api; + @service('app-router') router; + + async model() { + const backend = this.modelFor('application'); + const engineConfig = await this.api.secrets.kvV2ReadConfiguration(backend.id).catch(() => {}); + const { max_versions, cas_required, delete_version_after } = engineConfig; + + return { + form: new KvForm({ path: backend.id, max_versions, cas_required, delete_version_after }), + }; + } + + setupController(controller, resolvedModel) { + super.setupController(controller, resolvedModel); + const backend = this.modelFor('application'); + controller.backend = backend; + controller.breadcrumbs = [ + { label: 'Secrets', route: 'secrets', linkExternal: true }, + { label: backend.id, route: 'list', model: backend.id }, + { label: 'Configuration', route: 'configuration', model: backend }, + { label: 'Edit' }, + ]; + } +} diff --git a/ui/lib/kv/addon/routes/list-directory.js b/ui/lib/kv/addon/routes/list-directory.js index 7dc8677cc5..0aae64888f 100644 --- a/ui/lib/kv/addon/routes/list-directory.js +++ b/ui/lib/kv/addon/routes/list-directory.js @@ -58,8 +58,10 @@ export default class KvSecretsListRoute extends Route { const filterValue = pathToSecret ? (pageFilter ? pathToSecret + pageFilter : pathToSecret) : pageFilter; const secrets = await this.fetchMetadata(backend, pathToSecret, params); const capabilities = await this.capabilities.for('kvMetadata', { backend, path: path_to_secret }); + const backendModel = this.modelFor('application'); return { + backendModel, secrets, backend, pathToSecret, diff --git a/ui/lib/kv/addon/templates/configure.hbs b/ui/lib/kv/addon/templates/configure.hbs new file mode 100644 index 0000000000..6023e13d11 --- /dev/null +++ b/ui/lib/kv/addon/templates/configure.hbs @@ -0,0 +1,6 @@ +{{! + Copyright IBM Corp. 2016, 2025 + SPDX-License-Identifier: BUSL-1.1 +}} + + \ No newline at end of file diff --git a/ui/lib/kv/addon/templates/error.hbs b/ui/lib/kv/addon/templates/error.hbs index 6dda5a0490..ced437c30d 100644 --- a/ui/lib/kv/addon/templates/error.hbs +++ b/ui/lib/kv/addon/templates/error.hbs @@ -3,15 +3,20 @@ SPDX-License-Identifier: BUSL-1.1 }} - - <:tabLinks> + + <:tabs>
  • Secrets
  • Configuration
  • - -
    + + \ No newline at end of file diff --git a/ui/lib/kv/addon/templates/list-directory.hbs b/ui/lib/kv/addon/templates/list-directory.hbs index 496fc4f822..776b4ece28 100644 --- a/ui/lib/kv/addon/templates/list-directory.hbs +++ b/ui/lib/kv/addon/templates/list-directory.hbs @@ -6,6 +6,7 @@