nginx-proxy-manager/backend/internal/validator/upstreams.go

39 lines
1.0 KiB
Go
Raw Normal View History

package validator
import (
"npm/internal/entity/nginxtemplate"
"npm/internal/entity/upstream"
2023-02-24 07:19:07 +00:00
"github.com/rotisserie/eris"
)
// 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 {
2023-02-24 07:19:07 +00:00
return eris.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 {
2023-02-24 07:19:07 +00:00
return eris.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 {
2023-02-24 07:19:07 +00:00
return eris.Errorf("Nginx Template #%d does not exist", u.NginxTemplateID)
}
if nginxTemplate.Type != "upstream" {
2023-02-24 07:19:07 +00:00
return eris.Errorf("Host Template #%d is not valid for this upstream", u.NginxTemplateID)
}
return nil
}