diff --git a/charts/kubedbcom-druid-editor/ui/edit-ui.yaml b/charts/kubedbcom-druid-editor/ui/edit-ui.yaml index 3abb1a9367..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 @@ -641,7 +642,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -654,8 +655,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -710,12 +709,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 @@ -797,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 @@ -824,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 08171aae9d..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') @@ -1947,8 +1948,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') @@ -1957,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 @@ -2074,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 21ae993ec4..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 @@ -159,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 @@ -172,8 +173,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -228,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 @@ -315,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 @@ -342,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 bd9bd62b28..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) @@ -1137,8 +1138,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') @@ -1207,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, @@ -1265,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 [] @@ -1330,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 [] @@ -1360,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 @@ -1445,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 7541e619cc..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 @@ -341,7 +342,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -354,8 +355,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -410,12 +409,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 @@ -496,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 @@ -525,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 c84b2e7f1d..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) @@ -69,7 +70,7 @@ export const useFunc = (model) => { return !isKube } - + async function getDbDetails() { const annotations = getValue(model, '/resources/autoscalingKubedbComFerretDBAutoscaler/metadata/annotations') || @@ -678,8 +679,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') @@ -759,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') @@ -799,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') @@ -837,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, @@ -872,7 +928,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -881,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 792adc3eb4..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 @@ -737,7 +738,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -750,8 +751,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -806,12 +805,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 @@ -893,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 @@ -922,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 725916f3ca..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) @@ -610,8 +611,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') @@ -710,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') @@ -743,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') @@ -813,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') @@ -935,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, @@ -972,7 +1028,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -980,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 00df19595c..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 @@ -455,7 +456,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -468,8 +469,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -524,12 +523,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 @@ -610,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 @@ -639,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 520f4ecdeb..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) @@ -1134,8 +1135,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') @@ -1212,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') @@ -1245,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') @@ -1315,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') @@ -1428,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, @@ -1495,7 +1551,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1503,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 20c018ba96..94a7ee222b 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 @@ -10,7 +11,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -23,8 +24,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -70,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 @@ -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 @@ -162,19 +168,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 @@ -191,56 +206,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 499b412605..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 = @@ -633,8 +651,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') @@ -714,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') @@ -754,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') @@ -792,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, @@ -831,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 1effd18128..ca0aaac393 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 @@ -314,7 +320,6 @@ step: label: Metadata showLabels: false elements: - #remove: should be array-object-form after fixes - type: array-object-form init: type: func @@ -335,6 +340,8 @@ step: - type: radio label: Value From schema: temp/properties/valueFromType + validation: + type: required init: type: func value: setValueFrom @@ -352,6 +359,8 @@ step: - type: input label: Value schema: value + validation: + type: required if: name: isEqualToTemp|input type: function @@ -365,6 +374,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 @@ -386,6 +397,8 @@ step: name: getSecrets watchPaths: - schema/metadata/release/namespace + validation: + type: required - type: select label: Secret Key schema: valueFrom/properties/secretKeyRef/properties/key diff --git a/charts/kubedbcom-mongodb-editor/ui/functions.js b/charts/kubedbcom-mongodb-editor/ui/functions.js index 0a726dcde1..f9739f4e66 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') @@ -3272,18 +3270,19 @@ 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 + 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 + const { secretKeyRef } = rest?.valueFrom || {} ret = { name, valueFrom: { secretKeyRef } } } return ret @@ -3487,6 +3486,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..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 @@ -328,7 +329,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -341,8 +342,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -397,12 +396,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 @@ -484,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 @@ -511,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 f386d2d9c3..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) @@ -1155,8 +1156,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') @@ -1223,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') @@ -1256,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') @@ -1326,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') @@ -1477,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, @@ -1539,7 +1598,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1548,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 8607c4fafa..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 @@ -467,7 +468,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -480,8 +481,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -536,12 +535,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 @@ -622,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 @@ -651,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 745f521280..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) @@ -1039,8 +1040,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') @@ -1120,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') @@ -1153,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') @@ -1223,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') @@ -1344,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, @@ -1406,7 +1462,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1415,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 186a8cb120..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 @@ -306,7 +307,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -319,8 +320,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -375,12 +374,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 @@ -461,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 @@ -490,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 baac20bdad..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) @@ -652,8 +653,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') @@ -720,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') @@ -753,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') @@ -823,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') @@ -866,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, @@ -902,7 +962,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -911,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 ea8a9575e5..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 @@ -229,7 +230,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -242,8 +243,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -298,12 +297,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 @@ -384,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 @@ -411,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 75a273b77a..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) @@ -543,8 +544,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') @@ -624,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') @@ -684,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') @@ -754,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') @@ -792,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, @@ -826,7 +885,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -835,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 7ee408947e..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 @@ -234,7 +235,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 +310,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 @@ -395,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 @@ -424,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 f2c869d3af..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) @@ -562,8 +563,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') @@ -643,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, @@ -703,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') @@ -773,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') @@ -811,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, @@ -846,7 +902,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -855,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 2283ce6d91..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 @@ -467,7 +468,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -480,8 +481,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -536,12 +535,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 @@ -622,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 @@ -651,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 4fdc6bd9f8..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) @@ -1173,8 +1174,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') @@ -1254,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') @@ -1287,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') @@ -1320,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') @@ -1435,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, @@ -1506,7 +1562,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1515,9 +1570,13 @@ export const useFunc = (model) => { isSecretTypeValueFrom, getNamespacedResourceList, returnFalse, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, 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..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 @@ -229,7 +230,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -242,8 +243,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -298,12 +297,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 @@ -384,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 @@ -411,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 a812313532..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) @@ -261,7 +262,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 +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') @@ -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 81352263b7..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 @@ -301,7 +302,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -314,8 +315,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -370,12 +369,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 @@ -456,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 @@ -483,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 e9aefd86a4..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) @@ -208,8 +209,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') @@ -289,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') @@ -322,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') @@ -392,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') @@ -722,7 +722,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') @@ -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 adddecc3a5..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 @@ -679,7 +680,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -692,8 +693,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -748,12 +747,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 @@ -834,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 @@ -863,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 d27e040902..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) @@ -1197,8 +1198,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') @@ -1265,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') @@ -1298,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') @@ -1368,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') @@ -1452,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, @@ -1514,7 +1570,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1523,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 91d933dd6d..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 @@ -819,7 +820,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -832,8 +833,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -888,12 +887,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 @@ -974,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 @@ -1003,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 06601ce699..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) @@ -1201,8 +1202,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') @@ -1269,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') @@ -1302,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') @@ -1372,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') @@ -1553,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, @@ -1613,7 +1672,6 @@ export const useFunc = (model) => { onLabelChange, setValueFrom, onValueFromChange, - isEqualToValueFromType, resourceNames, getConfigMapKeys, getSecrets, @@ -1622,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 d9673f5b79..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 @@ -378,7 +379,7 @@ step: schema: temp/properties/opsRequestUrl init: type: func - value: getOpsRequestUrl|VerticalScaling + value: getOpsRequestUrl|scale-vertically - type: switch label: Enable Monitoring fullwidth: true @@ -391,8 +392,6 @@ step: paths: - temp/properties/enableMonitoring - type: block-layout - label: Backup form - showLabels: false if: type: function name: showMonitoringSection @@ -447,12 +446,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 @@ -533,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 @@ -562,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 1ed0a60472..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) @@ -552,8 +553,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') @@ -633,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') @@ -693,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') @@ -763,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') @@ -1256,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, @@ -1301,7 +1360,6 @@ export const useFunc = (model) => { isConfigMapTypeValueFrom, isSecretTypeValueFrom, onValueFromChange, - isEqualToValueFromType, onNamespaceChange, // Autoscaler functions isConsole, @@ -1326,5 +1384,9 @@ export const useFunc = (model) => { setValueFromDbDetails, isRancherManaged, onTriggerChange, + onEnvArrayChange, + initEnvArray, + isEqualToTemp, + initMonitoring, } } 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'], }, }, )