Merge pull request #28955 from dims/roadmap-extend-all

Automatic merge from submit-queue

Extend all to more resources

Added more things from the list here:
https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/cmd.go#L159

Note, did not add events as it did not seem useful to me. Since
this is just a list of messages generated by the system.

Related to a suggestion in issue #22337
This commit is contained in:
k8s-merge-robot
2016-08-01 10:07:01 -07:00
committed by GitHub
8 changed files with 151 additions and 46 deletions

View File

@@ -236,12 +236,53 @@ func makeInterfacesFor(versionList []unversioned.GroupVersion) func(version unve
}
}
func DiscoveryRESTMapper(clients *ClientCache, delegate meta.RESTMapper) kubectl.ShortcutExpander {
defaultMapper := kubectl.NewShortcutExpander(delegate)
if clients == nil {
return defaultMapper
}
client, err := clients.ClientForVersion(&unversioned.GroupVersion{Version: "v1"})
if err != nil {
return defaultMapper
}
// Check if we have access to server resources
apiResources, err := client.Discovery().ServerResources()
if err != nil {
return defaultMapper
}
availableResources := []unversioned.GroupVersionResource{}
for groupVersionString, resourceList := range apiResources {
currVersion, err := unversioned.ParseGroupVersion(groupVersionString)
if err != nil {
return defaultMapper
}
for _, resource := range resourceList.APIResources {
availableResources = append(availableResources, currVersion.WithResource(resource.Name))
}
}
availableAll := []unversioned.GroupResource{}
for _, requestedResource := range defaultMapper.All {
for _, availableResource := range availableResources {
if requestedResource.Group == availableResource.Group &&
requestedResource.Resource == availableResource.Resource {
availableAll = append(availableAll, requestedResource)
break
}
}
}
return kubectl.ShortcutExpander{All: availableAll, RESTMapper: delegate}
}
// NewFactory creates a factory with the default Kubernetes resources defined
// if optionalClientConfig is nil, then flags will be bound to a new clientcmd.ClientConfig.
// if optionalClientConfig is not nil, then this factory will make use of it.
func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
mapper := kubectl.ShortcutExpander{RESTMapper: registered.RESTMapper()}
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
flags.SetNormalizeFunc(utilflag.WarnWordSepNormalizeFunc) // Warn for "_" flags
@@ -251,6 +292,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
}
clients := NewClientCache(clientConfig)
mapper := DiscoveryRESTMapper(clients, registered.RESTMapper())
return &Factory{
clients: clients,