mirror of https://github.com/portainer/portainer
fix(ACI): ACI UAC breaks when redeploying container with same name asone already existing EE-645 (#5030)
* add existing continer instance checking logic * modify response status code and err message * return json instead of plain text for err msg * Update api/http/proxy/factory/azure/containergroup.go * Update api/http/proxy/factory/azure/containergroup.go * Update api/http/proxy/factory/azure/containergroup.go Co-authored-by: Stéphane Busso <sbusso@users.noreply.github.com>pull/5051/head
parent
dcc77e50e5
commit
564bea7575
|
@ -23,6 +23,36 @@ func (transport *Transport) proxyContainerGroupRequest(request *http.Request) (*
|
||||||
}
|
}
|
||||||
|
|
||||||
func (transport *Transport) proxyContainerGroupPutRequest(request *http.Request) (*http.Response, error) {
|
func (transport *Transport) proxyContainerGroupPutRequest(request *http.Request) (*http.Response, error) {
|
||||||
|
//add a lock before processing existense check
|
||||||
|
transport.mutex.Lock()
|
||||||
|
defer transport.mutex.Unlock()
|
||||||
|
|
||||||
|
//generate a temp http GET request based on the current PUT request
|
||||||
|
validationRequest := &http.Request{
|
||||||
|
Method: http.MethodGet,
|
||||||
|
URL: request.URL,
|
||||||
|
Header: http.Header{
|
||||||
|
"Authorization": []string{request.Header.Get("Authorization")},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
//fire the request to Azure API to validate if there is an existing container instance with the same name
|
||||||
|
//positive - reject the request
|
||||||
|
//negative - continue the process
|
||||||
|
validationResponse, err := http.DefaultTransport.RoundTrip(validationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return validationResponse, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if validationResponse.StatusCode >= 200 && validationResponse.StatusCode < 300 {
|
||||||
|
resp := &http.Response{}
|
||||||
|
errObj := map[string]string{
|
||||||
|
"message": "A container instance with the same name already exists inside the selected resource group",
|
||||||
|
}
|
||||||
|
err = responseutils.RewriteResponse(resp, errObj, http.StatusConflict)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
|
||||||
response, err := http.DefaultTransport.RoundTrip(request)
|
response, err := http.DefaultTransport.RoundTrip(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response, err
|
return response, err
|
||||||
|
|
Loading…
Reference in New Issue