nginx-proxy-manager/backend/internal/validator/upstreams.go
Jamie Curnow 5e5f0de0e2 - Added upstream objects
- Renamed host templates to nginx templates
- Generate upstream templates
- Better nginx error reporting when reloading
- Use tparse for golang test reporting
2023-01-04 15:53:52 +10:00

40 lines
1.0 KiB
Go

package validator
import (
"errors"
"fmt"
"npm/internal/entity/nginxtemplate"
"npm/internal/entity/upstream"
)
// ValidateUpstream will check if associated objects exist and other checks
// will return a nil error if things are OK
func ValidateUpstream(u upstream.Model) error {
// Needs to have more than 1 server
if len(u.Servers) < 2 {
return errors.New("Upstreams require at least 2 servers")
}
// Backup servers aren't permitted with hash balancing
if u.IPHash {
// check all servers for a backup param
for _, server := range u.Servers {
if server.Backup {
return errors.New("Backup servers cannot be used with hash balancing")
}
}
}
// Check the nginx template exists and has the same type.
nginxTemplate, err := nginxtemplate.GetByID(u.NginxTemplateID)
if err != nil {
return fmt.Errorf("Nginx Template #%d does not exist", u.NginxTemplateID)
}
if nginxTemplate.Type != "upstream" {
return fmt.Errorf("Host Template #%d is not valid for this upstream", u.NginxTemplateID)
}
return nil
}