diff --git a/java/code/src/com/suse/manager/webui/controllers/ProxyConfigurationController.java b/java/code/src/com/suse/manager/webui/controllers/ProxyConfigurationController.java index ae3beb7b6c3b..d56e7659551e 100644 --- a/java/code/src/com/suse/manager/webui/controllers/ProxyConfigurationController.java +++ b/java/code/src/com/suse/manager/webui/controllers/ProxyConfigurationController.java @@ -332,11 +332,11 @@ public String updateProxyConfiguration(Request request, Response response, User return result(response, ResultJson.success("Proxy configuration applied")); } catch (RhnRuntimeException e) { - LOG.error("Failed to apply proxy configuration to minion", e); + LOG.error("Failed to apply proxy configuration to minion", e); return internalServerError(response, e.getMessage()); } catch (RhnGeneralException e) { - LOG.error("Failed to apply proxy configuration to minion", e); + LOG.error("Failed to apply proxy configuration to minion", e); return badRequest(response, e.getErrorMessages()); } diff --git a/web/html/src/manager/minion/proxy/proxy-config.tsx b/web/html/src/manager/minion/proxy/proxy-config.tsx index a70491ea82d3..328c4ed84f6f 100644 --- a/web/html/src/manager/minion/proxy/proxy-config.tsx +++ b/web/html/src/manager/minion/proxy/proxy-config.tsx @@ -121,6 +121,15 @@ const imageNames = [ "registryTftpdURL", ]; +const tagMapping = { + registryBaseURL: "registryBaseTag", + registryHttpdURL: "registryHttpdTag", + registrySaltbrokerURL: "registrySaltbrokerTag", + registrySquidURL: "registrySquidTag", + registrySshURL: "registrySshTag", + registryTftpdURL: "registryTftpdTag", +}; + export function ProxyConfig({ serverId, isUyuni, parents, currentConfig, initFailMessage }: ProxyConfigProps) { const [messages, setMessages] = useState([]); const [loading, setLoading] = useState(false); @@ -150,11 +159,16 @@ export function ProxyConfig({ serverId, isUyuni, parents, currentConfig, initFai }); useEffect(() => { - imageNames.forEach((url) => { - if (currentConfig[url]) { - retrieveRegistryTags(currentConfig, url); - } - }); + if (currentConfig.sourceMode === SourceMode.RPM) { + //work-around to trigger validation for filled forms using RPM + retrieveRegistryTags(currentConfig, null); + } else { + imageNames.forEach((url) => { + if (currentConfig[url]) { + retrieveRegistryTags(currentConfig, url); + } + }); + } if (initFailMessage) { setSuccess(false); setMessages([initFailMessage]); @@ -352,18 +366,23 @@ export function ProxyConfig({ serverId, isUyuni, parents, currentConfig, initFai if (response?.success) { setErrors((prev) => ({ ...prev, [name]: [] })); - setTagOptions((prev) => ({ - ...prev, - [name]: response.data || [], - })); + setTagOptions((prev) => ({ ...prev, [name]: response.data || [] })); + + // Check if the current tag is still in the new options + const currentTag = newModel[tagMapping[name]]; + if (currentTag && !response.data.includes(currentTag)) { + setModel((prev) => ({ ...prev, [tagMapping[name]]: "" })); + } } else { const errorMessage = response?.messages?.join(", ") || "Validation Failed"; setErrors((prev) => ({ ...prev, [name]: errorMessage })); setTagOptions((prev) => ({ ...prev, [name]: [] })); + setModel((prev) => ({ ...prev, [tagMapping[name]]: "" })); } } catch (error) { setErrors((prev) => ({ ...prev, [name]: "Error during validation" })); setTagOptions((prev) => ({ ...prev, [name]: [] })); + setModel((prev) => ({ ...prev, [tagMapping[name]]: "" })); } };