Don't freak out if the server doesn't exist on the remote
This commit is contained in:
parent
514c16ccc8
commit
92a7c9d231
|
@ -3,7 +3,6 @@ package api
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/pterodactyl/wings/parser"
|
"github.com/pterodactyl/wings/parser"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,25 +28,25 @@ type ServerConfiguration struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetches the server configuration and returns the struct for it.
|
// Fetches the server configuration and returns the struct for it.
|
||||||
func (r *PanelRequest) GetServerConfiguration(uuid string) (*ServerConfiguration, error) {
|
func (r *PanelRequest) GetServerConfiguration(uuid string) (*ServerConfiguration, *RequestError, error) {
|
||||||
resp, err := r.Get(fmt.Sprintf("/servers/%s/configuration", uuid))
|
resp, err := r.Get(fmt.Sprintf("/servers/%s/configuration", uuid))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
r.Response = resp
|
r.Response = resp
|
||||||
|
|
||||||
if r.HasError() {
|
if r.HasError() {
|
||||||
return nil, errors.WithStack(errors.New(r.Error().String()))
|
return nil, r.Error(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
res := &ServerConfiguration{}
|
res := &ServerConfiguration{}
|
||||||
b, _ := r.ReadBody()
|
b, _ := r.ReadBody()
|
||||||
|
|
||||||
if err := json.Unmarshal(b, res); err != nil {
|
if err := json.Unmarshal(b, res); err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return res, nil
|
return res, nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,9 +151,11 @@ func (d *DockerEnvironment) InSituUpdate() error {
|
||||||
// state. This ensures that unexpected container deletion while Wings is running does
|
// state. This ensures that unexpected container deletion while Wings is running does
|
||||||
// not result in the server becoming unbootable.
|
// not result in the server becoming unbootable.
|
||||||
func (d *DockerEnvironment) OnBeforeStart() error {
|
func (d *DockerEnvironment) OnBeforeStart() error {
|
||||||
c, err := d.Server.GetProcessConfiguration()
|
c, rerr, err := d.Server.GetProcessConfiguration()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.WithStack(err)
|
return err
|
||||||
|
} else if rerr != nil {
|
||||||
|
return errors.New(rerr.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Server.processConfiguration = c
|
d.Server.processConfiguration = c
|
||||||
|
@ -164,7 +166,7 @@ func (d *DockerEnvironment) OnBeforeStart() error {
|
||||||
if d.Server.Container.RebuildRequired {
|
if d.Server.Container.RebuildRequired {
|
||||||
if err := d.Client.ContainerRemove(context.Background(), d.Server.Uuid, types.ContainerRemoveOptions{RemoveVolumes: true}); err != nil {
|
if err := d.Client.ContainerRemove(context.Background(), d.Server.Uuid, types.ContainerRemoveOptions{RemoveVolumes: true}); err != nil {
|
||||||
if !client.IsErrNotFound(err) {
|
if !client.IsErrNotFound(err) {
|
||||||
return errors.WithStack(err)
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +183,7 @@ func (d *DockerEnvironment) OnBeforeStart() error {
|
||||||
zap.S().Warnw(
|
zap.S().Warnw(
|
||||||
"failed to write server configuration to disk after setting rebuild_required=false in configuration",
|
"failed to write server configuration to disk after setting rebuild_required=false in configuration",
|
||||||
zap.String("server", serv.Uuid),
|
zap.String("server", serv.Uuid),
|
||||||
zap.Error(err),
|
zap.Error(errors.WithStack(err)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}(d.Server)
|
}(d.Server)
|
||||||
|
@ -195,7 +197,7 @@ func (d *DockerEnvironment) OnBeforeStart() error {
|
||||||
// environment gets created properly if it is missing and the server is started. We're making
|
// environment gets created properly if it is missing and the server is started. We're making
|
||||||
// an assumption that all of the files will still exist at this point.
|
// an assumption that all of the files will still exist at this point.
|
||||||
if err := d.Create(); err != nil {
|
if err := d.Create(); err != nil {
|
||||||
return errors.WithStack(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -25,3 +25,16 @@ func IsTooFrequentCrashError(err error) bool {
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type serverDoesNotExist struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *serverDoesNotExist) Error() string {
|
||||||
|
return "server does not exist on remote system"
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsServerDoesNotExistError(err error) bool {
|
||||||
|
_, ok := err.(*serverDoesNotExist)
|
||||||
|
|
||||||
|
return ok
|
||||||
|
}
|
|
@ -179,7 +179,12 @@ func LoadDirectory(dir string, cfg *config.SystemConfiguration) error {
|
||||||
|
|
||||||
s, err := FromConfiguration(b, cfg)
|
s, err := FromConfiguration(b, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zap.S().Errorw("failed to parse server configuration, skipping...", zap.String("server", file.Name()), zap.Error(err))
|
if IsServerDoesNotExistError(err) {
|
||||||
|
zap.S().Infow("server does not exist on remote system", zap.String("server", file.Name()))
|
||||||
|
} else {
|
||||||
|
zap.S().Errorw("failed to parse server configuration, skipping...", zap.String("server", file.Name()), zap.Error(err))
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,8 +246,16 @@ func FromConfiguration(data []byte, cfg *config.SystemConfiguration) (*Server, e
|
||||||
// This is also done when the server is booted, however we need to account for instances
|
// This is also done when the server is booted, however we need to account for instances
|
||||||
// where the server is already running and the Daemon reboots. In those cases this will
|
// where the server is already running and the Daemon reboots. In those cases this will
|
||||||
// allow us to you know, stop servers.
|
// allow us to you know, stop servers.
|
||||||
if cfg, err := s.GetProcessConfiguration(); err != nil {
|
if cfg, rerr, err := s.GetProcessConfiguration(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
} else if rerr != nil {
|
||||||
|
// If the response error is because a server does not exist on the Panel return
|
||||||
|
// that so that we can handle that in the future.
|
||||||
|
if rerr.Status == "404" {
|
||||||
|
return nil, &serverDoesNotExist{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errors.New(rerr.String())
|
||||||
} else {
|
} else {
|
||||||
s.processConfiguration = cfg
|
s.processConfiguration = cfg
|
||||||
}
|
}
|
||||||
|
@ -331,6 +344,6 @@ func (s *Server) SetState(state string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the process configuration data for the server.
|
// Gets the process configuration data for the server.
|
||||||
func (s *Server) GetProcessConfiguration() (*api.ServerConfiguration, error) {
|
func (s *Server) GetProcessConfiguration() (*api.ServerConfiguration, *api.RequestError, error) {
|
||||||
return api.NewRequester().GetServerConfiguration(s.Uuid)
|
return api.NewRequester().GetServerConfiguration(s.Uuid)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user