Skip to content

Commit a8892d4

Browse files
committed
cleaning up ingress actions validation
1 parent 943981e commit a8892d4

9 files changed

+183
-164
lines changed

electron/app/js/userSettings.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ let _userSettingsFileName;
5454
// "dividers": {
5555
// "modelMain": 0.68,
5656
// "modelRight": 0.48
57-
// }
57+
// },
58+
// "navCollapsed": true
5859
// }
5960
// }
6061
//
@@ -185,7 +186,7 @@ function getDividerLocations() {
185186

186187
function setNavigationCollapsed(collapsed) {
187188
const window = getOrCreateWindowSettings();
188-
window['navCollapsed'] = collapsed;
189+
window['navCollapsed'] = Boolean(collapsed);
189190
}
190191

191192
function getNavigationCollapsed() {

electron/app/locales/en/webui.json

+6
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,10 @@
566566
"ingress-design-ingress-route-annotation-add-row": "Add Annotation",
567567
"ingress-design-ingress-route-annotation-delete-row": "Delete Annotation",
568568

569+
"ingress-design-ingress-route-name-field-validation-error": "Route {{routeName}}",
570+
"ingress-design-ingress-route-field-validation-error": "Route {{routeName}}, Field \"{{fieldName}}\"",
571+
"ingress-design-ingress-route-field-tls-config-error": "The route {{routeName}} has the {{fieldName}} field enabled but the {{specifyTlsSecretFieldName}} field is disabled.",
572+
569573
"ingress-design-ingress-tls-secret-title": "TLS Secret for Ingress Routes",
570574
"ingress-design-specify-tls-secret-label": "Use Ingress TLS Secret",
571575
"ingress-design-specify-tls-secret-help": "To secure traffic to the ingress controller with TLS, specify the secret that contains the TLS private key and certificate. The Ingress resource only supports a single TLS port, 443, and assumes TLS termination at the ingress (traffic between the ingress and the service and its pods is in clear text).",
@@ -934,6 +938,8 @@
934938
"validation-helper-ingress-annotation-hint": "Enter a valid annotation name value pair",
935939
"validation-helper-ingress-annotation-message-detail": "The annotation ({{annotation}}) must be a name value pair separate by colon",
936940

941+
"validation-error-dialog-default-title": "Unknown action failed",
942+
937943
"vz-config-title": "Kubernetes Client Configuration for Verrazzano",
938944
"vz-config-coming-soon": "Coming Soon...",
939945
"vz-application-title": "Verrazzano Application",

webui/src/js/models/ingress-definition.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ define(['knockout', 'utils/observable-properties', 'utils/validation-helper'],
3434
this.dockerRegSecretUserId = props.createProperty('').asCredential();
3535
this.dockerRegSecretUserPwd = props.createProperty('').asCredential();
3636
this.dockerRegSecretUserEmail = props.createProperty('');
37+
this.dockerRegSecretUserEmail.addValidator(...validationHelper.getEmailAddressValidators());
38+
3739
this.createDockerRegSecret = props.createProperty(false);
3840
this.specifyDockerRegSecret = props.createProperty(false);
3941
this.specifyIngressTLSSecret = props.createProperty(false);
@@ -46,10 +48,11 @@ define(['knockout', 'utils/observable-properties', 'utils/validation-helper'],
4648

4749
this.opensslExecutableFilePath = props.createProperty(window.api.k8s.getOpenSSLFilePath());
4850

49-
this.validators = { TargetPortValidator: validationHelper.getPortNumberValidators(),
51+
this.validators = {
52+
targetPortValidator: validationHelper.getPortNumberValidators(),
5053
k8sNameValidator: validationHelper.getK8sNameValidators(),
51-
VirtualHostNameValidator: validationHelper.getHostNameValidators(),
52-
IngressPathValidator: validationHelper.getIngressPathValidators()
54+
virtualHostNameValidator: validationHelper.getHostNameValidators(),
55+
ingressPathValidator: validationHelper.getIngressPathValidators()
5356
};
5457

5558
this.voyagerProvider = props.createProperty('OKE');

webui/src/js/utils/ingress-controller-installer.js

+12-28
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ function(project, wktConsole, k8sHelper, i18n, projectIo, dialogHelper, validati
228228
if (ingressControllerProvider === 'traefik' && dockerSecretName) {
229229
args['deployment.imagePullSecrets[0].name'] = dockerSecretName;
230230
}
231-
232231
if (ingressControllerProvider === 'traefik' || ingressControllerProvider === 'nginx') {
233232
args['kubernetes.namespaces'] = '{' + ingressControllerNamespace + ',' + this.project.k8sDomain.kubernetesNamespace.value + '}';
234233
}
@@ -256,13 +255,8 @@ function(project, wktConsole, k8sHelper, i18n, projectIo, dialogHelper, validati
256255
await window.api.ipc.invoke('show-error-message', errTitle, errMessage);
257256
return Promise.resolve(false);
258257
}
259-
260258
}
261-
262-
263259
}
264-
265-
266260
} catch(err) {
267261
dialogHelper.closeBusyDialog();
268262
throw err;
@@ -271,7 +265,6 @@ function(project, wktConsole, k8sHelper, i18n, projectIo, dialogHelper, validati
271265
}
272266
};
273267

274-
275268
this.getHelmOptions = () => {
276269
const options = {};
277270
if (this.project.kubectl.kubeConfig.value) {
@@ -303,40 +296,31 @@ function(project, wktConsole, k8sHelper, i18n, projectIo, dialogHelper, validati
303296
validationHelper.validateRequiredField(this.project.ingress.ingressControllerProvider.value));
304297

305298
if (this.project.ingress.installIngressController.value === true) {
306-
307299
validationObject.addField('ingress-design-ingress-namespace-label',
308-
validationHelper.validateRequiredField(this.project.ingress.ingressControllerNamespace.value));
300+
this.project.ingress.ingressControllerNamespace.validate(true));
309301
validationObject.addField('ingress-design-ingress-name-label',
310-
validationHelper.validateRequiredField(this.project.ingress.ingressControllerName.value));
302+
this.project.ingress.ingressControllerName.validate(true));
311303

312304
const ingressControllerProvider = this.project.ingress.ingressControllerProvider.value;
313-
314305
if (ingressControllerProvider === 'traefik' || ingressControllerProvider === 'voyager' ) {
315-
316306
if (this.project.ingress.specifyDockerRegSecret.value === true) {
317307
validationObject.addField('ingress-design-ingress-docker-reg-secret-name',
318-
validationHelper.validateRequiredField(this.project.ingress.dockerRegSecretName.value));
319-
}
320-
321-
if (this.project.ingress.createDockerRegSecret.value == true) {
322-
validationObject.addField('ingress-design-ingress-docker-reg-secret-useremail',
323-
validationHelper.validateRequiredField(this.project.ingress.dockerRegSecretUserEmail.value));
324-
validationObject.addField('ingress-design-ingress-docker-reg-secret-useremail',
325-
validationHelper.validateEmailAddress(this.project.ingress.dockerRegSecretUserEmail.value));
326-
validationObject.addField('ingress-design-ingress-docker-reg-secret-userid',
327-
validationHelper.validateRequiredField(this.project.ingress.dockerRegSecretUserId.value));
328-
validationObject.addField('ingress-design-ingress-docker-reg-secret-userpwd',
329-
validationHelper.validateRequiredField(this.project.ingress.dockerRegSecretUserPwd.value));
308+
this.project.ingress.dockerRegSecretName.validate(true));
309+
310+
if (this.project.ingress.createDockerRegSecret.value === true) {
311+
validationObject.addField('ingress-design-ingress-docker-reg-secret-useremail',
312+
this.project.ingress.dockerRegSecretUserEmail.validate(true));
313+
validationObject.addField('ingress-design-ingress-docker-reg-secret-userid',
314+
validationHelper.validateRequiredField(this.project.ingress.dockerRegSecretUserId.value));
315+
validationObject.addField('ingress-design-ingress-docker-reg-secret-userpwd',
316+
validationHelper.validateRequiredField(this.project.ingress.dockerRegSecretUserPwd.value));
317+
}
330318
}
331-
332319
}
333320
}
334-
335321
return validationObject;
336322
};
337-
338323
}
339-
340324
return new IngressInstaller();
341325
});
342326

