From d122cf16f0b2dd3e69b4d2edc1eb11555247eb98 Mon Sep 17 00:00:00 2001 From: shofiq Date: Tue, 27 Jan 2026 14:35:05 +0600 Subject: [PATCH 1/6] add endpoints required & fix create ops-request url Signed-off-by: shofiq --- charts/kubedbcom-druid-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-druid-editor/ui/functions.js | 3 +-- charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-elasticsearch-editor/ui/functions.js | 3 +-- charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-ferretdb-editor/ui/functions.js | 5 ++--- charts/kubedbcom-kafka-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-kafka-editor/ui/functions.js | 3 +-- charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-mariadb-editor/ui/functions.js | 3 +-- charts/kubedbcom-memcached-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-memcached-editor/ui/functions.js | 3 +-- charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-mongodb-editor/ui/functions.js | 6 ++---- charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-mssqlserver-editor/ui/functions.js | 3 +-- charts/kubedbcom-mysql-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-mysql-editor/ui/functions.js | 3 +-- charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-perconaxtradb-editor/ui/functions.js | 3 +-- charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-pgbouncer-editor/ui/functions.js | 3 +-- charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-pgpool-editor/ui/functions.js | 3 +-- charts/kubedbcom-postgres-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-postgres-editor/ui/functions.js | 5 ++--- charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-proxysql-editor/ui/functions.js | 6 +++--- charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-rabbitmq-editor/ui/functions.js | 6 +++--- charts/kubedbcom-redis-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-redis-editor/ui/functions.js | 3 +-- charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-singlestore-editor/ui/functions.js | 3 +-- charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml | 8 +++++++- charts/kubedbcom-zookeeper-editor/ui/functions.js | 3 +-- 36 files changed, 151 insertions(+), 60 deletions(-) diff --git a/charts/kubedbcom-druid-editor/ui/edit-ui.yaml b/charts/kubedbcom-druid-editor/ui/edit-ui.yaml index 3abb1a9367..7b247b93d9 100644 --- a/charts/kubedbcom-druid-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-druid-editor/ui/edit-ui.yaml @@ -641,7 +641,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -710,12 +710,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-druid-editor/ui/functions.js b/charts/kubedbcom-druid-editor/ui/functions.js index 08171aae9d..a1eadf8f3b 100644 --- a/charts/kubedbcom-druid-editor/ui/functions.js +++ b/charts/kubedbcom-druid-editor/ui/functions.js @@ -1947,8 +1947,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml b/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml index 21ae993ec4..419a173e37 100644 --- a/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml @@ -159,7 +159,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -228,12 +228,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-elasticsearch-editor/ui/functions.js b/charts/kubedbcom-elasticsearch-editor/ui/functions.js index bd9bd62b28..332ddbe532 100644 --- a/charts/kubedbcom-elasticsearch-editor/ui/functions.js +++ b/charts/kubedbcom-elasticsearch-editor/ui/functions.js @@ -1137,8 +1137,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml b/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml index 7541e619cc..f0bf69b969 100644 --- a/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml @@ -341,7 +341,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -410,12 +410,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-ferretdb-editor/ui/functions.js b/charts/kubedbcom-ferretdb-editor/ui/functions.js index c84b2e7f1d..e2473e2330 100644 --- a/charts/kubedbcom-ferretdb-editor/ui/functions.js +++ b/charts/kubedbcom-ferretdb-editor/ui/functions.js @@ -69,7 +69,7 @@ export const useFunc = (model) => { return !isKube } - + async function getDbDetails() { const annotations = getValue(model, '/resources/autoscalingKubedbComFerretDBAutoscaler/metadata/annotations') || @@ -678,8 +678,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml b/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml index 792adc3eb4..365fc817f8 100644 --- a/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml @@ -737,7 +737,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -806,12 +806,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-kafka-editor/ui/functions.js b/charts/kubedbcom-kafka-editor/ui/functions.js index 725916f3ca..1bec248e68 100644 --- a/charts/kubedbcom-kafka-editor/ui/functions.js +++ b/charts/kubedbcom-kafka-editor/ui/functions.js @@ -610,8 +610,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml b/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml index 00df19595c..4253d4e867 100644 --- a/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml @@ -455,7 +455,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -524,12 +524,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-mariadb-editor/ui/functions.js b/charts/kubedbcom-mariadb-editor/ui/functions.js index 520f4ecdeb..495e72227b 100644 --- a/charts/kubedbcom-mariadb-editor/ui/functions.js +++ b/charts/kubedbcom-mariadb-editor/ui/functions.js @@ -1134,8 +1134,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml b/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml index 20c018ba96..1f6ac971fe 100644 --- a/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml @@ -10,7 +10,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -78,12 +78,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-memcached-editor/ui/functions.js b/charts/kubedbcom-memcached-editor/ui/functions.js index 499b412605..e18c4eb0d6 100644 --- a/charts/kubedbcom-memcached-editor/ui/functions.js +++ b/charts/kubedbcom-memcached-editor/ui/functions.js @@ -633,8 +633,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml b/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml index 1effd18128..06caa96cc7 100644 --- a/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml @@ -160,7 +160,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -227,12 +227,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-mongodb-editor/ui/functions.js b/charts/kubedbcom-mongodb-editor/ui/functions.js index 0a726dcde1..4b2454ab40 100644 --- a/charts/kubedbcom-mongodb-editor/ui/functions.js +++ b/charts/kubedbcom-mongodb-editor/ui/functions.js @@ -2814,7 +2814,6 @@ export const useFunc = (model) => { return showStoragememory } - function mongoTypeEqualsTo(mongoType, type) { // watchDependency('discriminator#/dbDetails') autoscaleType = type @@ -3083,8 +3082,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') @@ -3487,6 +3485,6 @@ export const useFunc = (model) => { setValueFromDbDetails, isHidden, setPausedValue, - showStorageMemoryOption + showStorageMemoryOption, } } diff --git a/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml b/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml index f56cd31d7d..8cde21d21a 100644 --- a/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml @@ -328,7 +328,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -397,12 +397,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-mssqlserver-editor/ui/functions.js b/charts/kubedbcom-mssqlserver-editor/ui/functions.js index f386d2d9c3..223bb0f90b 100644 --- a/charts/kubedbcom-mssqlserver-editor/ui/functions.js +++ b/charts/kubedbcom-mssqlserver-editor/ui/functions.js @@ -1155,8 +1155,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml b/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml index 8607c4fafa..efef7f20e5 100644 --- a/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml @@ -467,7 +467,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -536,12 +536,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-mysql-editor/ui/functions.js b/charts/kubedbcom-mysql-editor/ui/functions.js index 745f521280..e4e14a4454 100644 --- a/charts/kubedbcom-mysql-editor/ui/functions.js +++ b/charts/kubedbcom-mysql-editor/ui/functions.js @@ -1039,8 +1039,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml b/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml index 186a8cb120..b88c6fc439 100644 --- a/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml @@ -306,7 +306,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -375,12 +375,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-perconaxtradb-editor/ui/functions.js b/charts/kubedbcom-perconaxtradb-editor/ui/functions.js index baac20bdad..86e23082c1 100644 --- a/charts/kubedbcom-perconaxtradb-editor/ui/functions.js +++ b/charts/kubedbcom-perconaxtradb-editor/ui/functions.js @@ -652,8 +652,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml b/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml index ea8a9575e5..ff2b0586ee 100644 --- a/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml @@ -229,7 +229,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -298,12 +298,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-pgbouncer-editor/ui/functions.js b/charts/kubedbcom-pgbouncer-editor/ui/functions.js index 75a273b77a..2144d6e6e5 100644 --- a/charts/kubedbcom-pgbouncer-editor/ui/functions.js +++ b/charts/kubedbcom-pgbouncer-editor/ui/functions.js @@ -543,8 +543,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml b/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml index 7ee408947e..3fc96720af 100644 --- a/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml @@ -234,7 +234,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -309,12 +309,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-pgpool-editor/ui/functions.js b/charts/kubedbcom-pgpool-editor/ui/functions.js index f2c869d3af..ee4509c10e 100644 --- a/charts/kubedbcom-pgpool-editor/ui/functions.js +++ b/charts/kubedbcom-pgpool-editor/ui/functions.js @@ -562,8 +562,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml b/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml index 2283ce6d91..f40e15ab44 100644 --- a/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml @@ -467,7 +467,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -536,12 +536,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-postgres-editor/ui/functions.js b/charts/kubedbcom-postgres-editor/ui/functions.js index 4fdc6bd9f8..f295655118 100644 --- a/charts/kubedbcom-postgres-editor/ui/functions.js +++ b/charts/kubedbcom-postgres-editor/ui/functions.js @@ -1173,8 +1173,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') @@ -1518,6 +1517,6 @@ export const useFunc = (model) => { isBindingAlreadyOn, addOrRemoveBinding, - showStorageMemoryOption + showStorageMemoryOption, } } diff --git a/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml b/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml index f207ba3168..56d44acf5d 100644 --- a/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml @@ -229,7 +229,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -298,12 +298,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-proxysql-editor/ui/functions.js b/charts/kubedbcom-proxysql-editor/ui/functions.js index a812313532..e773e55e35 100644 --- a/charts/kubedbcom-proxysql-editor/ui/functions.js +++ b/charts/kubedbcom-proxysql-editor/ui/functions.js @@ -261,7 +261,8 @@ export const useFunc = (model) => { async function fetchTopologyMachines() { const annotations = - getValue(model, '/resources/autoscalingKubedbComProxySQLAutoscaler/metadata/annotations') || {} + getValue(model, '/resources/autoscalingKubedbComProxySQLAutoscaler/metadata/annotations') || + {} instance = annotations['kubernetes.io/instance-type'] const user = storeGet('/route/params/user') @@ -560,8 +561,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml b/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml index 81352263b7..8e807a8d9d 100644 --- a/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml @@ -301,7 +301,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -370,12 +370,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-rabbitmq-editor/ui/functions.js b/charts/kubedbcom-rabbitmq-editor/ui/functions.js index e9aefd86a4..c8712ccae2 100644 --- a/charts/kubedbcom-rabbitmq-editor/ui/functions.js +++ b/charts/kubedbcom-rabbitmq-editor/ui/functions.js @@ -208,8 +208,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') @@ -722,7 +721,8 @@ export const useFunc = (model) => { async function fetchTopologyMachines() { const annotations = - getValue(model, '/resources/autoscalingKubedbComRabbitMQAutoscaler/metadata/annotations') || {} + getValue(model, '/resources/autoscalingKubedbComRabbitMQAutoscaler/metadata/annotations') || + {} instance = annotations['kubernetes.io/instance-type'] const user = storeGet('/route/params/user') diff --git a/charts/kubedbcom-redis-editor/ui/edit-ui.yaml b/charts/kubedbcom-redis-editor/ui/edit-ui.yaml index adddecc3a5..07647799fd 100644 --- a/charts/kubedbcom-redis-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-redis-editor/ui/edit-ui.yaml @@ -679,7 +679,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -748,12 +748,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-redis-editor/ui/functions.js b/charts/kubedbcom-redis-editor/ui/functions.js index d27e040902..a0f5b324ef 100644 --- a/charts/kubedbcom-redis-editor/ui/functions.js +++ b/charts/kubedbcom-redis-editor/ui/functions.js @@ -1197,8 +1197,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml b/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml index 91d933dd6d..cbf64835c5 100644 --- a/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml @@ -819,7 +819,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -888,12 +888,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-singlestore-editor/ui/functions.js b/charts/kubedbcom-singlestore-editor/ui/functions.js index 06601ce699..e9e763fad4 100644 --- a/charts/kubedbcom-singlestore-editor/ui/functions.js +++ b/charts/kubedbcom-singlestore-editor/ui/functions.js @@ -1201,8 +1201,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') diff --git a/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml b/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml index d9673f5b79..45600bbd58 100644 --- a/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml @@ -378,7 +378,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -447,12 +447,18 @@ step: - type: input label: Interval schema: interval + validation: + type: required - type: input label: Path schema: path + validation: + type: required - type: input label: Port schema: port + validation: + type: required - type: select multiple: true label: Match Namespaces diff --git a/charts/kubedbcom-zookeeper-editor/ui/functions.js b/charts/kubedbcom-zookeeper-editor/ui/functions.js index 1ed0a60472..1ee0162a30 100644 --- a/charts/kubedbcom-zookeeper-editor/ui/functions.js +++ b/charts/kubedbcom-zookeeper-editor/ui/functions.js @@ -552,8 +552,7 @@ export const useFunc = (model) => { const routeRootPath = storeGet('/route/path') const pathPrefix = `${domain}/db${routeRootPath}` const pathSplit = pathPrefix.split('/').slice(0, -1).join('/') - const pathConstructedForKubedb = - pathSplit + `/create-opsrequest-${reqType.toLowerCase()}?namespace=${namespace}` + const pathConstructedForKubedb = pathSplit + `/${reqType.toLowerCase()}?namespace=${namespace}` const isKube = !!storeGet('/route/params/actions') From 9e4c7cfeb813e695df38ba0054ec4a1eca37a9ae Mon Sep 17 00:00:00 2001 From: shofiq Date: Tue, 27 Jan 2026 14:47:22 +0600 Subject: [PATCH 2/6] fix mongos env object to make values & names as required Signed-off-by: shofiq --- charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml b/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml index 06caa96cc7..ec53e9f706 100644 --- a/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml @@ -341,6 +341,8 @@ step: - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -358,6 +360,8 @@ step: - type: input label: Value schema: value + validation: + type: required if: name: isEqualToTemp|input type: function @@ -371,6 +375,8 @@ step: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace + validation: + type: required - type: select label: ConfigMap Key schema: valueFrom/properties/configMapKeyRef/properties/key @@ -392,6 +398,8 @@ step: name: getSecrets watchPaths: - schema/metadata/release/namespace + validation: + type: required - type: select label: Secret Key schema: valueFrom/properties/secretKeyRef/properties/key From 09ec2b3ea144a1071431ed14c7fff7663bf209eb Mon Sep 17 00:00:00 2001 From: shofiq Date: Tue, 27 Jan 2026 14:56:37 +0600 Subject: [PATCH 3/6] fix tmep error in onEnvArrayChange of monitoring Signed-off-by: shofiq --- charts/kubedbcom-mongodb-editor/ui/functions.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/charts/kubedbcom-mongodb-editor/ui/functions.js b/charts/kubedbcom-mongodb-editor/ui/functions.js index 4b2454ab40..32cfd61499 100644 --- a/charts/kubedbcom-mongodb-editor/ui/functions.js +++ b/charts/kubedbcom-mongodb-editor/ui/functions.js @@ -3270,16 +3270,17 @@ export const useFunc = (model) => { function onEnvArrayChange() { const env = getValue(discriminator, '/env') || [] let ret = {} + // filter out temp values const filteredEnv = env?.map((item) => { const { temp, ...rest } = item - if (temp.valueFromType === 'input') { + if (temp?.valueFromType === 'input') { const { name, value } = rest ret = { name, value } - } else if (temp.valueFromType === 'configMap') { + } else if (temp?.valueFromType === 'configMap') { const { name } = rest const { configMapKeyRef } = rest.valueFrom ret = { name, valueFrom: { configMapKeyRef } } - } else if (temp.valueFromType === 'secret') { + } else if (temp?.valueFromType === 'secret') { const { name } = rest const { secretKeyRef } = rest.valueFrom ret = { name, valueFrom: { secretKeyRef } } From 192e1112f7801d65232cbd51141f28d2dbf6e330 Mon Sep 17 00:00:00 2001 From: shofiq Date: Tue, 27 Jan 2026 17:49:19 +0600 Subject: [PATCH 4/6] add array env in monitoring to all supported dbs Signed-off-by: shofiq --- charts/kubedbcom-druid-editor/ui/edit-ui.yaml | 68 +++++++----- charts/kubedbcom-druid-editor/ui/functions.js | 80 ++++++++++++-- .../ui/edit-ui.yaml | 69 +++++++----- .../ui/functions.js | 82 ++++++++++++-- .../kubedbcom-ferretdb-editor/ui/edit-ui.yaml | 60 ++++++----- .../kubedbcom-ferretdb-editor/ui/functions.js | 80 ++++++++++++-- charts/kubedbcom-kafka-editor/ui/edit-ui.yaml | 61 ++++++----- charts/kubedbcom-kafka-editor/ui/functions.js | 80 ++++++++++++-- .../kubedbcom-mariadb-editor/ui/edit-ui.yaml | 60 ++++++----- .../kubedbcom-mariadb-editor/ui/functions.js | 80 ++++++++++++-- .../ui/edit-ui.yaml | 61 ++++++----- .../ui/functions.js | 100 ++++++++++++++++-- .../kubedbcom-mongodb-editor/ui/edit-ui.yaml | 1 - .../kubedbcom-mongodb-editor/ui/functions.js | 4 +- .../ui/edit-ui.yaml | 69 +++++++----- .../ui/functions.js | 83 +++++++++++++-- charts/kubedbcom-mysql-editor/ui/edit-ui.yaml | 61 ++++++----- charts/kubedbcom-mysql-editor/ui/functions.js | 80 ++++++++++++-- .../ui/edit-ui.yaml | 60 ++++++----- .../ui/functions.js | 84 +++++++++++++-- .../ui/edit-ui.yaml | 70 ++++++------ .../ui/functions.js | 83 +++++++++++++-- .../kubedbcom-pgpool-editor/ui/edit-ui.yaml | 58 ++++++---- .../kubedbcom-pgpool-editor/ui/functions.js | 80 ++++++++++++-- .../kubedbcom-postgres-editor/ui/edit-ui.yaml | 60 ++++++----- .../kubedbcom-postgres-editor/ui/functions.js | 80 ++++++++++++-- .../kubedbcom-proxysql-editor/ui/edit-ui.yaml | 69 +++++++----- .../kubedbcom-proxysql-editor/ui/functions.js | 80 ++++++++++++-- .../kubedbcom-rabbitmq-editor/ui/edit-ui.yaml | 68 +++++++----- .../kubedbcom-rabbitmq-editor/ui/functions.js | 80 ++++++++++++-- charts/kubedbcom-redis-editor/ui/edit-ui.yaml | 60 ++++++----- charts/kubedbcom-redis-editor/ui/functions.js | 80 ++++++++++++-- .../ui/edit-ui.yaml | 60 ++++++----- .../ui/functions.js | 83 +++++++++++++-- .../ui/edit-ui.yaml | 62 ++++++----- .../ui/functions.js | 83 +++++++++++++-- 36 files changed, 1856 insertions(+), 623 deletions(-) diff --git a/charts/kubedbcom-druid-editor/ui/edit-ui.yaml b/charts/kubedbcom-druid-editor/ui/edit-ui.yaml index 7b247b93d9..50e83471a8 100644 --- a/charts/kubedbcom-druid-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-druid-editor/ui/edit-ui.yaml @@ -633,6 +633,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -654,8 +655,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -803,21 +802,30 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType - init: - type: func + validation: + type: required + init: + type: func value: setValueFrom options: - text: Input @@ -830,58 +838,60 @@ step: func: onValueFromChange paths: - temp/properties/valueFromType - - type: input - label: Value - schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + - type: input + label: Value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComDruid/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: single-step-form id: binding diff --git a/charts/kubedbcom-druid-editor/ui/functions.js b/charts/kubedbcom-druid-editor/ui/functions.js index a1eadf8f3b..563b60752f 100644 --- a/charts/kubedbcom-druid-editor/ui/functions.js +++ b/charts/kubedbcom-druid-editor/ui/functions.js @@ -25,6 +25,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', true) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Compute Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -179,11 +180,11 @@ export const useFunc = (model) => { return getValue(model, path) } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function getNamespacedResourceList( axios, @@ -1796,13 +1797,13 @@ export const useFunc = (model) => { * Used to populate dropdown options for ConfigMap key selection * @returns {Array} List of ConfigMap keys with text/value pairs */ - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1865,13 +1866,13 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1956,7 +1957,61 @@ export const useFunc = (model) => { return `${domain}/console/${owner}/kubernetes/${cluster}/ops.kubedb.com/v1alpha1/druidopsrequests/create?name=${dbname}&namespace=${namespace}&group=${group}&version=${version}&resource=${resource}&kind=${kind}&page=operations&requestType=${reqType}` } - // ************************* Export All Functions ********************************************** + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComDruid/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } return { // Common Helper Functions @@ -2073,10 +2128,13 @@ export const useFunc = (model) => { isSecretTypeValueFrom, isInputTypeValueFrom, onValueFromChange, - isEqualToValueFromType, getConfigMapKeys, getSecrets, getSecretKeys, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, // Gateway Binding Functions isBindingAlreadyOn, diff --git a/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml b/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml index 419a173e37..36f8901901 100644 --- a/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-elasticsearch-editor/ui/edit-ui.yaml @@ -151,6 +151,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -172,8 +173,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -321,21 +320,30 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType - init: - type: func + validation: + type: required + init: + type: func value: setValueFrom options: - text: Input @@ -348,58 +356,61 @@ step: func: onValueFromChange paths: - temp/properties/valueFromType - - type: input - label: Value - schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + - type: input + label: Value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComElasticsearch/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true + - type: single-step-form id: compute-autoscaler diff --git a/charts/kubedbcom-elasticsearch-editor/ui/functions.js b/charts/kubedbcom-elasticsearch-editor/ui/functions.js index 332ddbe532..403ba28b5b 100644 --- a/charts/kubedbcom-elasticsearch-editor/ui/functions.js +++ b/charts/kubedbcom-elasticsearch-editor/ui/functions.js @@ -25,6 +25,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', true) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Compute Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1206,10 +1207,10 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function getNamespacedResourceList( axios, @@ -1264,13 +1265,13 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) if (!configMapName) return [] @@ -1329,13 +1330,13 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) if (!secretName) return [] @@ -1359,7 +1360,65 @@ export const useFunc = (model) => { } } - // ************************* Export All Functions ******************************************** + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComElasticsearch/spec/monitor/prometheus/exporter/env') || + [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } return { // Common helpers @@ -1444,11 +1503,14 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, onValueFromChange, - isEqualToValueFromType, getNamespacedResourceList, resourceNames, getConfigMapKeys, getSecrets, getSecretKeys, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml b/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml index f0bf69b969..ccf66527a3 100644 --- a/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-ferretdb-editor/ui/edit-ui.yaml @@ -333,6 +333,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -354,8 +355,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -502,19 +501,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -531,53 +539,55 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComFerretDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true \ No newline at end of file diff --git a/charts/kubedbcom-ferretdb-editor/ui/functions.js b/charts/kubedbcom-ferretdb-editor/ui/functions.js index e2473e2330..c5d4a32943 100644 --- a/charts/kubedbcom-ferretdb-editor/ui/functions.js +++ b/charts/kubedbcom-ferretdb-editor/ui/functions.js @@ -16,6 +16,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -758,20 +759,20 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -798,14 +799,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -836,6 +837,62 @@ export const useFunc = (model) => { return false } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComFerretDB/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { isConsole, getDbDetails, @@ -871,7 +928,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -880,5 +936,9 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml b/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml index 365fc817f8..d9f6481358 100644 --- a/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-kafka-editor/ui/edit-ui.yaml @@ -729,6 +729,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -750,8 +751,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -899,19 +898,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -928,56 +936,59 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComKafka/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true + - type: single-step-form id: binding diff --git a/charts/kubedbcom-kafka-editor/ui/functions.js b/charts/kubedbcom-kafka-editor/ui/functions.js index 1bec248e68..e7926b7e6d 100644 --- a/charts/kubedbcom-kafka-editor/ui/functions.js +++ b/charts/kubedbcom-kafka-editor/ui/functions.js @@ -16,6 +16,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -709,11 +710,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -742,14 +743,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -812,14 +813,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -934,6 +935,62 @@ export const useFunc = (model) => { return value } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComKafka/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { isKubedb, isConsole, @@ -971,7 +1028,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -979,6 +1035,10 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, getNamespacedResourceList, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, isBindingAlreadyOn, addOrRemoveBinding, diff --git a/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml b/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml index 4253d4e867..0682bfbac9 100644 --- a/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mariadb-editor/ui/edit-ui.yaml @@ -447,6 +447,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -468,8 +469,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -616,19 +615,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -645,56 +653,58 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComMariaDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: single-step-form id: binding diff --git a/charts/kubedbcom-mariadb-editor/ui/functions.js b/charts/kubedbcom-mariadb-editor/ui/functions.js index 495e72227b..22a08b75ab 100644 --- a/charts/kubedbcom-mariadb-editor/ui/functions.js +++ b/charts/kubedbcom-mariadb-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1211,11 +1212,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -1244,14 +1245,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1314,14 +1315,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1427,6 +1428,62 @@ export const useFunc = (model) => { } } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComMariaDB/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { initScheduleBackup, initScheduleBackupForEdit, @@ -1494,7 +1551,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1502,6 +1558,10 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, getNamespacedResourceList, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, isBindingAlreadyOn, addOrRemoveBinding, diff --git a/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml b/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml index 1f6ac971fe..a8b84a0dd0 100644 --- a/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml @@ -2,6 +2,7 @@ type: multi-step-form step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -23,8 +24,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -168,19 +167,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -197,56 +205,59 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComMemcached/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true + - type: single-step-form id: compute-autoscaler loader: getDbDetails diff --git a/charts/kubedbcom-memcached-editor/ui/functions.js b/charts/kubedbcom-memcached-editor/ui/functions.js index e18c4eb0d6..c398e8e53a 100644 --- a/charts/kubedbcom-memcached-editor/ui/functions.js +++ b/charts/kubedbcom-memcached-editor/ui/functions.js @@ -9,6 +9,24 @@ export const useFunc = (model) => { ) setDiscriminatorValue('/enableMonitoring', false) + setDiscriminatorValue('/customizeExporter', true) + setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) + + // Autoscaler Discriminators + setDiscriminatorValue('/dbDetails', false) + setDiscriminatorValue('/topologyMachines', []) + setDiscriminatorValue('/allowedMachine-standalone-min', '') + setDiscriminatorValue('/allowedMachine-standalone-max', '') + setDiscriminatorValue('/allowedMachine-replicaSet-min', '') + setDiscriminatorValue('/allowedMachine-replicaSet-max', '') + setDiscriminatorValue('/allowedMachine-shard-min', '') + setDiscriminatorValue('/allowedMachine-shard-max', '') + setDiscriminatorValue('/allowedMachine-configServer-min', '') + setDiscriminatorValue('/allowedMachine-configServer-max', '') + setDiscriminatorValue('/allowedMachine-mongos-min', '') + setDiscriminatorValue('/allowedMachine-mongos-max', '') + let instance = {} async function getDbDetails() { const annotations = @@ -713,20 +731,20 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -753,14 +771,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -791,6 +809,65 @@ export const useFunc = (model) => { return false } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComMemcached/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { returnFalse, getDbDetails, @@ -830,8 +907,11 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, onValueFromChange, - isEqualToValueFromType, getConfigMapKeys, getSecretKeys, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml b/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml index ec53e9f706..ca0aaac393 100644 --- a/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mongodb-editor/ui/edit-ui.yaml @@ -320,7 +320,6 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - type: array-object-form init: type: func diff --git a/charts/kubedbcom-mongodb-editor/ui/functions.js b/charts/kubedbcom-mongodb-editor/ui/functions.js index 32cfd61499..f9739f4e66 100644 --- a/charts/kubedbcom-mongodb-editor/ui/functions.js +++ b/charts/kubedbcom-mongodb-editor/ui/functions.js @@ -3278,11 +3278,11 @@ export const useFunc = (model) => { ret = { name, value } } else if (temp?.valueFromType === 'configMap') { const { name } = rest - const { configMapKeyRef } = rest.valueFrom + const { configMapKeyRef } = rest?.valueFrom || {} ret = { name, valueFrom: { configMapKeyRef } } } else if (temp?.valueFromType === 'secret') { const { name } = rest - const { secretKeyRef } = rest.valueFrom + const { secretKeyRef } = rest?.valueFrom || {} ret = { name, valueFrom: { secretKeyRef } } } return ret diff --git a/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml b/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml index 8cde21d21a..fd2f759931 100644 --- a/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mssqlserver-editor/ui/edit-ui.yaml @@ -320,6 +320,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -341,8 +342,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -490,21 +489,30 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType - init: - type: func + validation: + type: required + init: + type: func value: setValueFrom options: - text: Input @@ -517,58 +525,61 @@ step: func: onValueFromChange paths: - temp/properties/valueFromType - - type: input - label: Value - schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + - type: input + label: Value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComMSSQLServer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true + - type: single-step-form id: compute-autoscaler diff --git a/charts/kubedbcom-mssqlserver-editor/ui/functions.js b/charts/kubedbcom-mssqlserver-editor/ui/functions.js index 223bb0f90b..4ec453a113 100644 --- a/charts/kubedbcom-mssqlserver-editor/ui/functions.js +++ b/charts/kubedbcom-mssqlserver-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1222,11 +1223,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -1255,14 +1256,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1325,14 +1326,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1476,6 +1477,65 @@ export const useFunc = (model) => { } } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComMSSQLServer/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { initScheduleBackup, initScheduleBackupForEdit, @@ -1538,7 +1598,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1547,6 +1606,10 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, setValueFromDbDetails, mssqlserverTypeEqualsTo, diff --git a/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml b/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml index efef7f20e5..7ded163508 100644 --- a/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-mysql-editor/ui/edit-ui.yaml @@ -459,6 +459,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -480,8 +481,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -628,19 +627,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -657,56 +665,59 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComMySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true + - type: single-step-form id: binding diff --git a/charts/kubedbcom-mysql-editor/ui/functions.js b/charts/kubedbcom-mysql-editor/ui/functions.js index e4e14a4454..9f656c530c 100644 --- a/charts/kubedbcom-mysql-editor/ui/functions.js +++ b/charts/kubedbcom-mysql-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1119,11 +1120,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -1152,14 +1153,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1222,14 +1223,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1343,6 +1344,62 @@ export const useFunc = (model) => { return showStoragememory } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComMySQL/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { initScheduleBackup, initScheduleBackupForEdit, @@ -1405,7 +1462,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1414,6 +1470,10 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, isBindingAlreadyOn, addOrRemoveBinding, diff --git a/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml b/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml index b88c6fc439..2f91897ee9 100644 --- a/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-perconaxtradb-editor/ui/edit-ui.yaml @@ -298,6 +298,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -319,8 +320,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -467,19 +466,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -496,53 +504,55 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComPerconaXtraDB/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true diff --git a/charts/kubedbcom-perconaxtradb-editor/ui/functions.js b/charts/kubedbcom-perconaxtradb-editor/ui/functions.js index 86e23082c1..9d2e030383 100644 --- a/charts/kubedbcom-perconaxtradb-editor/ui/functions.js +++ b/charts/kubedbcom-perconaxtradb-editor/ui/functions.js @@ -13,6 +13,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -719,11 +720,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -752,14 +753,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -822,14 +823,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -865,6 +866,66 @@ export const useFunc = (model) => { return value } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComPerconaXtraDB/spec/monitor/prometheus/exporter/env') || + [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { isConsole, isKubedb, @@ -901,7 +962,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -910,6 +970,10 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, setValueFromDbDetails, } diff --git a/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml b/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml index ff2b0586ee..95c9c4b554 100644 --- a/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-pgbouncer-editor/ui/edit-ui.yaml @@ -221,6 +221,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -242,8 +243,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -390,21 +389,30 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType - init: - type: func + validation: + type: required + init: + type: func value: setValueFrom options: - text: Input @@ -417,55 +425,57 @@ step: func: onValueFromChange paths: - temp/properties/valueFromType - - type: input - label: Value - schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + - type: input + label: Value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComPgBouncer/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name - - schema/metadata/release/namespace - # allowUserDefinedOption: true + - schema/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name + - schema/metadata/release/namespace \ No newline at end of file diff --git a/charts/kubedbcom-pgbouncer-editor/ui/functions.js b/charts/kubedbcom-pgbouncer-editor/ui/functions.js index 2144d6e6e5..78ea7b2131 100644 --- a/charts/kubedbcom-pgbouncer-editor/ui/functions.js +++ b/charts/kubedbcom-pgbouncer-editor/ui/functions.js @@ -13,6 +13,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -623,11 +624,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -683,14 +684,14 @@ export const useFunc = (model) => { return ans } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -753,14 +754,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -791,6 +792,65 @@ export const useFunc = (model) => { return false } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComPgBouncer/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { isConsole, isKubedb, @@ -825,7 +885,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -834,5 +893,9 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml b/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml index 3fc96720af..1ff9bf3056 100644 --- a/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-pgpool-editor/ui/edit-ui.yaml @@ -226,6 +226,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -401,19 +402,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -430,53 +440,55 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComPgpool/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true diff --git a/charts/kubedbcom-pgpool-editor/ui/functions.js b/charts/kubedbcom-pgpool-editor/ui/functions.js index ee4509c10e..eecfe0b9b3 100644 --- a/charts/kubedbcom-pgpool-editor/ui/functions.js +++ b/charts/kubedbcom-pgpool-editor/ui/functions.js @@ -11,6 +11,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -642,11 +643,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function getNamespacedResourceList( axios, @@ -702,14 +703,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -772,14 +773,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -810,6 +811,62 @@ export const useFunc = (model) => { return false } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComPgpool/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { isConsole, isKubedb, @@ -845,7 +902,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -854,5 +910,9 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml b/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml index f40e15ab44..cde79a6ad0 100644 --- a/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-postgres-editor/ui/edit-ui.yaml @@ -459,6 +459,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -480,8 +481,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -628,19 +627,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -657,56 +665,58 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComPostgres/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: single-step-form id: binding diff --git a/charts/kubedbcom-postgres-editor/ui/functions.js b/charts/kubedbcom-postgres-editor/ui/functions.js index f295655118..b2a54668a3 100644 --- a/charts/kubedbcom-postgres-editor/ui/functions.js +++ b/charts/kubedbcom-postgres-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1253,11 +1254,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -1286,14 +1287,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') // watchDependency('rootModel#/valueFrom/configMapKeyRef/name') @@ -1319,14 +1320,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1434,6 +1435,62 @@ export const useFunc = (model) => { return showStoragememory } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComPostgres/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { initScheduleBackup, initScheduleBackupForEdit, @@ -1505,7 +1562,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1514,6 +1570,10 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, isBindingAlreadyOn, addOrRemoveBinding, diff --git a/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml b/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml index 56d44acf5d..63da2d2b31 100644 --- a/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-proxysql-editor/ui/edit-ui.yaml @@ -221,6 +221,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -242,8 +243,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -390,21 +389,30 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType - init: - type: func + validation: + type: required + init: + type: func value: setValueFrom options: - text: Input @@ -417,55 +425,58 @@ step: func: onValueFromChange paths: - temp/properties/valueFromType - - type: input - label: Value - schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + - type: input + label: Value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComProxySQL/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true + \ No newline at end of file diff --git a/charts/kubedbcom-proxysql-editor/ui/functions.js b/charts/kubedbcom-proxysql-editor/ui/functions.js index e773e55e35..2a4a272684 100644 --- a/charts/kubedbcom-proxysql-editor/ui/functions.js +++ b/charts/kubedbcom-proxysql-editor/ui/functions.js @@ -11,6 +11,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -643,11 +644,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -676,14 +677,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -746,14 +747,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -784,6 +785,62 @@ export const useFunc = (model) => { return false } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComProxySQL/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { isConsole, isKubedb, @@ -818,7 +875,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -827,5 +883,9 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml b/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml index 8e807a8d9d..24e58243ef 100644 --- a/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-rabbitmq-editor/ui/edit-ui.yaml @@ -293,6 +293,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -314,8 +315,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -462,21 +461,30 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType - init: - type: func + validation: + type: required + init: + type: func value: setValueFrom options: - text: Input @@ -489,58 +497,60 @@ step: func: onValueFromChange paths: - temp/properties/valueFromType - - type: input - label: Value - schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + - type: input + label: Value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComRabbitMQ/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: single-step-form id: binding diff --git a/charts/kubedbcom-rabbitmq-editor/ui/functions.js b/charts/kubedbcom-rabbitmq-editor/ui/functions.js index c8712ccae2..cd931d46f9 100644 --- a/charts/kubedbcom-rabbitmq-editor/ui/functions.js +++ b/charts/kubedbcom-rabbitmq-editor/ui/functions.js @@ -24,6 +24,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Compute Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -288,11 +289,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -321,14 +322,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -391,14 +392,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -904,6 +905,62 @@ export const useFunc = (model) => { return value } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComRabbitMQ/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { returnFalse, isEqualToModelPathValue, @@ -920,7 +977,6 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -949,5 +1005,9 @@ export const useFunc = (model) => { isBindingAlreadyOn, handleUnit, setValueFromDbDetails, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } diff --git a/charts/kubedbcom-redis-editor/ui/edit-ui.yaml b/charts/kubedbcom-redis-editor/ui/edit-ui.yaml index 07647799fd..61c4ab9e23 100644 --- a/charts/kubedbcom-redis-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-redis-editor/ui/edit-ui.yaml @@ -671,6 +671,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -692,8 +693,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -840,19 +839,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -869,56 +877,58 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComRedis/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: single-step-form id: binding diff --git a/charts/kubedbcom-redis-editor/ui/functions.js b/charts/kubedbcom-redis-editor/ui/functions.js index a0f5b324ef..1b7fd1aab6 100644 --- a/charts/kubedbcom-redis-editor/ui/functions.js +++ b/charts/kubedbcom-redis-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1264,11 +1265,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -1297,14 +1298,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1367,14 +1368,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1451,6 +1452,62 @@ export const useFunc = (model) => { return value } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue(model, '/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env') + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComRedis/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { initScheduleBackup, initScheduleBackupForEdit, @@ -1513,7 +1570,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1522,6 +1578,10 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, isBindingAlreadyOn, addOrRemoveBinding, diff --git a/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml b/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml index cbf64835c5..59b975b0e5 100644 --- a/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-singlestore-editor/ui/edit-ui.yaml @@ -811,6 +811,7 @@ step: - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -832,8 +833,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -980,19 +979,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -1009,56 +1017,58 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComSinglestore/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name + - schema/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: single-step-form id: binding diff --git a/charts/kubedbcom-singlestore-editor/ui/functions.js b/charts/kubedbcom-singlestore-editor/ui/functions.js index e9e763fad4..5764a0b3ff 100644 --- a/charts/kubedbcom-singlestore-editor/ui/functions.js +++ b/charts/kubedbcom-singlestore-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -1268,11 +1269,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -1301,14 +1302,14 @@ export const useFunc = (model) => { }) } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1371,14 +1372,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1552,6 +1553,65 @@ export const useFunc = (model) => { return dependantIndex === -1 ? machines : filteredMachine } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComSinglestore/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { initScheduleBackup, initScheduleBackupForEdit, @@ -1612,7 +1672,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1621,6 +1680,10 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + initMonitoring, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, isBindingAlreadyOn, addOrRemoveBinding, diff --git a/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml b/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml index 45600bbd58..90e17d6728 100644 --- a/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-zookeeper-editor/ui/edit-ui.yaml @@ -370,6 +370,7 @@ step: schema: schema/properties/resources/properties/autoscalingKubedbComZooKeeperAutoscaler/properties/spec/properties/opsRequestOptions/properties/apply - type: single-step-form id: monitoring + loader: initMonitoring elements: - type: label-element label: To update Exporter Resource section click on Create OpsRequest @@ -391,8 +392,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -539,19 +538,28 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - - type: block-layout - label: New Environment Variable - showLabels: true - hideBlock: true - # schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env + - type: array-object-form + init: + type: func + value: initEnvArray + label: Environment Variables + buttonClass: is-light is-outlined + watcher: + func: onEnvArrayChange + paths: + - temp/properties/env + schema: temp/properties/env elements: - type: input label: Name - schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/name + schema: name + validation: + type: required - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -568,53 +576,55 @@ step: - temp/properties/valueFromType - type: input label: Value - schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/value + schema: value + validation: + type: required if: - name: isEqualToValueFromType|input + name: isEqualToTemp|input type: function - type: select if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap label: ConfigMap Name - schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/name + schema: valueFrom/properties/configMapKeyRef/properties/name loader: name: resourceNames|core|v1|configmaps watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: ConfigMap Key - schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/configMapKeyRef/properties/key + schema: valueFrom/properties/configMapKeyRef/properties/key if: type: function - name: isEqualToValueFromType|configMap + name: isEqualToTemp|configMap loader: name: getConfigMapKeys watchPaths: - - schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/configMapKeyRef/name + - schema/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/configMapKeyRef/name - schema/metadata/release/namespace - # allowUserDefinedOption: true - type: select label: Secret Name - schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/name + schema: valueFrom/properties/secretKeyRef/properties/name if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecrets watchPaths: - schema/metadata/release/namespace - # allowUserDefinedOption: true + validation: + type: required - type: select label: Secret Key - schema: schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/properties/valueFrom/properties/secretKeyRef/properties/key + schema: valueFrom/properties/secretKeyRef/properties/key if: type: function - name: isEqualToValueFromType|secret + name: isEqualToTemp|secret loader: name: getSecretKeys watchPaths: - - schema/properties/resources/properties/kubedbComZooKeeper/properties/spec/properties/monitor/properties/prometheus/properties/exporter/properties/env/properties/items/valueFrom/secretKeyRef/name - - schema/metadata/release/namespace - # allowUserDefinedOption: true \ No newline at end of file + - schema/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env/dynamicIndex/valueFrom/secretKeyRef/name + - schema/metadata/release/namespace \ No newline at end of file diff --git a/charts/kubedbcom-zookeeper-editor/ui/functions.js b/charts/kubedbcom-zookeeper-editor/ui/functions.js index 1ee0162a30..d1b4bc1f0e 100644 --- a/charts/kubedbcom-zookeeper-editor/ui/functions.js +++ b/charts/kubedbcom-zookeeper-editor/ui/functions.js @@ -27,6 +27,7 @@ export const useFunc = (model) => { setDiscriminatorValue('/enableMonitoring', false) setDiscriminatorValue('/customizeExporter', true) setDiscriminatorValue('/valueFromType', 'input') + setDiscriminatorValue('/env', []) // Compute Autoscaler Discriminators setDiscriminatorValue('/dbDetails', false) @@ -632,11 +633,11 @@ export const useFunc = (model) => { } } - function isEqualToValueFromType(value) { - //watchDependency('discriminator#/valueFromType') - const valueFrom = getValue(discriminator, '/valueFromType') - return valueFrom === value - } + // function isEqualToValueFromType(value) { + // //watchDependency('discriminator#/valueFromType') + // const valueFrom = getValue(discriminator, '/valueFromType') + // return valueFrom === value + // } async function resourceNames(group, version, resource) { const namespace = getValue(model, '/metadata/release/namespace') @@ -692,14 +693,14 @@ export const useFunc = (model) => { return ans } - async function getConfigMapKeys() { + async function getConfigMapKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const configMapName = getValue( model, - '/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env/items/valueFrom/configMapKeyRef/name', + `/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env/${index}/valueFrom/configMapKeyRef/name`, ) // watchDependency('data#/namespace') @@ -762,14 +763,14 @@ export const useFunc = (model) => { } } - async function getSecretKeys() { + async function getSecretKeys(index) { const owner = storeGet('/route/params/user') const cluster = storeGet('/route/params/cluster') // const namespace = getValue(reusableElementCtx, '/dataContext/namespace') // not supported const namespace = getValue(model, '/metadata/release/namespace') const secretName = getValue( model, - '/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env/items/valueFrom/secretKeyRef/name', + `/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env/${index}/valueFrom/secretKeyRef/name`, ) // watchDependency('data#/namespace') @@ -1255,6 +1256,65 @@ export const useFunc = (model) => { return false } + function onEnvArrayChange() { + const env = getValue(discriminator, '/env') || [] + let ret = {} + // filter out temp values + const filteredEnv = env?.map((item) => { + const { temp, ...rest } = item + if (temp?.valueFromType === 'input') { + const { name, value } = rest + ret = { name, value } + } else if (temp?.valueFromType === 'configMap') { + const { name } = rest + const { configMapKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { configMapKeyRef } } + } else if (temp?.valueFromType === 'secret') { + const { name } = rest + const { secretKeyRef } = rest?.valueFrom || {} + ret = { name, valueFrom: { secretKeyRef } } + } + return ret + }) + + if (filteredEnv.length) + commit('wizard/model$update', { + path: '/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env', + value: filteredEnv, + force: true, + }) + } + + function initEnvArray() { + const env = getValue( + model, + '/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env', + ) + + return env || [] + } + + function isEqualToTemp(value, index) { + //watchDependency('discriminator#/valueFromType') + const valueFrom = getValue(discriminator, `/env/${index}/temp/valueFromType`) + return valueFrom === value + } + + function initMonitoring() { + const env = + getValue(model, '/resources/kubedbComZooKeeper/spec/monitor/prometheus/exporter/env') || [] + setDiscriminatorValue('/env', env) + let tempEnv = [] + env.forEach((item) => { + let radio = '' + if (item.value) radio = 'input' + else if (item.valueFrom && item.valueFrom.configMapKeyRef) radio = 'configMap' + else if (item.valueFrom && item.valueFrom.secretKeyRef) radio = 'secret' + tempEnv.push({ ...item, temp: { valueFromType: radio } }) + }) + setDiscriminatorValue('/env', tempEnv) + } + return { returnFalse, initScheduleBackup, @@ -1300,7 +1360,6 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, onValueFromChange, - isEqualToValueFromType, onNamespaceChange, // Autoscaler functions isConsole, @@ -1325,5 +1384,9 @@ export const useFunc = (model) => { setValueFromDbDetails, isRancherManaged, onTriggerChange, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } From 607d2935b97a7802c3ceec87a0c0ad349070c3fc Mon Sep 17 00:00:00 2001 From: shofiq Date: Tue, 27 Jan 2026 17:54:09 +0600 Subject: [PATCH 5/6] fix pg pool config key in dbInfo api payload Signed-off-by: shofiq --- charts/opskubedbcom-pgpoolopsrequest-editor/ui/functions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/opskubedbcom-pgpoolopsrequest-editor/ui/functions.js b/charts/opskubedbcom-pgpoolopsrequest-editor/ui/functions.js index 94c6f3df62..183652225b 100644 --- a/charts/opskubedbcom-pgpoolopsrequest-editor/ui/functions.js +++ b/charts/opskubedbcom-pgpoolopsrequest-editor/ui/functions.js @@ -305,7 +305,7 @@ const machineList = [ 'db.r.24xlarge', ] -const configSecretKeys = ['*.conf'] +const configSecretKeys = ['kubedb-user.conf'] let machinesFromPreset = [] let secretArray = [] @@ -882,7 +882,7 @@ export const useFunc = (model) => { version: dbVersion, }, }, - keys: ['*.conf'], + keys: ['kubedb-user.conf'], }, }, ) From f0e1f9bf4588158d15570c5c36bd504191fc5f5c Mon Sep 17 00:00:00 2001 From: shofiq Date: Tue, 27 Jan 2026 18:19:48 +0600 Subject: [PATCH 6/6] fix button class in memcached monitoring endpoints Signed-off-by: shofiq --- charts/kubedbcom-memcached-editor/ui/edit-ui.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml b/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml index a8b84a0dd0..94a7ee222b 100644 --- a/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml +++ b/charts/kubedbcom-memcached-editor/ui/edit-ui.yaml @@ -69,6 +69,7 @@ step: - type: array-object-form label: Endpoints schema: schema/properties/resources/properties/monitoringCoreosComServiceMonitor/properties/spec/properties/endpoints + buttonClass: is-light is-outlined elements: - type: switch label: Honor labels