Add verb support for discovery client

This commit is contained in:
Dr. Stefan Schimanski
2016-11-17 14:19:03 +01:00
committed by Dr. Stefan Schimanski
parent 4d1d98c49a
commit 458d2b2fe4
18 changed files with 580 additions and 208 deletions

View File

@@ -393,25 +393,40 @@ func StartControllers(s *options.CMServer, rootClientBuilder, clientBuilder cont
namespaceKubeClient := clientBuilder.ClientOrDie("namespace-controller")
namespaceClientPool := dynamic.NewClientPool(rootClientBuilder.ConfigOrDie("namespace-controller"), restMapper, dynamic.LegacyAPIPathResolverFunc)
// TODO: consider using a list-watch + cache here rather than polling
var gvrFn func() ([]schema.GroupVersionResource, error)
gvrFn := func() (map[schema.GroupVersionResource]struct{}, error) {
resources, err := namespaceKubeClient.Discovery().ServerPreferredNamespacedResources()
if err != nil {
// best effort extraction
gvrs, _ := discovery.GroupVersionResources(resources)
return gvrs, fmt.Errorf("failed to get supported namespaced resources: %v", err)
}
gvrs, err := discovery.GroupVersionResources(resources)
if err != nil {
return gvrs, fmt.Errorf("failed to parse supported namespaced resources: %v", err)
}
return gvrs, nil
}
rsrcs, err := namespaceKubeClient.Discovery().ServerResources()
if err != nil {
return fmt.Errorf("failed to get group version resources: %v", err)
}
tprFound := false
searchThirdPartyResource:
for _, rsrcList := range rsrcs {
for ix := range rsrcList.APIResources {
rsrc := &rsrcList.APIResources[ix]
if rsrc.Kind == "ThirdPartyResource" {
gvrFn = namespaceKubeClient.Discovery().ServerPreferredNamespacedResources
tprFound = true
break searchThirdPartyResource
}
}
}
if gvrFn == nil {
gvr, err := namespaceKubeClient.Discovery().ServerPreferredNamespacedResources()
if !tprFound {
gvr, err := gvrFn()
if err != nil {
return fmt.Errorf("failed to get resources: %v", err)
}
gvrFn = func() ([]schema.GroupVersionResource, error) {
gvrFn = func() (map[schema.GroupVersionResource]struct{}, error) {
return gvr, nil
}
}
@@ -548,10 +563,14 @@ func StartControllers(s *options.CMServer, rootClientBuilder, clientBuilder cont
if s.EnableGarbageCollector {
gcClientset := clientBuilder.ClientOrDie("generic-garbage-collector")
groupVersionResources, err := gcClientset.Discovery().ServerPreferredResources()
preferredResources, err := gcClientset.Discovery().ServerPreferredResources()
if err != nil {
return fmt.Errorf("failed to get supported resources from server: %v", err)
}
groupVersionResources, err := discovery.GroupVersionResources(preferredResources)
if err != nil {
glog.Fatalf("Failed to parse supported resources from server: %v", err)
}
config := rootClientBuilder.ConfigOrDie("generic-garbage-collector")
config.ContentConfig.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: metaonly.NewMetadataCodecFactory()}