From d27795dd0c6d1af8f19de09e90de54a675319b5c Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Tue, 28 Feb 2023 16:53:07 -0600 Subject: [PATCH 1/3] Provide a list of server and cluster hosts for ingress rule dialog --- electron/app/js/wdtPrepareModel.js | 12 +++++- webui/src/js/models/k8s-domain-definition.js | 38 +++++++++++++++++++ .../vz-ingress-trait-rule-edit-dialog.js | 36 +++++++++++++++--- .../vz-ingress-trait-rule-edit-dialog.html | 11 +++--- 4 files changed, 85 insertions(+), 12 deletions(-) diff --git a/electron/app/js/wdtPrepareModel.js b/electron/app/js/wdtPrepareModel.js index d0acb6500..b8b227e07 100644 --- a/electron/app/js/wdtPrepareModel.js +++ b/electron/app/js/wdtPrepareModel.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -291,6 +291,16 @@ function formatResultsData(jsonContent) { } domain['clusters'] = clustersResult; + const servers = jsonContent['servers'] || []; + const serversResult = []; + for (const [serverName] of Object.entries(servers)) { + const serverResult = { + serverName: serverName + }; + serversResult.push(serverResult); + } + domain['servers'] = serversResult; + results['domain'] = domain; return results; } diff --git a/webui/src/js/models/k8s-domain-definition.js b/webui/src/js/models/k8s-domain-definition.js index 57eaf262e..1a96a4f48 100644 --- a/webui/src/js/models/k8s-domain-definition.js +++ b/webui/src/js/models/k8s-domain-definition.js @@ -75,6 +75,11 @@ define(['knockout', 'utils/observable-properties', 'utils/common-utilities', 'ut ]; this.clusters = props.createListProperty(this.clusterKeys).persistByKey('uid'); + this.serverKeys = [ + 'uid', 'name' + ]; + this.servers = props.createListProperty(this.serverKeys).persistByKey('uid'); + this.modelConfigMapName = props.createProperty('${1}-config-map', this.uid.observable); this.modelConfigMapName.addValidator(...validationHelper.getK8sNameValidators()); @@ -219,6 +224,21 @@ define(['knockout', 'utils/observable-properties', 'utils/common-utilities', 'ut return remove; }); } + + if (domain && Array.isArray(domain.servers)) { + domain.servers.forEach(server => this.setServerRow(server)); + // Remove any servers that are no longer in the model + this.servers.observable.remove(server => { + let remove = true; + for (const prepareModelServer of domain.servers) { + if (prepareModelServer.serverName === server.name) { + remove = false; + break; + } + } + return remove; + }); + } }; this.setClusterRow = (prepareModelCluster) => { @@ -245,6 +265,24 @@ define(['knockout', 'utils/observable-properties', 'utils/common-utilities', 'ut } }; + this.setServerRow = (prepareModelServer) => { + let server; + for (const row of this.servers.observable()) { + if (row.name === prepareModelServer.serverName) { + server = row; + break; + } + } + if (server) { + this.servers.observable.replace(server, server); + } else { + this.servers.addNewItem({ + uid: utils.getShortUuid(), + name: prepareModelServer.serverName + }); + } + }; + this.handlePrepareModelSecrets = (secrets) => { if (secrets && secrets.length) { wktLogger.debug('handlePrepareModelSecrets() working on %d secrets', secrets.length); diff --git a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js index 391d65727..88384c7ac 100644 --- a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js +++ b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js @@ -1,15 +1,17 @@ /** * @license - * Copyright (c) 2022, Oracle and/or its affiliates. + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'ojs/ojconverter-number', 'utils/common-utilities', 'utils/wkt-logger', - 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', - 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider, ojConverterNumber, utils, wktLogger) { +define(['accUtils', 'knockout', 'utils/i18n', 'models/wkt-project', 'utils/observable-properties', + 'utils/validation-helper', 'ojs/ojarraydataprovider', 'ojs/ojconverter-number', 'utils/common-utilities', + 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', + 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], +function(accUtils, ko, i18n, project, props, validationHelper, + ArrayDataProvider, ojConverterNumber, utils, wktLogger) { + function VerrazzanoIngressTraitRuleEditDialogModel(args) { const DIALOG_SELECTOR = '#vzIngressTraitEditRuleDialog'; @@ -181,6 +183,28 @@ function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider, ojConve } ]; + this.destinationHostNames = ko.computed(() => { + let options = []; + const domainName = project.wdtModel.domainName(); + + const clusters = project.k8sDomain.clusters.observable(); + for (const cluster of clusters) { + const clusterHostName = utils.toLegalK8sName(domainName + '-cluster-' + cluster.name); + options.push( { id : cluster.uid, value: clusterHostName, text: clusterHostName}); + } + + const servers = project.k8sDomain.servers.observable(); + for (const server of servers) { + const serverHostName = utils.toLegalK8sName(domainName + '-' + server.name); + options.push( { id : server.uid, value: serverHostName, text: serverHostName}); + } + + options.sort(function(a, b) { + return a.text.localeCompare(b.text); + }); + return options; + }); + this.pathTypeOptions = [ { value: 'prefix', label: this.labelMapper('path-type-prefix-label') }, { value: 'exact', label: this.labelMapper('path-type-exact-label') }, diff --git a/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html b/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html index 34d73a4db..252ea43cd 100644 --- a/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html +++ b/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html @@ -1,5 +1,5 @@ @@ -76,10 +76,11 @@
- - + + Date: Wed, 1 Mar 2023 14:58:49 -0600 Subject: [PATCH 2/3] Use template for string assignment --- webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js index 88384c7ac..c5b822022 100644 --- a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js +++ b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js @@ -189,7 +189,7 @@ function(accUtils, ko, i18n, project, props, validationHelper, const clusters = project.k8sDomain.clusters.observable(); for (const cluster of clusters) { - const clusterHostName = utils.toLegalK8sName(domainName + '-cluster-' + cluster.name); + const clusterHostName = utils.toLegalK8sName(`${domainName}-cluster-${cluster.name}`); options.push( { id : cluster.uid, value: clusterHostName, text: clusterHostName}); } From 0cf03ed0ce6eb77c910f70eb01c074a8c280b91c Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Wed, 1 Mar 2023 15:33:56 -0600 Subject: [PATCH 3/3] Use template for string assignment --- webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js index c5b822022..52d23458d 100644 --- a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js +++ b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js @@ -195,7 +195,7 @@ function(accUtils, ko, i18n, project, props, validationHelper, const servers = project.k8sDomain.servers.observable(); for (const server of servers) { - const serverHostName = utils.toLegalK8sName(domainName + '-' + server.name); + const serverHostName = utils.toLegalK8sName(`${domainName}-${server.name}`); options.push( { id : server.uid, value: serverHostName, text: serverHostName}); }