1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-05 13:55:21 +02:00

refactor(edge): move edge deploy script to react [EE-2689] (#6747)

This commit is contained in:
Chaim Lev-Ari 2022-04-14 13:14:23 +03:00 committed by GitHub
parent 328ce2f995
commit 85a7b7e0fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
38 changed files with 1079 additions and 342 deletions

View file

@ -3,7 +3,6 @@ package endpoints
import (
"errors"
"fmt"
"net"
"net/http"
"net/url"
"runtime"
@ -293,7 +292,7 @@ func (handler *Handler) createAzureEndpoint(payload *endpointCreatePayload) (*po
err = handler.saveEndpointAndUpdateAuthorizations(endpoint)
if err != nil {
return nil, &httperror.HandlerError{http.StatusInternalServerError, "An error occured while trying to create the environment", err}
return nil, &httperror.HandlerError{http.StatusInternalServerError, "An error occurred while trying to create the environment", err}
}
return endpoint, nil
@ -302,18 +301,9 @@ func (handler *Handler) createAzureEndpoint(payload *endpointCreatePayload) (*po
func (handler *Handler) createEdgeAgentEndpoint(payload *endpointCreatePayload) (*portainer.Endpoint, *httperror.HandlerError) {
endpointID := handler.DataStore.Endpoint().GetNextIdentifier()
portainerURL, err := url.Parse(payload.URL)
portainerHost, err := edge.ParseHostForEdge(payload.URL)
if err != nil {
return nil, &httperror.HandlerError{http.StatusBadRequest, "Invalid environment URL", err}
}
portainerHost, _, err := net.SplitHostPort(portainerURL.Host)
if err != nil {
portainerHost = portainerURL.Host
}
if portainerHost == "localhost" {
return nil, &httperror.HandlerError{http.StatusBadRequest, "Invalid environment URL", errors.New("cannot use localhost as environment URL")}
return nil, httperror.BadRequest("Unable to parse host", err)
}
edgeKey := handler.ReverseTunnelService.GenerateEdgeKey(payload.URL, portainerHost, endpointID)

View file

@ -13,6 +13,7 @@ import (
"github.com/portainer/libhttp/response"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/filesystem"
"github.com/portainer/portainer/api/internal/edge"
)
type settingsUpdatePayload struct {
@ -46,6 +47,8 @@ type settingsUpdatePayload struct {
DisableTrustOnFirstConnect *bool `example:"false"`
// EnforceEdgeID makes Portainer store the Edge ID instead of accepting anyone
EnforceEdgeID *bool `example:"false"`
// EdgePortainerURL is the URL that is exposed to edge agents
EdgePortainerURL *string `json:"EdgePortainerURL"`
}
func (payload *settingsUpdatePayload) Validate(r *http.Request) error {
@ -74,6 +77,13 @@ func (payload *settingsUpdatePayload) Validate(r *http.Request) error {
}
}
if payload.EdgePortainerURL != nil {
_, err := edge.ParseHostForEdge(*payload.EdgePortainerURL)
if err != nil {
return err
}
}
return nil
}
@ -178,6 +188,10 @@ func (handler *Handler) settingsUpdate(w http.ResponseWriter, r *http.Request) *
settings.EnforceEdgeID = *payload.EnforceEdgeID
}
if payload.EdgePortainerURL != nil {
settings.EdgePortainerURL = *payload.EdgePortainerURL
}
if payload.SnapshotInterval != nil && *payload.SnapshotInterval != settings.SnapshotInterval {
err := handler.updateSnapshotInterval(settings, *payload.SnapshotInterval)
if err != nil {

28
api/internal/edge/url.go Normal file
View file

@ -0,0 +1,28 @@
package edge
import (
"net"
"net/url"
"github.com/pkg/errors"
)
// ParseHostForEdge returns the hostname of the given URL, will fail if host is localhost
func ParseHostForEdge(portainerURL string) (string, error) {
parsedURL, err := url.Parse(portainerURL)
if err != nil {
return "", errors.Wrap(err, "Unable to parse Portainer URL")
}
portainerHost, _, err := net.SplitHostPort(parsedURL.Host)
if err != nil {
portainerHost = parsedURL.Host
}
if portainerHost == "localhost" {
return "", errors.New("cannot use localhost as environment URL")
}
return portainerHost, nil
}

View file

@ -815,6 +815,8 @@ type (
EnforceEdgeID bool `json:"EnforceEdgeID" example:"false"`
// Container environment parameter AGENT_SECRET
AgentSecret string `json:"AgentSecret"`
// EdgePortainerURL is the URL that is exposed to edge agents
EdgePortainerURL string `json:"EdgePortainerUrl"`
// Deprecated fields
DisplayDonationHeader bool