webui/src/js/utils/ingress-resource-generator.js

+15-14
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ define(['models/wkt-project', 'js-yaml'],
1919
for (const route of this.project.ingress.ingressRoutes.value) {
2020
switch (this.project.ingress.ingressControllerProvider.value) {
2121
case 'voyager':
22-
ingressRouteData = this.createVoyagerRoutesAsYaml(route, this.project);
22+
ingressRouteData = this.createVoyagerRoutesAsYaml(route);
2323
break;
2424

2525
case 'traefik':
26-
ingressRouteData = this.createTraefikRoutesAsYaml(route, this.project);
26+
ingressRouteData = this.createTraefikRoutesAsYaml(route);
2727
break;
2828

2929
case 'nginx':
30-
ingressRouteData = this.createNginxRoutesAsYaml(route, this.project);
30+
ingressRouteData = this.createNginxRoutesAsYaml(route);
3131
break;
3232
}
3333
lines.push(ingressRouteData, '');
@@ -39,7 +39,7 @@ define(['models/wkt-project', 'js-yaml'],
3939
return lines;
4040
}
4141

42-
createVoyagerRoutesAsYaml(item, wktProject) {
42+
createVoyagerRoutesAsYaml(item) {
4343
const namespace = item['targetServiceNameSpace'] || 'default';
4444

4545
const result = {
@@ -67,21 +67,21 @@ define(['models/wkt-project', 'js-yaml'],
6767
]
6868
}
6969
};
70-
this.addTlsSpec(result, item, wktProject);
70+
this.addTlsSpec(result, item);
7171
this.addVirtualHost(result, item);
7272
this.addAnnotations(result, item);
7373
return jsYaml.dump(result);
7474
}
7575

76-
createNginxRoutesAsYaml(item, wktProject) {
77-
return this._createStandardRoutesAsYaml(item, wktProject);
76+
createNginxRoutesAsYaml(item) {
77+
return this._createStandardRoutesAsYaml(item);
7878
}
7979

80-
createTraefikRoutesAsYaml(item, wktProject) {
81-
return this._createStandardRoutesAsYaml(item, wktProject);
80+
createTraefikRoutesAsYaml(item) {
81+
return this._createStandardRoutesAsYaml(item);
8282
}
8383

84-
_createStandardRoutesAsYaml(item, wktProject) {
84+
_createStandardRoutesAsYaml(item) {
8585
const namespace = item['targetServiceNameSpace'] || 'default';
8686

8787
const result = {
@@ -114,16 +114,17 @@ define(['models/wkt-project', 'js-yaml'],
114114
]
115115
}
116116
};
117-
this.addTlsSpec(result, item, wktProject);
117+
this.addTlsSpec(result, item);
118118
this.addVirtualHost(result, item);
119119
this.addAnnotations(result, item);
120120
return jsYaml.dump(result);
121121
}
122122

123-
addTlsSpec(result, item, wktProject) {
124-
if (item && item['tlsEnabled'] === true) {
123+
addTlsSpec(result, item) {
124+
// If the Ingress TLS secret is not enabled, do not add the ingress TLS secret name even if it exists.
125+
if (this.project.ingress.specifyIngressTLSSecret.value && item && item['tlsEnabled'] === true) {
125126
if (!item['tlsSecretName']) {
126-
item['tlsSecretName'] = wktProject.ingress.ingressTLSSecretName.value;
127+
item['tlsSecretName'] = this.project.ingress.ingressTLSSecretName.value;
127128
}
128129

129130
const obj = { secretName: item['tlsSecretName'] };

0 commit comments

Comments
 (0)