mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 10:58:35 +08:00
48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package common
|
|
|
|
import api "k8s.io/api/core/v1"
|
|
|
|
// NamespaceQuery is a query for namespaces of a list of objects.
|
|
// There's three cases:
|
|
// 1. No namespace selected: this means "user namespaces" query, i.e., all except kube-system
|
|
// 2. Single namespace selected: this allows for optimizations when querying backends
|
|
// 3. More than one namespace selected: resources from all namespaces are queried and then
|
|
// filtered here.
|
|
type NamespaceQuery struct {
|
|
Namespaces []string
|
|
}
|
|
|
|
// ToRequestParam returns K8s API namespace query for list of objects from this namespaces.
|
|
// This is an optimization to query for single namespace if one was selected and for all
|
|
// namespaces otherwise.
|
|
func (n *NamespaceQuery) ToRequestParam() string {
|
|
if len(n.Namespaces) == 1 {
|
|
return n.Namespaces[0]
|
|
}
|
|
return api.NamespaceAll
|
|
}
|
|
|
|
// Matches returns true when the given namespace matches this query.
|
|
func (n *NamespaceQuery) Matches(namespace string) bool {
|
|
if len(n.Namespaces) == 0 {
|
|
return true
|
|
}
|
|
|
|
for _, queryNamespace := range n.Namespaces {
|
|
if namespace == queryNamespace {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// NewSameNamespaceQuery creates new namespace query that queries single namespace.
|
|
func NewSameNamespaceQuery(namespace string) *NamespaceQuery {
|
|
return &NamespaceQuery{[]string{namespace}}
|
|
}
|
|
|
|
// NewNamespaceQuery creates new query for given namespaces.
|
|
func NewNamespaceQuery(namespaces []string) *NamespaceQuery {
|
|
return &NamespaceQuery{namespaces}
|
|
}
|