mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-23 22:27:38 -05:00
core: Controller has field to persist server state
Also added ServerBlockHostIndex
This commit is contained in:
parent
10619f06b4
commit
fe7ad8ee05
2 changed files with 32 additions and 5 deletions
|
@ -46,8 +46,9 @@ func Load(filename string, input io.Reader) (Group, error) {
|
||||||
// executing the directives that were parsed.
|
// executing the directives that were parsed.
|
||||||
for i, sb := range serverBlocks {
|
for i, sb := range serverBlocks {
|
||||||
onces := makeOnces()
|
onces := makeOnces()
|
||||||
|
storages := makeStorages()
|
||||||
|
|
||||||
for _, addr := range sb.Addresses {
|
for j, addr := range sb.Addresses {
|
||||||
config := server.Config{
|
config := server.Config{
|
||||||
Host: addr.Host,
|
Host: addr.Host,
|
||||||
Port: addr.Port,
|
Port: addr.Port,
|
||||||
|
@ -76,7 +77,9 @@ func Load(filename string, input io.Reader) (Group, error) {
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
ServerBlockIndex: i,
|
ServerBlockIndex: i,
|
||||||
|
ServerBlockHostIndex: j,
|
||||||
ServerBlockHosts: sb.HostList(),
|
ServerBlockHosts: sb.HostList(),
|
||||||
|
ServerBlockStorage: storages[dir.name],
|
||||||
}
|
}
|
||||||
|
|
||||||
midware, err := dir.setup(controller)
|
midware, err := dir.setup(controller)
|
||||||
|
@ -121,6 +124,18 @@ func makeOnces() map[string]*sync.Once {
|
||||||
return onces
|
return onces
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// makeStorages makes a map of directive name to interface{}
|
||||||
|
// so that directives' setup functions can persist state
|
||||||
|
// between different hosts on the same server block during the
|
||||||
|
// setup phase.
|
||||||
|
func makeStorages() map[string]interface{} {
|
||||||
|
storages := make(map[string]interface{})
|
||||||
|
for _, dir := range directiveOrder {
|
||||||
|
storages[dir.name] = nil
|
||||||
|
}
|
||||||
|
return storages
|
||||||
|
}
|
||||||
|
|
||||||
// arrangeBindings groups configurations by their bind address. For example,
|
// arrangeBindings groups configurations by their bind address. For example,
|
||||||
// a server that should listen on localhost and another on 127.0.0.1 will
|
// a server that should listen on localhost and another on 127.0.0.1 will
|
||||||
// be grouped into the same address: 127.0.0.1. It will return an error
|
// be grouped into the same address: 127.0.0.1. It will return an error
|
||||||
|
|
|
@ -29,17 +29,29 @@ type Controller struct {
|
||||||
// server block as it appeared in the input.
|
// server block as it appeared in the input.
|
||||||
ServerBlockIndex int
|
ServerBlockIndex int
|
||||||
|
|
||||||
|
// ServerBlockHostIndex is the 0-based index of this
|
||||||
|
// host as it appeared in the input at the head of the
|
||||||
|
// server block.
|
||||||
|
ServerBlockHostIndex int
|
||||||
|
|
||||||
// ServerBlockHosts is a list of hosts that are
|
// ServerBlockHosts is a list of hosts that are
|
||||||
// associated with this server block. All these
|
// associated with this server block. All these
|
||||||
// hosts, consequently, share the same tokens.
|
// hosts, consequently, share the same tokens.
|
||||||
ServerBlockHosts []string
|
ServerBlockHosts []string
|
||||||
|
|
||||||
|
// ServerBlockStorage is used by a directive's
|
||||||
|
// setup function to persist state between all
|
||||||
|
// the hosts on a server block.
|
||||||
|
ServerBlockStorage interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestController creates a new *Controller for
|
// NewTestController creates a new *Controller for
|
||||||
// the input specified, with a filename of "Testfile"
|
// the input specified, with a filename of "Testfile".
|
||||||
|
// The Config is bare, consisting only of a Root of cwd.
|
||||||
//
|
//
|
||||||
// Used primarily for testing but needs to be exported so
|
// Used primarily for testing but needs to be exported so
|
||||||
// add-ons can use this as a convenience.
|
// add-ons can use this as a convenience. Does not initialize
|
||||||
|
// the server-block-related fields.
|
||||||
func NewTestController(input string) *Controller {
|
func NewTestController(input string) *Controller {
|
||||||
return &Controller{
|
return &Controller{
|
||||||
Config: &server.Config{
|
Config: &server.Config{
|
||||||
|
|
Loading…
Reference in a new issue