Merge pull request #78 from crobby/fixviewlinks

[2.6] Cherry-picking fix for view link on management crds
This commit is contained in:
Colleen Murphy 2023-02-24 08:51:20 -08:00 committed by GitHub
commit 1a36a52a25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 13 deletions

View File

@ -30,21 +30,32 @@ func DefaultTemplate(clientGetter proxy.ClientGetter,
func selfLink(gvr schema2.GroupVersionResource, meta metav1.Object) (prefix string) { func selfLink(gvr schema2.GroupVersionResource, meta metav1.Object) (prefix string) {
buf := &strings.Builder{} buf := &strings.Builder{}
if gvr.Group == "" { if gvr.Group == "management.cattle.io" && gvr.Version == "v3" {
buf.WriteString("/api/v1/") buf.WriteString("/v1/")
} else {
buf.WriteString("/apis/")
buf.WriteString(gvr.Group) buf.WriteString(gvr.Group)
buf.WriteString("/") buf.WriteString(".")
buf.WriteString(gvr.Version) buf.WriteString(gvr.Resource)
buf.WriteString("/") if meta.GetNamespace() != "" {
buf.WriteString("/")
buf.WriteString(meta.GetNamespace())
}
} else {
if gvr.Group == "" {
buf.WriteString("/api/v1/")
} else {
buf.WriteString("/apis/")
buf.WriteString(gvr.Group)
buf.WriteString("/")
buf.WriteString(gvr.Version)
buf.WriteString("/")
}
if meta.GetNamespace() != "" {
buf.WriteString("namespaces/")
buf.WriteString(meta.GetNamespace())
buf.WriteString("/")
}
buf.WriteString(gvr.Resource)
} }
if meta.GetNamespace() != "" {
buf.WriteString("namespaces/")
buf.WriteString(meta.GetNamespace())
buf.WriteString("/")
}
buf.WriteString(gvr.Resource)
buf.WriteString("/") buf.WriteString("/")
buf.WriteString(meta.GetName()) buf.WriteString(meta.GetName())
return buf.String() return buf.String()

View File

@ -7,6 +7,7 @@ import (
"github.com/rancher/apiserver/pkg/types" "github.com/rancher/apiserver/pkg/types"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
schema2 "k8s.io/apimachinery/pkg/runtime/schema"
) )
func Test_includeFields(t *testing.T) { func Test_includeFields(t *testing.T) {
@ -541,3 +542,73 @@ func Test_excludeValues(t *testing.T) {
}) })
} }
} }
func Test_selfLink(t *testing.T) {
tests := []struct {
name string
group string
version string
resource string
resourceName string
resourceNamespace string
want string
}{
{
name: "empty group",
group: "",
version: "v1",
resource: "pods",
resourceName: "rancher",
resourceNamespace: "cattle-system",
want: "/api/v1/namespaces/cattle-system/pods/rancher",
},
{
name: "third party crd",
group: "fake.group.io",
version: "v4",
resource: "new-crd",
resourceName: "new-resource",
resourceNamespace: "random-ns",
want: "/apis/fake.group.io/v4/namespaces/random-ns/new-crd/new-resource",
},
{
name: "non-namespaced third party crd",
group: "fake.group.io",
version: "v4",
resource: "new-crd",
resourceName: "new-resource",
want: "/apis/fake.group.io/v4/new-crd/new-resource",
},
{
name: "rancher crd, non namespaced",
group: "management.cattle.io",
version: "v3",
resource: "cluster",
resourceName: "c-123xyz",
want: "/v1/management.cattle.io.cluster/c-123xyz",
},
{
name: "rancher crd, namespaced",
group: "management.cattle.io",
version: "v3",
resource: "catalogtemplates",
resourceName: "built-in",
resourceNamespace: "cattle-global-data",
want: "/v1/management.cattle.io.catalogtemplates/cattle-global-data/built-in",
},
}
for _, test := range tests {
test := test
t.Run(test.name, func(t *testing.T) {
gvr := schema2.GroupVersionResource{
Group: test.group,
Version: test.version,
Resource: test.resource,
}
obj := unstructured.Unstructured{}
obj.SetName(test.resourceName)
obj.SetNamespace(test.resourceNamespace)
assert.Equal(t, test.want, selfLink(gvr, &obj), "did not get expected prefix for object")
})
}
}