mirror of
https://github.com/rancher/steve.git
synced 2025-09-12 04:39:05 +00:00
Index arbitrary labels (#317)
* Add more fields to index when sql-caching is on. * Restore the gvkKey helper, add event fields. The UI team wasn't sure whether the event fields should go in the empty-string group or in 'events.k8s.io', so let's go with both until/unless specified otherwise. * More fixes to the fields to index: - Remove the erroneously added management.cattle.io.nodes fields - Use the builtin Event class, not events.k8s.io (by looking at the dashboard client code) * Start on the virtual-field work. * Map `Event.type` to `Event._type` for indexing. * Add a unit test for field replacement for Event.type * Add label processing. * Don't test for transformation of event objects in the common module. * Parse metadata.label queries differently. * Improve a variable name that turned out to not be temporary. * No need to specifically cache certain labels, as all are now cached. * Add a test to verify simple label (m.labels.foo=blah) queries work. * 'addLabelFields' never returns an error. * Delete superseded function. * Was calling 'addLabelFields' one time too many. * Start using k8s ParseToRequirements * Pull in the k8s parser. * Successfully test for quotation marks. * Add quoted strings to the lexer. * Move to a forked k8s label lexer to include non-label tests. * Improve and test the way quoted strings in the query are detected. * Reinstate the original Apache license in the derived code. Following clause 4.3 of the Apache license: "You must cause any modified files to carry prominent notices stating that You changed the files..." * Ignore case for operators. * Test IN multiple-target-values * Test the not-in operator. * Ignore case for operators. SQL is case-insensitive on field names and values, so this just adds consistency. * Added tests for parsing EXISTS and NOT-EXISTS queries. * Parse less-than and greater-than ops * Lasso's `CacheFor` now takes a `watchable` argument. * Support 'gt' and 'lt' as synonyms for '<' and '>'. I see both types of operators being bandied about -- it's easy to support the aliases. * typo fix * Have the filter parser allow exist tests only on labels. Also reduce the case where there's no namespace function. * Specify hard-wired fields to index alphabetically. * Remove unused variable. * Parser: 'metadata.labels[FIELD]' is valid * Pull in new gvk fields from main (and keep in alpha order). * Fixed a couple of drops done during the last rebase. * Add a reminder to keep the entries in alpha order. * Test TransformLabels * Remove TransformLabels * Remove unused/unneeded code. * Describe diffs between our label-selector parser and upstream's. * Use the merged lasso 46333 work. * Drop unused field. * Tighten up the code. * Specify which commit the label selector parser is based on. * Allow both single-quoted and double-quoted value matching, doc difference. * More review-driven changes: - Stricter processing of m.l.name keys: Require ending close-bracket for a start-bracket - Comment fix - Moving sql processing from lasso to steve: some changes missed in rebase * Drop support for double-quotes for string values. For now on only single-quotes (or none where possible) are allowed. * Renaming and dropping an init block. * Quoted strings are dropped from the filter queries In particular, label values have a specific syntax: they must start and end with a letter, and their innards may contain only alnums '.', '-' and '_'. So there's no need for quoting. And that means now that `=` and `==` do exact matches, and the `~` operator does a partial match. `!=` and `!~` negate -- note that `!~` is a stricter operation than `!=`, in that given a set of possible string values, `!=` will accept more of them than `!~`. Maybe I shouldn't have gone here, but these operators reminded me of learning about `nicht durfen` and `nicht sollen` in German, or something like that. * Move a constant definition to the module level. * Remove commented-out code. * Remove unused func and adjacent redundant comment.
This commit is contained in:
@@ -57,8 +57,9 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
paramScheme = runtime.NewScheme()
|
||||
paramCodec = runtime.NewParameterCodec(paramScheme)
|
||||
paramScheme = runtime.NewScheme()
|
||||
paramCodec = runtime.NewParameterCodec(paramScheme)
|
||||
// Please keep the gvkKey entries in alphabetical order, on a field-by-field basis
|
||||
typeSpecificIndexedFields = map[string][][]string{
|
||||
gvkKey("", "v1", "ConfigMap"): {
|
||||
{"metadata", "labels[harvesterhci.io/cloud-init-template]"}},
|
||||
@@ -307,11 +308,13 @@ func (s *Store) initializeNamespaceCache() error {
|
||||
// get any type-specific fields that steve is interested in
|
||||
fields = append(fields, getFieldForGVK(gvk)...)
|
||||
|
||||
// get the type-specifc transform func
|
||||
// get the type-specific transform func
|
||||
transformFunc := s.transformBuilder.GetTransformFunc(gvk)
|
||||
|
||||
// get the ns informer
|
||||
nsInformer, err := s.cacheFactory.CacheFor(fields, transformFunc, &tablelistconvert.Client{ResourceInterface: client}, attributes.GVK(&nsSchema), false, true)
|
||||
tableClient := &tablelistconvert.Client{ResourceInterface: client}
|
||||
attrs := attributes.GVK(&nsSchema)
|
||||
nsInformer, err := s.cacheFactory.CacheFor(fields, transformFunc, tableClient, attrs, false, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -750,8 +753,10 @@ func (s *Store) ListByPartitions(apiOp *types.APIRequest, schema *types.APISchem
|
||||
fields := getFieldsFromSchema(schema)
|
||||
fields = append(fields, getFieldForGVK(gvk)...)
|
||||
transformFunc := s.transformBuilder.GetTransformFunc(gvk)
|
||||
|
||||
inf, err := s.cacheFactory.CacheFor(fields, transformFunc, &tablelistconvert.Client{ResourceInterface: client}, attributes.GVK(schema), attributes.Namespaced(schema), controllerschema.IsListWatchable(schema))
|
||||
tableClient := &tablelistconvert.Client{ResourceInterface: client}
|
||||
attrs := attributes.GVK(schema)
|
||||
ns := attributes.Namespaced(schema)
|
||||
inf, err := s.cacheFactory.CacheFor(fields, transformFunc, tableClient, attrs, ns, controllerschema.IsListWatchable(schema))
|
||||
if err != nil {
|
||||
return nil, 0, "", err
|
||||
}
|
||||
|
Reference in New Issue
Block a user