2019-04-19 02:02:49 +00:00
|
|
|
package resource
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
|
|
)
|
|
|
|
|
|
|
|
//rancherTypes is a set of all types generated by rancher
|
2019-05-28 17:25:48 +00:00
|
|
|
//clusterScopedTypes is a set of all types that have been added by a clusterScoped handler
|
2019-04-19 02:02:49 +00:00
|
|
|
var (
|
|
|
|
rancherTypes = struct {
|
|
|
|
sync.RWMutex
|
|
|
|
m map[schema.GroupVersionResource]bool
|
|
|
|
}{m: make(map[schema.GroupVersionResource]bool)}
|
2019-05-28 17:25:48 +00:00
|
|
|
|
|
|
|
clusterScopedTypes = struct {
|
|
|
|
sync.RWMutex
|
|
|
|
m map[schema.GroupVersionResource]bool
|
|
|
|
}{m: make(map[schema.GroupVersionResource]bool)}
|
2019-04-19 02:02:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
//Get returns a copy of the set of rancherTypes
|
|
|
|
func Get() map[schema.GroupVersionResource]bool {
|
|
|
|
rancherTypes.RLock()
|
|
|
|
defer rancherTypes.RUnlock()
|
|
|
|
targetMap := make(map[schema.GroupVersionResource]bool, len(rancherTypes.m))
|
|
|
|
for key, value := range rancherTypes.m {
|
|
|
|
targetMap[key] = value
|
|
|
|
}
|
|
|
|
return targetMap
|
|
|
|
}
|
|
|
|
|
2019-05-28 17:25:48 +00:00
|
|
|
func GetClusterScopedTypes() map[schema.GroupVersionResource]bool {
|
|
|
|
clusterScopedTypes.Lock()
|
|
|
|
defer clusterScopedTypes.Unlock()
|
|
|
|
targetMap := make(map[schema.GroupVersionResource]bool, len(clusterScopedTypes.m))
|
|
|
|
for key, value := range clusterScopedTypes.m {
|
|
|
|
targetMap[key] = value
|
|
|
|
}
|
|
|
|
return targetMap
|
|
|
|
}
|
|
|
|
|
2019-04-19 02:02:49 +00:00
|
|
|
//Put adds an object to the set and panic on collision
|
|
|
|
func Put(key schema.GroupVersionResource) {
|
|
|
|
rancherTypes.Lock()
|
|
|
|
defer rancherTypes.Unlock()
|
|
|
|
_, exists := rancherTypes.m[key]
|
|
|
|
if exists {
|
|
|
|
//only used in an init function
|
|
|
|
panic("key exists in rancherTypes")
|
|
|
|
}
|
|
|
|
rancherTypes.m[key] = true
|
|
|
|
}
|
2019-05-28 17:25:48 +00:00
|
|
|
|
|
|
|
//PutClusterScoped adds a object that contains a cluster scoped handler to the set
|
|
|
|
func PutClusterScoped(key schema.GroupVersionResource) {
|
|
|
|
clusterScopedTypes.Lock()
|
|
|
|
defer clusterScopedTypes.Unlock()
|
|
|
|
clusterScopedTypes.m[key] = true
|
|
|
|
}
|