-
Notifications
You must be signed in to change notification settings - Fork 60
Driver interface AddConstraint improvement #324
Copy link
Copy link
Open
Description
overview
At the moment, AddConstraint's definition (docs) states:
// AddConstraint adds a Constraint to Driver for a particular Template. Future
// calls to Query may reference the added Constraint. Replaces the existing
// Constraint if it already exists.
AddConstraint(ctx context.Context, constraint *unstructured.Unstructured) error
However, if no Template has already been added, via AddTemplate, the behavior is undefined. At present, the rego driver "fails silently":
frameworks/constraint/pkg/client/drivers/rego/driver.go
Lines 150 to 164 in 3f237e2
| key := drivers.ConstraintKeyFrom(constraint) | |
| path := key.StoragePath() | |
| d.mtx.Lock() | |
| defer d.mtx.Unlock() | |
| targets := d.targets[key.Kind] | |
| for _, target := range targets { | |
| err := d.storage.addData(ctx, target, path, params) | |
| if err != nil { | |
| return err | |
| } | |
| } | |
| return nil |
solutions
- Define the behavior and enforce it. Update the docs and if the targets is not found err out with some helpful error like
TemplateNotFound
targets, found := ...
if not found, error
- Modify the signature of
AddConstraintto also include the Template that we want to associate the Constraint with. This approach would probably require some rethinking or regrokking of the flow for both AddTemplate and AddConstraint so it may actually be more work than value.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels