mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-06 22:40:31 -05:00
* Allow -validate flag to validate caddyfile and return * Ensure logging without -log flag * Changes to validate seperatly to Starup func * Removed change to Start signature. Created function to ValidateCaddyfile * comment and tidyup * ValidateandExecuteDirectives with justValidate option * remove debugging code * Tidy up comments * additional parameter added to calls to mustLogFataf * ValidateAndExecuteDirectives needs to only return err
This commit is contained in:
parent
696792781a
commit
21d92d6873
2 changed files with 68 additions and 39 deletions
83
caddy.go
83
caddy.go
|
@ -432,31 +432,7 @@ func startWithListenerFds(cdyfile Input, inst *Instance, restartFds map[string]r
|
||||||
cdyfile = CaddyfileInput{}
|
cdyfile = CaddyfileInput{}
|
||||||
}
|
}
|
||||||
|
|
||||||
stypeName := cdyfile.ServerType()
|
err := ValidateAndExecuteDirectives(cdyfile, inst, false)
|
||||||
|
|
||||||
stype, err := getServerType(stypeName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
inst.caddyfileInput = cdyfile
|
|
||||||
|
|
||||||
sblocks, err := loadServerBlocks(stypeName, cdyfile.Path(), bytes.NewReader(cdyfile.Body()))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
inst.context = stype.NewContext()
|
|
||||||
if inst.context == nil {
|
|
||||||
return fmt.Errorf("server type %s produced a nil Context", stypeName)
|
|
||||||
}
|
|
||||||
|
|
||||||
sblocks, err = inst.context.InspectServerBlocks(cdyfile.Path(), sblocks)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = executeDirectives(inst, cdyfile.Path(), stype.Directives(), sblocks)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -516,9 +492,48 @@ func startWithListenerFds(cdyfile Input, inst *Instance, restartFds map[string]r
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func executeDirectives(inst *Instance, filename string,
|
func ValidateAndExecuteDirectives(cdyfile Input, inst *Instance, justValidate bool) error {
|
||||||
directives []string, sblocks []caddyfile.ServerBlock) error {
|
|
||||||
|
|
||||||
|
// If parsing only inst will be nil, create an instance for this function call only.
|
||||||
|
if justValidate {
|
||||||
|
inst = &Instance{serverType: cdyfile.ServerType(), wg: new(sync.WaitGroup)}
|
||||||
|
}
|
||||||
|
|
||||||
|
stypeName := cdyfile.ServerType()
|
||||||
|
|
||||||
|
stype, err := getServerType(stypeName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
inst.caddyfileInput = cdyfile
|
||||||
|
|
||||||
|
sblocks, err := loadServerBlocks(stypeName, cdyfile.Path(), bytes.NewReader(cdyfile.Body()))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
inst.context = stype.NewContext()
|
||||||
|
if inst.context == nil {
|
||||||
|
return fmt.Errorf("server type %s produced a nil Context", stypeName)
|
||||||
|
}
|
||||||
|
|
||||||
|
sblocks, err = inst.context.InspectServerBlocks(cdyfile.Path(), sblocks)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = executeDirectives(inst, cdyfile.Path(), stype.Directives(), sblocks, justValidate)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeDirectives(inst *Instance, filename string,
|
||||||
|
directives []string, sblocks []caddyfile.ServerBlock, justValidate bool) error {
|
||||||
// map of server block ID to map of directive name to whatever.
|
// map of server block ID to map of directive name to whatever.
|
||||||
storages := make(map[int]map[string]interface{})
|
storages := make(map[int]map[string]interface{})
|
||||||
|
|
||||||
|
@ -568,12 +583,14 @@ func executeDirectives(inst *Instance, filename string,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// See if there are any callbacks to execute after this directive
|
if !justValidate {
|
||||||
if allCallbacks, ok := parsingCallbacks[inst.serverType]; ok {
|
// See if there are any callbacks to execute after this directive
|
||||||
callbacks := allCallbacks[dir]
|
if allCallbacks, ok := parsingCallbacks[inst.serverType]; ok {
|
||||||
for _, callback := range callbacks {
|
callbacks := allCallbacks[dir]
|
||||||
if err := callback(inst.context); err != nil {
|
for _, callback := range callbacks {
|
||||||
return err
|
if err := callback(inst.context); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ func init() {
|
||||||
flag.StringVar(&revoke, "revoke", "", "Hostname for which to revoke the certificate")
|
flag.StringVar(&revoke, "revoke", "", "Hostname for which to revoke the certificate")
|
||||||
flag.StringVar(&serverType, "type", "http", "Type of server to run")
|
flag.StringVar(&serverType, "type", "http", "Type of server to run")
|
||||||
flag.BoolVar(&version, "version", false, "Show version")
|
flag.BoolVar(&version, "version", false, "Show version")
|
||||||
|
flag.BoolVar(&validate, "validate", false, "Parse the Caddyfile but do not start the server")
|
||||||
|
|
||||||
caddy.RegisterCaddyfileLoader("flag", caddy.LoaderFunc(confLoader))
|
caddy.RegisterCaddyfileLoader("flag", caddy.LoaderFunc(confLoader))
|
||||||
caddy.SetDefaultCaddyfileLoader("default", caddy.LoaderFunc(defaultLoader))
|
caddy.SetDefaultCaddyfileLoader("default", caddy.LoaderFunc(defaultLoader))
|
||||||
|
@ -74,7 +75,7 @@ func Run() {
|
||||||
if revoke != "" {
|
if revoke != "" {
|
||||||
err := caddytls.Revoke(revoke)
|
err := caddytls.Revoke(revoke)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mustLogFatalf(err.Error())
|
mustLogFatalf("%v", err.Error())
|
||||||
}
|
}
|
||||||
fmt.Printf("Revoked certificate for %s\n", revoke)
|
fmt.Printf("Revoked certificate for %s\n", revoke)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
@ -94,19 +95,29 @@ func Run() {
|
||||||
// Set CPU cap
|
// Set CPU cap
|
||||||
err := setCPU(cpu)
|
err := setCPU(cpu)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mustLogFatalf(err.Error())
|
mustLogFatalf("%v", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Caddyfile input
|
// Get Caddyfile input
|
||||||
caddyfile, err := caddy.LoadCaddyfile(serverType)
|
caddyfileinput, err := caddy.LoadCaddyfile(serverType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mustLogFatalf(err.Error())
|
mustLogFatalf("%v", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if validate {
|
||||||
|
justValidate := true
|
||||||
|
err := caddy.ValidateAndExecuteDirectives(caddyfileinput, nil, justValidate)
|
||||||
|
if err != nil {
|
||||||
|
mustLogFatalf("%v", err.Error())
|
||||||
|
}
|
||||||
|
log.Println("[INFO] Caddyfile Valid")
|
||||||
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start your engines
|
// Start your engines
|
||||||
instance, err := caddy.Start(caddyfile)
|
instance, err := caddy.Start(caddyfileinput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mustLogFatalf(err.Error())
|
mustLogFatalf("%v", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Twiddle your thumbs
|
// Twiddle your thumbs
|
||||||
|
@ -226,6 +237,7 @@ var (
|
||||||
revoke string
|
revoke string
|
||||||
version bool
|
version bool
|
||||||
plugins bool
|
plugins bool
|
||||||
|
validate bool
|
||||||
)
|
)
|
||||||
|
|
||||||
// Build information obtained with the help of -ldflags
|
// Build information obtained with the help of -ldflags
|
||||||
|
|
Loading…
Reference in a new issue