Skip to content

Commit d40cb2b

Browse files
committed
Merge branch 'env-var-fixes' into 'main'
fixing new environment variable table behavior See merge request weblogic-cloud/weblogic-toolkit-ui!259
2 parents 70455fc + f0671b7 commit d40cb2b

File tree

10 files changed

+126
-86
lines changed

10 files changed

+126
-86
lines changed

electron/app/locales/en/webui.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,8 @@
841841
"domain-design-no-secrets-message": "No additional model secrets found.",
842842
"domain-design-no-secrets-add-remove-message": "No additional external model secrets found. Please add secrets for any secret references in the external model that are not already handled in other parts of this page.",
843843

844-
"domain-design-domain-env-var-title": "Domain-Wide Environment Variables",
844+
"domain-design-domain-env-var-override-label": "Override Existing Environment Variable Values",
845+
"domain-design-domain-env-var-override-help": "Other fields in the Domain-Wide Server Settings use the JAVA_OPTIONS and USER_MEM_ARGS environment variables. By default, any value for those variables in the table below are appended to the existing values. Enabling this override switch will change that behavior to cause the value specified in the table to overwrite any existing values.",
845846
"domain-design-domain-env-var-table-aria-label": "Domain-Wide Environment Variables Table",
846847
"domain-design-domain-env-var-name-header": "Environment Variable Name",
847848
"domain-design-domain-env-var-value-header": "Environment Variable Value",

