Support subresource match

Signed-off-by: Shiming Zhang <wzshiming@foxmail.com>
This commit is contained in:
Shiming Zhang
2021-04-09 12:55:57 +08:00
parent 2c9f02c329
commit 58833d652d

View File

@@ -20,6 +20,7 @@ import (
"fmt"
"reflect"
"sort"
"strings"
"sync"
jsonpatch "github.com/evanphx/json-patch"
@@ -509,12 +510,8 @@ func (r *SimpleReactor) Handles(action Action) bool {
if !verbCovers {
return false
}
resourceCovers := r.Resource == "*" || r.Resource == action.GetResource().Resource
if !resourceCovers {
return false
}
return true
return resourceCovers(r.Resource, action)
}
func (r *SimpleReactor) React(action Action) (bool, runtime.Object, error) {
@@ -530,12 +527,7 @@ type SimpleWatchReactor struct {
}
func (r *SimpleWatchReactor) Handles(action Action) bool {
resourceCovers := r.Resource == "*" || r.Resource == action.GetResource().Resource
if !resourceCovers {
return false
}
return true
return resourceCovers(r.Resource, action)
}
func (r *SimpleWatchReactor) React(action Action) (bool, watch.Interface, error) {
@@ -551,14 +543,27 @@ type SimpleProxyReactor struct {
}
func (r *SimpleProxyReactor) Handles(action Action) bool {
resourceCovers := r.Resource == "*" || r.Resource == action.GetResource().Resource
if !resourceCovers {
return false
}
return true
return resourceCovers(r.Resource, action)
}
func (r *SimpleProxyReactor) React(action Action) (bool, restclient.ResponseWrapper, error) {
return r.Reaction(action)
}
func resourceCovers(resource string, action Action) bool {
if resource == "*" {
return true
}
if resource == action.GetResource().Resource {
return true
}
if index := strings.Index(resource, "/"); index != -1 &&
resource[:index] == action.GetResource().Resource &&
resource[index+1:] == action.GetSubresource() {
return true
}
return false
}