Files
paralus/pkg/match/match.go
nirav-rafay c66bdc25cd restructure rcloud-base as a single base controller (#37)
* restructure rcloud-base as a single base controller
* updated master.rest
* moved sentry from internal to pkg as it is used by relay
* removing unused rpc and it's dependencies
* Fix usermgmt tests
* Don't redefine variables in rest file
Co-authored-by: Abin Simon <abin.simon@rafay.co>
2022-03-03 17:59:06 +05:30

70 lines
1.3 KiB
Go

package match
import (
"github.com/RafaySystems/rcloud-base/pkg/query"
commonv3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3"
"k8s.io/apimachinery/pkg/labels"
)
// Matcher is the interface for matching objects which implement Metadata interface
type Matcher interface {
Match(meta commonv3.Metadata) bool
}
// New returns new matcher for options
func New(opts ...query.Option) (Matcher, error) {
options := &commonv3.QueryOptions{}
for _, opt := range opts {
opt(options)
}
selector, err := labels.Parse(options.Selector)
if err != nil {
return nil, err
}
return &matcher{
partner: options.Partner,
organization: options.Organization,
project: options.Project,
selector: selector,
name: options.Name,
}, nil
}
type matcher struct {
partner string
organization string
project string
selector labels.Selector
name string
}
var _ Matcher = (*matcher)(nil)
func (m *matcher) Match(meta commonv3.Metadata) bool {
if meta.GetPartner() != m.partner {
return false
}
if meta.GetOrganization() != m.organization {
return false
}
if meta.GetProject() != m.project {
return false
}
if !m.selector.Matches(labels.Set(meta.GetLabels())) {
return false
}
if !(m.name == "") && m.name != meta.GetName() {
return false
}
return true
}