webui/src/js/models/k8s-domain-definition.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ define(['knockout', 'utils/observable-properties', 'utils/common-utilities', 'ut
161161
//
162162
this.domainNodeSelector = props.createListProperty(['uid', 'name', 'value']);
163163
this.serverPodEnvironmentVariables = props.createListProperty(['uid', 'name', 'value']).persistByKey('uid');
164+
this.serverPodEnvironmentVariablesOverrideOtherSettings = props.createProperty(false);
164165

165166
// update the secrets list when the uid changes.
166167
this.uid.observable.subscribe(() => {

webui/src/js/utils/aux-image-helper.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@ define(['models/wkt-project', 'utils/wkt-logger'],
1010
function AuxImageHelper() {
1111

1212
this.supportsDomainCreationImages = () => {
13-
return project.settings.targetDomainLocation.value === 'pv' && this.wkoVersion41OrHigher();
13+
if (project.settings.targetDomainLocation.value === 'pv') {
14+
if (project.settings.wdtTargetType.value === 'wko') {
15+
return this.wkoVersion41OrHigher();
16+
} else {
17+
return this.v8oVersion162OrHigher();
18+
}
19+
}
20+
return false;
1421
};
1522

1623
this.wkoVersion41OrHigher = () => {
@@ -23,6 +30,15 @@ define(['models/wkt-project', 'utils/wkt-logger'],
2330
return result;
2431
};
2532

33+
this.v8oVersion162OrHigher = () => {
34+
let result = true;
35+
if (project.vzInstall.actualInstalledVersion.hasValue() &&
36+
window.api.utils.compareVersions(project.vzInstall.actualInstalledVersion.value, '1.6.2') < 0) {
37+
result = false;
38+
}
39+
return result;
40+
};
41+
2642
this.domainUsesJRF = () => {
2743
return project.image.useAuxImage.value && project.k8sDomain.domainType.value !== 'WLS' &&
2844
project.k8sDomain.domainType.value !== 'RestrictedJRF';

webui/src/js/utils/k8s-domain-resource-generator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function(project, K8sDomainV8ResourceGenerator, K8sDomainV9ResourceGenerator, K8
3131
generator = new K8sDomainV8ResourceGenerator();
3232
} else {
3333
wktLogger.debug('Using operator version %s to create domain resource generator V9', operatorVersion);
34-
generator = new K8sDomainV9ResourceGenerator(operatorVersion);
34+
generator = new K8sDomainV9ResourceGenerator();
3535
}
3636
return generator;
3737
}

webui/src/js/utils/k8s-domain-v8-resource-generator.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,16 @@ function(project, K8sDomainConfigMapGenerator, jsYaml, i18n) {
176176
if (!serverPod) {
177177
serverPod = {};
178178
}
179-
serverPod.env = [];
179+
if (!Array.isArray(serverPod.env)) {
180+
serverPod.env = [];
181+
}
180182
this.project.k8sDomain.serverPodEnvironmentVariables.value.forEach(envVar => {
181-
serverPod.env.push({ name: envVar.name, value: envVar.value });
183+
const existingEnvEntry = serverPod.env.find(envEntry => envEntry.name === envVar.name);
184+
if (existingEnvEntry) {
185+
existingEnvEntry.value = this._getEnvVarValue(existingEnvEntry, envVar.value);
186+
} else {
187+
serverPod.env.push({ name: envVar.name, value: envVar.value });
188+
}
182189
});
183190
}
184191

@@ -264,6 +271,13 @@ function(project, K8sDomainConfigMapGenerator, jsYaml, i18n) {
264271
}
265272
return result;
266273
}
274+
275+
_getEnvVarValue(envEntry, envVarValue) {
276+
if (envEntry && !project.k8sDomain.serverPodEnvironmentVariablesOverrideOtherSettings.value) {
277+
return `${envEntry.value} ${envVarValue}`;
278+
}
279+
return envVarValue;
280+
}
267281
}
268282

269283
function usingExistingPrimaryImage() {

webui/src/js/utils/k8s-domain-v9-resource-generator.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ function(project, K8sDomainConfigMapGenerator, jsYaml, i18n, auxImageHelper) {
1313
const DEFAULT_AUX_IMAGE_WDT_MODEL_HOME = '/auxiliary/models';
1414

1515
class K8sDomainV9ResourceGenerator {
16-
constructor(operatorVersion) {
16+
constructor() {
1717
this.project = project;
18-
this.operatorVersion = operatorVersion;
1918
this.k8sConfigMapGenerator = new K8sDomainConfigMapGenerator();
2019
}
2120

@@ -284,9 +283,16 @@ function(project, K8sDomainConfigMapGenerator, jsYaml, i18n, auxImageHelper) {
284283
if (!serverPod) {
285284
serverPod = {};
286285
}
287-
serverPod.env = [];
286+
if (!Array.isArray(serverPod.env)) {
287+
serverPod.env = [];
288+
}
288289
this.project.k8sDomain.serverPodEnvironmentVariables.value.forEach(envVar => {
289-
serverPod.env.push({ name: envVar.name, value: envVar.value });
290+
const existingEnvEntry = serverPod.env.find(envEntry => envEntry.name === envVar.name);
291+
if (existingEnvEntry) {
292+
existingEnvEntry.value = this._getEnvVarValue(existingEnvEntry, envVar.value);
293+
} else {
294+
serverPod.env.push({ name: envVar.name, value: envVar.value });
295+
}
290296
});
291297
}
292298

@@ -456,6 +462,13 @@ function(project, K8sDomainConfigMapGenerator, jsYaml, i18n, auxImageHelper) {
456462
return pv;
457463
}
458464

465+
_getEnvVarValue(envEntry, envVarValue) {
466+
if (envEntry && !project.k8sDomain.serverPodEnvironmentVariablesOverrideOtherSettings.value) {
467+
return `${envEntry.value} ${envVarValue}`;
468+
}
469+
return envVarValue;
470+
}
471+
459472
usingDomainCreationImage() {
460473
return auxImageHelper.supportsDomainCreationImages() && this.project.image.useAuxImage.value;
461474
}

webui/src/js/viewModels/domain-design-view.js

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -460,15 +460,11 @@ function (project, accUtils, utils, ko, i18n, screenUtils, BufferingDataProvider
460460
this.clustersEditRow({ rowKey: null });
461461
};
462462

463-
this.generateNewClusterName = () => {
464-
return utils.generateNewName(this.project.k8sDomain.clusters.observable,
465-
'name', 'new-cluster');
466-
};
467-
468463
this.handleAddCluster = () => {
469464
const clusterToAdd = {
470465
uid: utils.getShortUuid(),
471-
name: this.generateNewClusterName(),
466+
name: utils.generateNewName(this.project.k8sDomain.clusters.observable,
467+
'name', 'new-cluster'),
472468
// In the case of Domain in PV where the user is adding a cluster definition
473469
// without running PrepareModel, we have no information on the cluster size
474470
// so just set replicas to zero and maxServers to the max value possible.
@@ -533,15 +529,11 @@ function (project, accUtils, utils, ko, i18n, screenUtils, BufferingDataProvider
533529
this.project.k8sDomain.externalProperties.observable,
534530
{keyAttributes: 'uid', sortComparators: externalPropertyComparators}));
535531

536-
this.generateNewExternalPropertyName = () => {
537-
return utils.generateNewName(this.project.k8sDomain.externalProperties.observable,
538-
'Name', 'existing-model-variable');
539-
};
540-
541532
this.handleAddExternalProperty = () => {
542533
const propertyToAdd = {
543534
uid: utils.getShortUuid(),
544-
Name: this.generateNewExternalPropertyName(),
535+
Name: utils.generateNewName(this.project.k8sDomain.externalProperties.observable,
536+
'Name', 'existing-model-variable'),
545537
Override: undefined
546538
};
547539
this.project.k8sDomain.externalProperties.addNewItem(propertyToAdd);
@@ -579,15 +571,11 @@ function (project, accUtils, utils, ko, i18n, screenUtils, BufferingDataProvider
579571
return !auxImageHelper.projectUsingExternalImageContainingModel();
580572
});
581573

582-
this.generateNewSecretName = () => {
583-
return utils.generateNewName(this.project.k8sDomain.secrets.observable,
584-
'name', 'existing-model-secret');
585-
};
586-
587574
this.handleAddSecret = () => {
588575
const secretToAdd = {
589576
uid: utils.getShortUuid(),
590-
name: this.generateNewSecretName(),
577+
name: utils.generateNewName(this.project.k8sDomain.secrets.observable,
578+
'name', 'existing-model-secret'),
591579
username: '',
592580
password: '',
593581
};

webui/src/js/viewModels/vz-component-page.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
* Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
55
*/
66
define(['accUtils', 'knockout', 'ojs/ojcorerouter', 'ojs/ojmodulerouter-adapter', 'ojs/ojarraydataprovider',
7-
'utils/vz-component-deployer', 'utils/vz-component-undeployer', 'utils/i18n',
7+
'utils/vz-component-deployer', 'utils/vz-component-undeployer', 'utils/i18n', 'utils/aux-image-helper',
88
'utils/wdt-preparer', 'ojs/ojarraytreedataprovider', 'models/wkt-project', 'ojs/ojtreeview'],
99
function(accUtils, ko, CoreRouter, ModuleRouterAdapter, ArrayDataProvider, vzComponentDeployer,
10-
vzComponentUndeployer, i18n, wdtPreparer) {
10+
vzComponentUndeployer, i18n, auxImageHelper, wdtPreparer) {
1111
function VerrazzanoComponentViewModel(args) {
1212

1313
this.connected = () => {
@@ -25,6 +25,8 @@ function(accUtils, ko, CoreRouter, ModuleRouterAdapter, ArrayDataProvider, vzCom
2525
this.disableDeployComponent = ko.observable(false);
2626
this.disableUndeployComponent = ko.observable(false);
2727

28+
this.showPrepareModel = ko.computed(auxImageHelper.projectHasModel);
29+
2830
this.prepareModel = () => {
2931
wdtPreparer.startPrepareModel().then();
3032
};

webui/src/js/views/domain-design-view.html

Lines changed: 52 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -738,54 +738,6 @@ <h6 class="wkt-subheading"><oj-bind-text value="[[labelMapper('encryption-secret
738738
</div>
739739
</oj-bind-if>
740740

741-
<div class="oj-panel">
742-
<h6 class="wkt-subheading"><oj-bind-text value="[[labelMapper('domain-env-var-title')]]"></oj-bind-text></h6>
743-
<oj-table id="server-pod-env-vars-table"
744-
class="wkt-domain-secrets-table"
745-
:aria-label="[[labelMapper('domain-env-var-table-aria-label')]]"
746-
data="[[environmentVariablesDP]]"
747-
display="grid"
748-
horizontal-grid-visible="enabled"
749-
vertical-grid-visible="enabled"
750-
edit-mode="rowEdit"
751-
layout="fixed"
752-
columns='[[environmentVariablesColumnMetadata]]'>
753-
<template slot="rowTemplate" data-oj-as="row">
754-
<tr>
755-
<oj-bind-if test='[[row.mode=="navigation"]]'>
756-
<td><oj-bind-text value="[[row.data.name]]"></oj-bind-text></td>
757-
<td><oj-bind-text value="[[row.data.value]]"></oj-bind-text></td>
758-
</oj-bind-if>
759-
<oj-bind-if test='[[row.mode=="edit"]]'>
760-
<td><oj-input-text value="{{row.data.name}}"></oj-input-text></td>
761-
<td><oj-input-text value="{{row.data.value}}"></oj-input-text></td>
762-
</oj-bind-if>
763-
<td>
764-
<oj-button display="icons"
765-
chroming="borderless"
766-
on-oj-action="[[handleDeleteDomainEnvironmentVariable]]">
767-
<span slot="endIcon" class="oj-ux-ico-trash"></span>
768-
<oj-bind-text value="[[labelMapper('domain-delete-env-var-tooltip')]]"></oj-bind-text>
769-
</oj-button>
770-
</td>
771-
</tr>
772-
</template>
773-
<template slot="headerTemplate" data-oj-as="header">
774-
<oj-button display="icons"
775-
chroming="borderless"
776-
on-oj-action="[[handleAddDomainEnvironmentVariable]]">
777-
<span slot="endIcon" class="oj-ux-ico-plus"></span>
778-
<oj-bind-text value="[[labelMapper('domain-add-env-var-tooltip')]]"></oj-bind-text>
779-
</oj-button>
780-
</template>
781-
<template slot="noData">
782-
<div class="oj-table-body-message">
783-
<oj-bind-text value="[[labelMapper('domain-no-env-vars-message')]]"></oj-bind-text>
784-
</div>
785-
</template>
786-
</oj-table>
787-
</div>
788-
789741
<div class="oj-panel">
790742
<h6 class="wkt-subheading"><oj-bind-text value="[[labelMapper('introspection-title')]]"></oj-bind-text></h6>
791743
<oj-form-layout max-columns="2" direction="row">
@@ -857,12 +809,63 @@ <h6 class="wkt-subheading"><oj-bind-text value="[[labelMapper('domain-server-tit
857809
</oj-input-text>
858810
</oj-form-layout>
859811

860-
<oj-form-layout>
812+
<oj-form-layout max-columns="2" direction="row">
861813
<oj-text-area label-hint="[[labelMapper('additional-java-options-label')]]"
862814
value="{{project.k8sDomain.additionalArguments.observable}}"
863815
help.instruction="[[labelMapper('additional-java-options-help')]]">
864816
</oj-text-area>
865817
</oj-form-layout>
818+
819+
<oj-form-layout max-columns="1" direction="row">
820+
<oj-switch label-hint="[[labelMapper('domain-env-var-override-label')]]"
821+
value="{{project.k8sDomain.serverPodEnvironmentVariablesOverrideOtherSettings.observable}}"
822+
help.instruction="[[labelMapper('domain-env-var-override-help')]]">
823+
</oj-switch>
824+
</oj-form-layout>
825+
<oj-table id="server-pod-env-vars-table"
826+
class="wkt-domain-secrets-table"
827+
:aria-label="[[labelMapper('domain-env-var-table-aria-label')]]"
828+
data="[[environmentVariablesDP]]"
829+
display="grid"
830+
horizontal-grid-visible="enabled"
831+
vertical-grid-visible="enabled"
832+
edit-mode="rowEdit"
833+
layout="fixed"
834+
columns='[[environmentVariablesColumnMetadata]]'>
835+
<template slot="rowTemplate" data-oj-as="row">
836+
<tr>
837+
<oj-bind-if test='[[row.mode=="navigation"]]'>
838+
<td><oj-bind-text value="[[row.data.name]]"></oj-bind-text></td>
839+
<td><oj-bind-text value="[[row.data.value]]"></oj-bind-text></td>
840+
</oj-bind-if>
841+
<oj-bind-if test='[[row.mode=="edit"]]'>
842+
<td><oj-input-text value="{{row.data.name}}"></oj-input-text></td>
843+
<td><oj-input-text value="{{row.data.value}}"></oj-input-text></td>
844+
</oj-bind-if>
845+
<td>
846+
<oj-button display="icons"
847+
chroming="borderless"
848+
on-oj-action="[[handleDeleteDomainEnvironmentVariable]]">
849+
<span slot="endIcon" class="oj-ux-ico-trash"></span>
850+
<oj-bind-text value="[[labelMapper('domain-delete-env-var-tooltip')]]"></oj-bind-text>
851+
</oj-button>
852+
</td>
853+
</tr>
854+
</template>
855+
<template slot="headerTemplate" data-oj-as="header">
856+
<oj-button display="icons"
857+
chroming="borderless"
858+
on-oj-action="[[handleAddDomainEnvironmentVariable]]">
859+
<span slot="endIcon" class="oj-ux-ico-plus"></span>
860+
<oj-bind-text value="[[labelMapper('domain-add-env-var-tooltip')]]"></oj-bind-text>
861+
</oj-button>
862+
</template>
863+
<template slot="noData">
864+
<div class="oj-table-body-message">
865+
<oj-bind-text value="[[labelMapper('domain-no-env-vars-message')]]"></oj-bind-text>
866+
</div>
867+
</template>
868+
</oj-table>
866869
</div>
867870

868871
<div class="oj-panel">

webui/src/js/views/vz-component-page.html

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
</li>
1616
</template>
1717
</oj-tab-bar>
18-
<oj-button id="prepareModelButton"
19-
chroming="callToAction"
20-
on-oj-action="[[prepareModel]]"
21-
:title="[[anyLabelMapper('model-page-hints-prepareModel')]]">
22-
<span>
23-
<oj-bind-text value="[[anyLabelMapper('model-page-button-prepareModel')]]"></oj-bind-text>
24-
</span>
25-
</oj-button>
18+
<oj-bind-if test="[[showPrepareModel]]">
19+
<oj-button id="prepareModelButton"
20+
chroming="callToAction"
21+
on-oj-action="[[prepareModel]]"
22+
:title="[[anyLabelMapper('model-page-hints-prepareModel')]]">
23+
<span>
24+
<oj-bind-text value="[[anyLabelMapper('model-page-button-prepareModel')]]"></oj-bind-text>
25+
</span>
26+
</oj-button>
27+
</oj-bind-if>
2628
<oj-button id="deployComponentButton"
2729
disabled="[[disableDeployComponent]]"
2830
chroming="callToAction"

0 commit comments

Comments
 (0)