diff --git a/api/http/handler/endpoints/endpoint_update.go b/api/http/handler/endpoints/endpoint_update.go index f632112b5..27e336437 100644 --- a/api/http/handler/endpoints/endpoint_update.go +++ b/api/http/handler/endpoints/endpoint_update.go @@ -89,6 +89,8 @@ func (handler *Handler) endpointUpdate(w http.ResponseWriter, r *http.Request) * return httperror.InternalServerError("Unable to find an environment with the specified identifier inside the database", err) } + updateEndpointProxy := shouldReloadTLSConfiguration(endpoint, &payload) + if payload.Name != nil { name := *payload.Name isUnique, err := handler.isNameUnique(name, endpoint.ID) @@ -104,8 +106,9 @@ func (handler *Handler) endpointUpdate(w http.ResponseWriter, r *http.Request) * } - if payload.URL != nil { + if payload.URL != nil && *payload.URL != endpoint.URL { endpoint.URL = *payload.URL + updateEndpointProxy = true } if payload.PublicURL != nil { @@ -179,6 +182,8 @@ func (handler *Handler) endpointUpdate(w http.ResponseWriter, r *http.Request) * } if endpoint.Type == portainer.AzureEnvironment { + updateEndpointProxy = true + credentials := endpoint.AzureCredentials if payload.AzureApplicationID != nil { credentials.ApplicationID = *payload.AzureApplicationID @@ -247,10 +252,7 @@ func (handler *Handler) endpointUpdate(w http.ResponseWriter, r *http.Request) * } } - if (payload.URL != nil && *payload.URL != endpoint.URL) || - (payload.TLS != nil && endpoint.TLSConfig.TLS != *payload.TLS) || - endpoint.Type == portainer.AzureEnvironment || - shouldReloadTLSConfiguration(endpoint, &payload) { + if updateEndpointProxy { handler.ProxyManager.DeleteEndpointProxy(endpoint.ID) _, err = handler.ProxyManager.CreateAndRegisterEndpointProxy(endpoint) if err != nil { @@ -291,6 +293,12 @@ func (handler *Handler) endpointUpdate(w http.ResponseWriter, r *http.Request) * } func shouldReloadTLSConfiguration(endpoint *portainer.Endpoint, payload *endpointUpdatePayload) bool { + + // If we change anything in the tls config then we need to reload the proxy + if payload.TLS != nil && endpoint.TLSConfig.TLS != *payload.TLS { + return true + } + // When updating Docker API environment, as long as TLS is true and TLSSkipVerify is false, // we assume that new TLS files have been uploaded and we need to reload the TLS configuration. if endpoint.Type != portainer.DockerEnvironment || diff --git a/app/docker/__module.js b/app/docker/__module.js index de09c8719..a5ef94fc9 100644 --- a/app/docker/__module.js +++ b/app/docker/__module.js @@ -34,7 +34,7 @@ angular.module('portainer.docker', ['portainer.app', reactModule]).config([ endpoint.Status = status; if (status === EnvironmentStatus.Down) { - throw new Error('Environment is unreachable.'); + throw new Error(`The environment named ${endpoint.Name} is unreachable.`); } await StateManager.updateEndpointState(endpoint); diff --git a/app/kubernetes/__module.js b/app/kubernetes/__module.js index 87df5e54d..a2e19f83c 100644 --- a/app/kubernetes/__module.js +++ b/app/kubernetes/__module.js @@ -53,7 +53,7 @@ angular.module('portainer.kubernetes', ['portainer.app', registriesModule, custo try { await getSelfSubjectAccessReview(endpoint.Id, 'default'); } catch (e) { - throw new Error('Environment is unreachable.'); + throw new Error(`The environment named ${endpoint.Name} is unreachable.`); } } catch (e) { let params = {};