diff --git a/generator/controller_template.go b/generator/controller_template.go index ba3394c9..122a74a7 100644 --- a/generator/controller_template.go +++ b/generator/controller_template.go @@ -157,6 +157,7 @@ func (c *{{.schema.ID}}Controller) AddHandler(ctx context.Context, name string, } func (c *{{.schema.ID}}Controller) AddClusterScopedHandler(ctx context.Context, name, cluster string, handler {{.schema.CodeName}}HandlerFunc) { + resource.PutClusterScoped({{.schema.CodeName}}GroupVersionResource) c.GenericController.AddHandler(ctx, name, func(key string, obj interface{}) (interface{}, error) { if obj == nil { return handler(key, nil) diff --git a/resource/resource.go b/resource/resource.go index 8ed4eb47..710adb61 100644 --- a/resource/resource.go +++ b/resource/resource.go @@ -7,11 +7,17 @@ import ( ) //rancherTypes is a set of all types generated by rancher +//clusterScopedTypes is a set of all types that have been added by a clusterScoped handler var ( rancherTypes = struct { sync.RWMutex m map[schema.GroupVersionResource]bool }{m: make(map[schema.GroupVersionResource]bool)} + + clusterScopedTypes = struct { + sync.RWMutex + m map[schema.GroupVersionResource]bool + }{m: make(map[schema.GroupVersionResource]bool)} ) //Get returns a copy of the set of rancherTypes @@ -25,6 +31,16 @@ func Get() map[schema.GroupVersionResource]bool { return targetMap } +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 +} + //Put adds an object to the set and panic on collision func Put(key schema.GroupVersionResource) { rancherTypes.Lock() @@ -36,3 +52,10 @@ func Put(key schema.GroupVersionResource) { } rancherTypes.m[key] = true } + +//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 +}