Add some safety checks in server command (#2288)

pull/2285/head
Jeff Mitchell 4 years ago committed by GitHub
parent 52c1a4f9f9
commit 5117cf9548
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -511,8 +511,10 @@ func (c *Command) Run(args []string) int {
retErr = fmt.Errorf("Error shutting down worker: %w", err)
}
c.UI.Error(retErr.Error())
if err := c.controller.Shutdown(); err != nil {
c.UI.Error(fmt.Errorf("Error with controller shutdown: %w", err).Error())
if c.controller != nil {
if err := c.controller.Shutdown(); err != nil {
c.UI.Error(fmt.Errorf("Error with controller shutdown: %w", err).Error())
}
}
return base.CommandCliError
}
@ -525,13 +527,15 @@ func (c *Command) Run(args []string) int {
return base.CommandCliError
}
opsServer, err := ops.NewServer(c.Logger, c.controller, c.Listeners...)
if err != nil {
c.UI.Error(err.Error())
return base.CommandCliError
if c.controller != nil {
opsServer, err := ops.NewServer(c.Logger, c.controller, c.Listeners...)
if err != nil {
c.UI.Error(err.Error())
return base.CommandCliError
}
c.opsServer = opsServer
c.opsServer.Start()
}
c.opsServer = opsServer
c.opsServer.Start()
// Inform any tests that the server is ready
if c.startedCh != nil {
@ -560,17 +564,16 @@ func (c *Command) ParseFlagsAndConfig(args []string) int {
if out > 0 {
return out
}
c.Config = cfg
if c.Config.Controller == nil && c.Config.Worker == nil {
c.UI.Error("Neither worker nor controller specified in configuration file.")
return base.CommandUserError
}
if c.Config.Controller != nil && c.Config.Controller.Name == "" {
c.UI.Error("Controller has no name set. It must be the unique name of this instance.")
return base.CommandUserError
if extraConfigValidationFunc != nil {
if err := extraConfigValidationFunc(cfg); err != nil {
c.UI.Error(err.Error())
return base.CommandUserError
}
}
c.Config = cfg
return base.CommandSuccess
}
@ -724,7 +727,7 @@ func (c *Command) WaitForInterrupt() int {
}
}()
if c.Config.Controller != nil {
if c.Config.Controller != nil && c.opsServer != nil {
c.opsServer.WaitIfHealthExists(c.Config.Controller.GracefulShutdownWaitDuration, c.UI)
}
@ -742,9 +745,11 @@ func (c *Command) WaitForInterrupt() int {
}
}
err := c.opsServer.Shutdown()
if err != nil {
c.UI.Error(fmt.Errorf("Error shutting down ops listeners: %w", err).Error())
if c.opsServer != nil {
err := c.opsServer.Shutdown()
if err != nil {
c.UI.Error(fmt.Errorf("Error shutting down ops listeners: %w", err).Error())
}
}
shutdownTriggered = true
@ -851,3 +856,13 @@ func (c *Command) verifyKmsSetup() error {
}
return nil
}
var extraConfigValidationFunc = func(cfg *config.Config) error {
if cfg.Controller == nil && cfg.Worker == nil {
return stderrors.New("Neither worker nor controller specified in configuration file.")
}
if cfg.Controller != nil && cfg.Controller.Name == "" {
return stderrors.New("Controller has no name set. It must be the unique name of this instance.")
}
return nil
}

Loading…
Cancel
Save