in pkg/gcv/validator.go [96:143]
func newCFClient(
targetHandler handler.TargetHandler,
templates []*cftemplates.ConstraintTemplate,
constraints []*unstructured.Unstructured,
opts ...Option) (
*cfclient.Client, error) {
options := &initOptions{
driverArgs: []rego.Arg{rego.Tracing(false)},
clientArgs: []cfclient.Opt{cfclient.Targets(targetHandler)},
}
for _, opt := range opts {
opt(options)
}
driver, err := rego.New(options.driverArgs...)
if err != nil {
return nil, fmt.Errorf("unable to create new driver: %w", err)
}
// Append driver option after creation
args := append(options.clientArgs, cfclient.Driver(driver))
cfClient, err := cfclient.NewClient(args...)
if err != nil {
return nil, fmt.Errorf("unable to set up Constraint Framework client: %w", err)
}
ctx := context.Background()
var errs multierror.Errors
for _, template := range templates {
if _, err := cfClient.AddTemplate(ctx, template); err != nil {
errs.Add(fmt.Errorf("failed to add template %v: %w", template, err))
}
}
if !errs.Empty() {
return nil, errs.ToError()
}
for _, constraint := range constraints {
if _, err := cfClient.AddConstraint(ctx, constraint); err != nil {
errs.Add(fmt.Errorf("failed to add constraint %s: %w", constraint, err))
}
}
if !errs.Empty() {
return nil, errs.ToError()
}
return cfClient, nil
}