@@ -94,10 +94,10 @@ export default {
9494 },
9595 { path: ' spec' , rules: [' backEndOrRules' ] },
9696 {
97- path: ' spec.defaultBackend.service.name' , rules: [' required ' ], translationKey: ' ingress.defaultBackend.targetService.label'
97+ path: ' spec.defaultBackend.service.name' , rules: [' defaultBackendNameRequired ' ], translationKey: ' ingress.defaultBackend.targetService.label'
9898 },
9999 {
100- path: ' spec.defaultBackend.service.port' , rules: [' portRequired ' , ' portRange' ], translationKey: ' ingress.defaultBackend.port.label'
100+ path: ' spec.defaultBackend.service.port' , rules: [' defaultBackendPortRequired ' , ' portRange' ], translationKey: ' ingress.defaultBackend.port.label'
101101 },
102102 { path: ' spec.tls.hosts' , rules: [' required' , ' wildcardHostname' ] }
103103 ],
@@ -156,8 +156,36 @@ export default {
156156 }
157157 };
158158
159+ const hasDefaultBackendService = () => {
160+ const backend = get (this .value ? .spec , this .value .defaultBackendPath );
161+
162+ return !! get (backend, this .value .serviceNamePath );
163+ };
164+
165+ const nameLabel = this .t (' ingress.defaultBackend.targetService.label' );
166+
167+ // Only enforce required on the default backend when a service is selected.
168+ // Selecting "None" means the user wants to remove the backend; willSave() handles cleanup.
169+ const defaultBackendNameRequired = (name ) => {
170+ if (hasDefaultBackendService () && ! name) {
171+ return this .t (' validation.required' , { key: nameLabel });
172+ }
173+ };
174+
175+ const defaultBackendPortRequired = (port ) => {
176+ if (! hasDefaultBackendService ()) {
177+ return ;
178+ }
179+
180+ return portRequired (port);
181+ };
182+
159183 return {
160- backEndOrRules, portRequired, portRange
184+ backEndOrRules,
185+ portRequired,
186+ portRange,
187+ defaultBackendNameRequired,
188+ defaultBackendPortRequired,
161189 };
162190 },
163191 tabErrors () {
@@ -176,17 +204,10 @@ export default {
176204 };
177205 },
178206 defaultBackendPathRules () {
179- const rulesExist = (this .value ? .spec ? .rules || []).length > 0 ;
180- const defaultBackendExist = !! this .value ? .spec ? .defaultBackend ? .service ;
181-
182- if (! rulesExist || defaultBackendExist) {
183- return {
184- name: this .fvGetAndReportPathRules (' spec.defaultBackend.service.name' ),
185- port: this .fvGetAndReportPathRules (' spec.defaultBackend.service.port' ),
186- };
187- }
188-
189- return { name: [], port: [] };
207+ return {
208+ name: this .fvGetAndReportPathRules (' spec.defaultBackend.service.name' ),
209+ port: this .fvGetAndReportPathRules (' spec.defaultBackend.service.port' ),
210+ };
190211 },
191212 serviceTargets () {
192213 return this .ingressHelper .findAndMapServiceTargets (this .services );
0 commit comments