Don't spam errors to the output if attempting to send a command to an unattached starting instance; closes pterodactyl/panel#2385
This commit is contained in:
parent
a20861fa8e
commit
4748d7cb29
|
@ -15,6 +15,8 @@ type dockerLogLine struct {
|
||||||
Log string `json:"log"`
|
Log string `json:"log"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ErrNotAttached = errors.New("not attached to instance")
|
||||||
|
|
||||||
func (e *Environment) setStream(s *types.HijackedResponse) {
|
func (e *Environment) setStream(s *types.HijackedResponse) {
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
e.stream = s
|
e.stream = s
|
||||||
|
@ -24,13 +26,13 @@ func (e *Environment) setStream(s *types.HijackedResponse) {
|
||||||
// Sends the specified command to the stdin of the running container instance. There is no
|
// Sends the specified command to the stdin of the running container instance. There is no
|
||||||
// confirmation that this data is sent successfully, only that it gets pushed into the stdin.
|
// confirmation that this data is sent successfully, only that it gets pushed into the stdin.
|
||||||
func (e *Environment) SendCommand(c string) error {
|
func (e *Environment) SendCommand(c string) error {
|
||||||
|
if !e.IsAttached() {
|
||||||
|
return ErrNotAttached
|
||||||
|
}
|
||||||
|
|
||||||
e.mu.RLock()
|
e.mu.RLock()
|
||||||
defer e.mu.RUnlock()
|
defer e.mu.RUnlock()
|
||||||
|
|
||||||
if !e.IsAttached() {
|
|
||||||
return errors.New("attempting to send command to non-attached instance")
|
|
||||||
}
|
|
||||||
|
|
||||||
if e.meta.Stop != nil {
|
if e.meta.Stop != nil {
|
||||||
// If the command being processed is the same as the process stop command then we want to mark
|
// If the command being processed is the same as the process stop command then we want to mark
|
||||||
// the server as entering the stopping state otherwise the process will stop and Wings will think
|
// the server as entering the stopping state otherwise the process will stop and Wings will think
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/pterodactyl/wings/config"
|
"github.com/pterodactyl/wings/config"
|
||||||
"github.com/pterodactyl/wings/environment"
|
"github.com/pterodactyl/wings/environment"
|
||||||
|
"github.com/pterodactyl/wings/environment/docker"
|
||||||
"github.com/pterodactyl/wings/router/tokens"
|
"github.com/pterodactyl/wings/router/tokens"
|
||||||
"github.com/pterodactyl/wings/server"
|
"github.com/pterodactyl/wings/server"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -371,6 +372,18 @@ func (h *Handler) HandleInbound(m Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(dane): should probably add a new process state that is "booting environment" or something
|
||||||
|
// so that we can better handle this and only set the environment to booted once we're attached.
|
||||||
|
//
|
||||||
|
// Or maybe just an IsBooted function?
|
||||||
|
if h.server.GetState() == environment.ProcessStartingState {
|
||||||
|
if e, ok := h.server.Environment.(*docker.Environment); ok {
|
||||||
|
if !e.IsAttached() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return h.server.Environment.SendCommand(strings.Join(m.Args, ""))
|
return h.server.Environment.SendCommand(strings.Join(m.Args, ""))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user