Skip to content

Commit

Permalink
temp: externalize CommandManager
Browse files Browse the repository at this point in the history
This commit demonstrates the use of custom overlord managers by
turning the CommandManager into an external one.
  • Loading branch information
paul-rodriguez committed Aug 8, 2023
1 parent 6760b20 commit e126d7b
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 13 deletions.
5 changes: 3 additions & 2 deletions internals/daemon/api_tasks.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"os"

"github.com/canonical/pebble/internals/logger"
"github.com/canonical/pebble/internals/overlord/cmdstate"
"github.com/canonical/pebble/internals/overlord/state"
)

Expand All @@ -44,8 +45,8 @@ func v1GetTaskWebsocket(c *Command, req *http.Request, _ *UserState) Response {
var connect websocketConnectFunc
switch task.Kind() {
case "exec":
commandMgr := c.d.overlord.CommandManager()
connect = commandMgr.Connect
commandMgr := c.d.overlord.GetManagerByTag(CommandManagerTag)
connect = commandMgr.(*cmdstate.CommandManager).Connect
default:
logger.Noticef("Websocket %s: %q tasks do not have websockets", task.ID(), task.Kind())
return statusBadRequest("%q tasks do not have websockets", task.Kind())
Expand Down
12 changes: 12 additions & 0 deletions internals/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,18 @@ import (
"github.com/canonical/pebble/internals/osutil/sys"
"github.com/canonical/pebble/internals/overlord"
"github.com/canonical/pebble/internals/overlord/checkstate"
"github.com/canonical/pebble/internals/overlord/cmdstate"
"github.com/canonical/pebble/internals/overlord/restart"
"github.com/canonical/pebble/internals/overlord/servstate"
"github.com/canonical/pebble/internals/overlord/standby"
"github.com/canonical/pebble/internals/overlord/state"
"github.com/canonical/pebble/internals/systemd"
)

const (
CommandManagerTag = 1
)

var (
// ManagerGenerators passes build functions to create external managers.
//
Expand Down Expand Up @@ -789,6 +794,13 @@ func New(opts *Options) (*Daemon, error) {
httpAddress: opts.HTTPAddress,
}

ManagerGenerators = append(
ManagerGenerators,
func(o *overlord.Overlord) (overlord.ManagerTag, overlord.StateManager) {
commandMgr := cmdstate.NewManager(o.TaskRunner())
return CommandManagerTag, commandMgr
})

ovld, err := overlord.New(opts.Dir, d, opts.ServiceOutput, ManagerGenerators)
if err == errExpectedReboot {
// we proceed without overlord until we reach Stop
Expand Down
11 changes: 0 additions & 11 deletions internals/overlord/overlord.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (

"github.com/canonical/pebble/internals/osutil"
"github.com/canonical/pebble/internals/overlord/checkstate"
"github.com/canonical/pebble/internals/overlord/cmdstate"
"github.com/canonical/pebble/internals/overlord/logstate"
"github.com/canonical/pebble/internals/overlord/patch"
"github.com/canonical/pebble/internals/overlord/restart"
Expand Down Expand Up @@ -73,7 +72,6 @@ type Overlord struct {
inited bool
runner *state.TaskRunner
serviceMgr *servstate.ServiceManager
commandMgr *cmdstate.CommandManager
checkMgr *checkstate.CheckManager
logMgr *logstate.LogManager
customManagers map[ManagerTag]StateManager
Expand Down Expand Up @@ -134,9 +132,6 @@ func New(
}
o.addManager(o.serviceMgr)

o.commandMgr = cmdstate.NewManager(o.runner)
o.addManager(o.commandMgr)

o.checkMgr = checkstate.NewManager()

// Tell check manager about plan updates.
Expand Down Expand Up @@ -433,12 +428,6 @@ func (o *Overlord) ServiceManager() *servstate.ServiceManager {
return o.serviceMgr
}

// CommandManager returns the command manager responsible for executing
// commands under the overlord.
func (o *Overlord) CommandManager() *cmdstate.CommandManager {
return o.commandMgr
}

// CheckManager returns the check manager responsible for running health
// checks under the overlord.
func (o *Overlord) CheckManager() *checkstate.CheckManager {
Expand Down

0 comments on commit e126d7b

Please sign in to comment.