in pkg/tasks/bundle/filter.go [51:122]
func (t *FilterTask) Run(ctx context.Context) error {
// Check arguments
if types.IsNil(t.ContainerReader) {
return errors.New("unable to run task with a nil containerReader provider")
}
if types.IsNil(t.OutputWriter) {
return errors.New("unable to run task with a nil outputWriter provider")
}
// Create input reader
reader, err := t.ContainerReader(ctx)
if err != nil {
return fmt.Errorf("unable to open input bundle: %w", err)
}
// Load bundle
b, err := bundle.FromContainerReader(reader)
if err != nil {
return fmt.Errorf("unable to load bundle content: %w", err)
}
var errFilter error
if len(t.KeepPaths) > 0 {
b.Packages, errFilter = t.keepFilter(b.Packages, t.KeepPaths, t.ReverseLogic)
if errFilter != nil {
return fmt.Errorf("unable to filter bundle packages: %w", errFilter)
}
}
if len(t.ExcludePaths) > 0 {
b.Packages, errFilter = t.excludeFilter(b.Packages, t.ExcludePaths, t.ReverseLogic)
if errFilter != nil {
return fmt.Errorf("unable to filter bundle packages: %w", errFilter)
}
}
if t.JMESPath != "" {
b.Packages, errFilter = t.jmespathFilter(b.Packages, t.JMESPath, t.ReverseLogic)
if errFilter != nil {
return fmt.Errorf("unable to filter bundle packages: %w", errFilter)
}
}
if t.RegoPolicy != "" {
b.Packages, errFilter = t.regoFilter(ctx, b.Packages, t.RegoPolicy, t.ReverseLogic)
if errFilter != nil {
return fmt.Errorf("unable to filter bundle packages: %w", errFilter)
}
}
if len(t.CELExpressions) > 0 {
b.Packages, errFilter = t.celFilter(b.Packages, t.CELExpressions, t.ReverseLogic)
if errFilter != nil {
return fmt.Errorf("unable to filter bundle packages: %w", errFilter)
}
}
// Create output writer
writer, err := t.OutputWriter(ctx)
if err != nil {
return fmt.Errorf("unable to open output bundle: %w", err)
}
// Dump all content
if err := bundle.ToContainerWriter(writer, b); err != nil {
return fmt.Errorf("unable to dump bundle content: %w", err)
}
// No error
return nil
}