refactor config and nginx parsers
This commit is contained in:
@@ -212,16 +212,31 @@ func validateExactDocumentKeys(document []byte) error {
|
||||
if err := toml.Unmarshal(document, &root); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rejectUnknownKeys(root, "", "daemon", "backend", "nodeSsr"); err != nil {
|
||||
if err := validateRootKeys(root); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := validateDaemonKeys(root); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := validateBackendKeys(root); err != nil {
|
||||
return err
|
||||
}
|
||||
return validateOptionalNodeSsrKeys(root)
|
||||
}
|
||||
|
||||
func validateRootKeys(root map[string]any) error {
|
||||
return rejectUnknownKeys(root, "", "daemon", "backend", "nodeSsr")
|
||||
}
|
||||
|
||||
func validateDaemonKeys(root map[string]any) error {
|
||||
daemon, err := exactTable(root, "", "daemon")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rejectUnknownKeys(daemon, "daemon", "environment"); err != nil {
|
||||
return err
|
||||
}
|
||||
return rejectUnknownKeys(daemon, "daemon", "environment")
|
||||
}
|
||||
|
||||
func validateBackendKeys(root map[string]any) error {
|
||||
backend, err := exactTable(root, "", "backend")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -233,18 +248,10 @@ func validateExactDocumentKeys(document []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rejectUnknownKeys(slots, "backend.slot", "8080", "8081"); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, port := range []string{"8080", "8081"} {
|
||||
slot, err := exactTable(slots, "backend.slot", port)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rejectUnknownKeys(slot, "backend.slot."+port, "unit", "jar", "container_name", "health_endpoint"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return validateSlotKeys(slots, "backend.slot", []string{"8080", "8081"}, []string{"unit", "jar", "container_name", "health_endpoint"})
|
||||
}
|
||||
|
||||
func validateOptionalNodeSsrKeys(root map[string]any) error {
|
||||
nodeSsrValue, found := root["nodeSsr"]
|
||||
if !found {
|
||||
return nil
|
||||
@@ -263,15 +270,19 @@ func validateExactDocumentKeys(document []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rejectUnknownKeys(nodeSlots, "nodeSsr.slot", "18910", "28910"); err != nil {
|
||||
return validateSlotKeys(nodeSlots, "nodeSsr.slot", []string{"18910", "28910"}, []string{"container_name", "health_endpoint"})
|
||||
}
|
||||
|
||||
func validateSlotKeys(slots map[string]any, parent string, ports []string, allowed []string) error {
|
||||
if err := rejectUnknownKeys(slots, parent, ports...); err != nil {
|
||||
return err
|
||||
}
|
||||
for _, port := range []string{"18910", "28910"} {
|
||||
slot, err := exactTable(nodeSlots, "nodeSsr.slot", port)
|
||||
for _, port := range ports {
|
||||
slot, err := exactTable(slots, parent, port)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := rejectUnknownKeys(slot, "nodeSsr.slot."+port, "container_name", "health_endpoint"); err != nil {
|
||||
if err := rejectUnknownKeys(slot, parent+"."+port, allowed...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -343,33 +354,41 @@ func validateBackend(backend Backend) error {
|
||||
}
|
||||
switch backend.Type {
|
||||
case BackendTypeNative:
|
||||
if backend.Slot.Port8080.ContainerName != "" || backend.Slot.Port8081.ContainerName != "" {
|
||||
return errors.New("native backend slots do not accept container_name")
|
||||
}
|
||||
if backend.ReleaseDir != nativeReleaseDir {
|
||||
return fmt.Errorf("backend.release_dir must be %q", nativeReleaseDir)
|
||||
}
|
||||
if backend.ActiveJAR != nativeActiveJAR {
|
||||
return fmt.Errorf("backend.active_jar must be %q", nativeActiveJAR)
|
||||
}
|
||||
return validateNativeBackendSlots(backend.Slot)
|
||||
return validateNativeBackend(backend)
|
||||
case BackendTypeContainer:
|
||||
if backend.ReleaseDir != "" || backend.ActiveJAR != "" {
|
||||
return errors.New("container backend does not accept release_dir or active_jar")
|
||||
}
|
||||
if backend.Slot.Port8080.Unit != "" || backend.Slot.Port8080.JAR != "" || backend.Slot.Port8081.Unit != "" || backend.Slot.Port8081.JAR != "" {
|
||||
return errors.New("container backend slots do not accept unit or jar")
|
||||
}
|
||||
if err := validateContainerSlot("backend.slot.8080", backend.Slot.Port8080, containerName8080, nativeHealthURL8080); err != nil {
|
||||
return err
|
||||
}
|
||||
return validateContainerSlot("backend.slot.8081", backend.Slot.Port8081, containerName8081, nativeHealthURL8081)
|
||||
return validateContainerBackend(backend)
|
||||
default:
|
||||
return fmt.Errorf("backend.type must be %q or %q", BackendTypeNative, BackendTypeContainer)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func validateNativeBackend(backend Backend) error {
|
||||
if backend.Slot.Port8080.ContainerName != "" || backend.Slot.Port8081.ContainerName != "" {
|
||||
return errors.New("native backend slots do not accept container_name")
|
||||
}
|
||||
if backend.ReleaseDir != nativeReleaseDir {
|
||||
return fmt.Errorf("backend.release_dir must be %q", nativeReleaseDir)
|
||||
}
|
||||
if backend.ActiveJAR != nativeActiveJAR {
|
||||
return fmt.Errorf("backend.active_jar must be %q", nativeActiveJAR)
|
||||
}
|
||||
return validateNativeBackendSlots(backend.Slot)
|
||||
}
|
||||
|
||||
func validateContainerBackend(backend Backend) error {
|
||||
if backend.ReleaseDir != "" || backend.ActiveJAR != "" {
|
||||
return errors.New("container backend does not accept release_dir or active_jar")
|
||||
}
|
||||
if backend.Slot.Port8080.Unit != "" || backend.Slot.Port8080.JAR != "" || backend.Slot.Port8081.Unit != "" || backend.Slot.Port8081.JAR != "" {
|
||||
return errors.New("container backend slots do not accept unit or jar")
|
||||
}
|
||||
if err := validateContainerSlot("backend.slot.8080", backend.Slot.Port8080, containerName8080, nativeHealthURL8080); err != nil {
|
||||
return err
|
||||
}
|
||||
return validateContainerSlot("backend.slot.8081", backend.Slot.Port8081, containerName8081, nativeHealthURL8081)
|
||||
}
|
||||
|
||||
func validateNativeBackendSlots(slots BackendSlots) error {
|
||||
if err := validateNativeSlot("backend.slot.8080", slots.Port8080, nativeUnit8080, nativeSlotJAR8080, nativeHealthURL8080); err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user