Merge pull request #52545 from liggitt/automated-cherry-pick-of-#50012-upstream-release-1.7

Automatic merge from submit-queue.

Automated cherry pick of #50012

Cherry pick of #50012 on release-1.7.

#50012: use specified discovery information if possible

```release-note
custom resources that use unconventional pluralization now work properly with kubectl
```

Kubernetes-commit: dd388c7e9bb7e85257424761541e57a297d89de9
This commit is contained in:
Kubernetes Publisher
2017-10-02 00:49:41 -07:00
2 changed files with 65 additions and 54 deletions

104
Godeps/Godeps.json generated
View File

@@ -312,211 +312,211 @@
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apimachinery",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/openapi",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/rand",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "0b160d81c3788c4d2050dfd0bd4d42eae448388b"
"Rev": "7c52ae47c4b9ce83b70f4f6f0c2f19cdb4db2734"
}
]
}

View File

@@ -96,8 +96,19 @@ func NewRESTMapper(groupResources []*APIGroupResources, versionInterfaces meta.V
if !resource.Namespaced {
scope = meta.RESTScopeRoot
}
versionMapper.Add(gv.WithKind(resource.Kind), scope)
// TODO only do this if it supports listing
// this is for legacy resources and servers which don't list singular forms. For those we must still guess.
if len(resource.SingularName) == 0 {
versionMapper.Add(gv.WithKind(resource.Kind), scope)
// TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior
versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope)
continue
}
plural := gv.WithResource(resource.Name)
singular := gv.WithResource(resource.SingularName)
versionMapper.AddSpecific(gv.WithKind(resource.Kind), plural, singular, scope)
// TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior
versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope)
}
// TODO why is this type not in discovery (at least for "v1")