Add logic to reset failed server states on Panel when booting
This commit is contained in:
parent
1da415c177
commit
a8ee5463ce
|
@ -265,6 +265,15 @@ func rootCmdRun(cmd *cobra.Command, _ []string) {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
log.Info("updating server states on Panel: marking installing/restoring servers as normal")
|
||||||
|
// Update all of the servers on the Panel to be in a valid state if they're
|
||||||
|
// currently marked as installing/restoring now that Wings is restarted.
|
||||||
|
if err := pclient.ResetServersState(cmd.Context()); err != nil {
|
||||||
|
log.WithField("error", err).Error("failed to reset server states on Panel: some instances may be stuck in an installing/restoring state unexpectedly")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
sys := config.Get().System
|
sys := config.Get().System
|
||||||
// Ensure the archive directory exists.
|
// Ensure the archive directory exists.
|
||||||
if err := os.MkdirAll(sys.ArchiveDirectory, 0755); err != nil {
|
if err := os.MkdirAll(sys.ArchiveDirectory, 0755); err != nil {
|
||||||
|
|
|
@ -21,6 +21,7 @@ type Client interface {
|
||||||
GetInstallationScript(ctx context.Context, uuid string) (InstallationScript, error)
|
GetInstallationScript(ctx context.Context, uuid string) (InstallationScript, error)
|
||||||
GetServerConfiguration(ctx context.Context, uuid string) (ServerConfigurationResponse, error)
|
GetServerConfiguration(ctx context.Context, uuid string) (ServerConfigurationResponse, error)
|
||||||
GetServers(context context.Context, perPage int) ([]RawServerData, error)
|
GetServers(context context.Context, perPage int) ([]RawServerData, error)
|
||||||
|
ResetServersState(ctx context.Context) error
|
||||||
SetArchiveStatus(ctx context.Context, uuid string, successful bool) error
|
SetArchiveStatus(ctx context.Context, uuid string, successful bool) error
|
||||||
SetBackupStatus(ctx context.Context, backup string, data BackupRequest) error
|
SetBackupStatus(ctx context.Context, backup string, data BackupRequest) error
|
||||||
SendRestorationStatus(ctx context.Context, backup string, successful bool) error
|
SendRestorationStatus(ctx context.Context, backup string, successful bool) error
|
||||||
|
|
|
@ -50,6 +50,22 @@ func (c *client) GetServers(ctx context.Context, limit int) ([]RawServerData, er
|
||||||
return servers, nil
|
return servers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResetServersState updates the state of all servers on the node that are
|
||||||
|
// currently marked as "installing" or "restoring from backup" to be marked as
|
||||||
|
// a normal successful install state.
|
||||||
|
//
|
||||||
|
// This handles Wings exiting during either of these processes which will leave
|
||||||
|
// things in a bad state within the Panel. This API call is executed once Wings
|
||||||
|
// has fully booted all of the servers.
|
||||||
|
func (c *client) ResetServersState(ctx context.Context) error {
|
||||||
|
res, err := c.post(ctx, "/servers/reset", nil)
|
||||||
|
if err != nil {
|
||||||
|
return errors.WrapIf(err, "remote/servers: failed to reset server state on Panel")
|
||||||
|
}
|
||||||
|
res.Body.Close()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *client) GetServerConfiguration(ctx context.Context, uuid string) (ServerConfigurationResponse, error) {
|
func (c *client) GetServerConfiguration(ctx context.Context, uuid string) (ServerConfigurationResponse, error) {
|
||||||
var config ServerConfigurationResponse
|
var config ServerConfigurationResponse
|
||||||
res, err := c.get(ctx, fmt.Sprintf("/servers/%s", uuid), nil)
|
res, err := c.get(ctx, fmt.Sprintf("/servers/%s", uuid), nil)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user