func newCFClient()

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
}