-
Notifications
You must be signed in to change notification settings - Fork 9
/
check.go
48 lines (41 loc) · 1.33 KB
/
check.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Copyright 2022 Namespace Labs Inc; All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
package compatibility
import (
enverr "namespacelabs.dev/foundation/internal/fnerrors/env"
"namespacelabs.dev/foundation/schema"
)
func CheckCompatible(env *schema.Environment, srv *schema.Server) error {
for _, req := range srv.GetEnvironmentRequirement() {
for _, r := range req.GetEnvironmentHasLabel() {
if !hasLabel(env, r, true) {
return enverr.IncompatibleEnvironmentErr{
Env: env,
ServerPackageName: schema.PackageName(srv.PackageName),
RequirementOwner: schema.PackageName(req.Package),
RequiredLabel: r,
}
}
}
for _, r := range req.GetEnvironmentDoesNotHaveLabel() {
if hasLabel(env, r, false) {
return enverr.IncompatibleEnvironmentErr{
Env: env,
ServerPackageName: schema.PackageName(srv.PackageName),
RequirementOwner: schema.PackageName(req.Package),
IncompatibleLabel: r,
}
}
}
}
return nil
}
func hasLabel(env *schema.Environment, lbl *schema.Label, matchEmpty bool) bool {
for _, x := range env.GetLabels() {
if x.Name == lbl.Name {
return x.Value == lbl.Value || (matchEmpty && lbl.Value == "")
}
}
return false
}