Skip to content
Snippets Groups Projects
Unverified Commit ee18566e authored by Angus Lees's avatar Angus Lees
Browse files

Improve log description of object

- Move fqname to utils
- Add ResourceNameFor and use it to get a lowercased/pluralised
  version of the resource name
parent 116e9002
No related branches found
No related tags found
No related merge requests found
...@@ -84,7 +84,7 @@ var deleteCmd = &cobra.Command{ ...@@ -84,7 +84,7 @@ var deleteCmd = &cobra.Command{
} }
for _, obj := range objs { for _, obj := range objs {
desc := fmt.Sprintf("%s/%s", obj.GetKind(), fqName(obj)) desc := fmt.Sprintf("%s %s", utils.ResourceNameFor(disco, obj), utils.FqName(obj))
log.Info("Deleting ", desc) log.Info("Deleting ", desc)
c, err := utils.ClientForResource(clientpool, disco, obj, defaultNs) c, err := utils.ClientForResource(clientpool, disco, obj, defaultNs)
......
...@@ -71,7 +71,7 @@ var diffCmd = &cobra.Command{ ...@@ -71,7 +71,7 @@ var diffCmd = &cobra.Command{
diffFound := false diffFound := false
for _, obj := range objs { for _, obj := range objs {
desc := fmt.Sprintf("%s/%s", obj.GetKind(), fqName(obj)) desc := fmt.Sprintf("%s %s", utils.ResourceNameFor(disco, obj), utils.FqName(obj))
log.Debugf("Fetching ", desc) log.Debugf("Fetching ", desc)
c, err := utils.ClientForResource(clientpool, disco, obj, defaultNs) c, err := utils.ClientForResource(clientpool, disco, obj, defaultNs)
......
...@@ -121,7 +121,7 @@ var updateCmd = &cobra.Command{ ...@@ -121,7 +121,7 @@ var updateCmd = &cobra.Command{
utils.SetMetaDataAnnotation(obj, AnnotationGcTag, gcTag) utils.SetMetaDataAnnotation(obj, AnnotationGcTag, gcTag)
} }
desc := fmt.Sprintf("%s/%s", obj.GetKind(), fqName(obj)) desc := fmt.Sprintf("%s %s", utils.ResourceNameFor(disco, obj), utils.FqName(obj))
log.Info("Updating ", desc, dryRunText) log.Info("Updating ", desc, dryRunText)
rc, err := utils.ClientForResource(clientpool, disco, obj, defaultNs) rc, err := utils.ClientForResource(clientpool, disco, obj, defaultNs)
...@@ -177,7 +177,7 @@ var updateCmd = &cobra.Command{ ...@@ -177,7 +177,7 @@ var updateCmd = &cobra.Command{
return err return err
} }
gvk := o.GetObjectKind().GroupVersionKind() gvk := o.GetObjectKind().GroupVersionKind()
desc := fmt.Sprintf("%s/%s (%s)", gvk.Kind, fqName(meta), gvk.GroupVersion()) desc := fmt.Sprintf("%s %s (%s)", utils.ResourceNameFor(disco, o), utils.FqName(meta), gvk.GroupVersion())
log.Debugf("Considering %v for gc", desc) log.Debugf("Considering %v for gc", desc)
if eligibleForGc(meta, gcTag) && !seenUids.Has(string(meta.GetUID())) { if eligibleForGc(meta, gcTag) && !seenUids.Has(string(meta.GetUID())) {
log.Info("Garbage collecting ", desc, dryRunText) log.Info("Garbage collecting ", desc, dryRunText)
...@@ -199,13 +199,6 @@ var updateCmd = &cobra.Command{ ...@@ -199,13 +199,6 @@ var updateCmd = &cobra.Command{
}, },
} }
func fqName(o metav1.Object) string {
if o.GetNamespace() == "" {
return o.GetName()
}
return fmt.Sprintf("%s.%s", o.GetNamespace(), o.GetName())
}
func stringListContains(list []string, value string) bool { func stringListContains(list []string, value string) bool {
for _, item := range list { for _, item := range list {
if item == value { if item == value {
...@@ -222,7 +215,7 @@ func gcDelete(clientpool dynamic.ClientPool, disco discovery.DiscoveryInterface, ...@@ -222,7 +215,7 @@ func gcDelete(clientpool dynamic.ClientPool, disco discovery.DiscoveryInterface,
} }
uid := obj.GetUID() uid := obj.GetUID()
desc := fmt.Sprintf("%s/%s", o.GetObjectKind().GroupVersionKind().Kind, fqName(obj)) desc := fmt.Sprintf("%s %s", utils.ResourceNameFor(disco, o), utils.FqName(obj))
deleteOpts := metav1.DeleteOptions{ deleteOpts := metav1.DeleteOptions{
Preconditions: &metav1.Preconditions{UID: &uid}, Preconditions: &metav1.Preconditions{UID: &uid},
......
...@@ -3,8 +3,11 @@ package utils ...@@ -3,8 +3,11 @@ package utils
import ( import (
"fmt" "fmt"
"strconv" "strconv"
"strings"
log "github.com/sirupsen/logrus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/version" "k8s.io/apimachinery/pkg/version"
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"
) )
...@@ -71,3 +74,31 @@ func SetMetaDataAnnotation(obj metav1.Object, key, value string) { ...@@ -71,3 +74,31 @@ func SetMetaDataAnnotation(obj metav1.Object, key, value string) {
a[key] = value a[key] = value
obj.SetAnnotations(a) obj.SetAnnotations(a)
} }
// ResourceNameFor returns a lowercase plural form of a type, for
// human messages. Returns lowercased kind if discovery lookup fails.
func ResourceNameFor(disco discovery.ServerResourcesInterface, o runtime.Object) string {
gvk := o.GetObjectKind().GroupVersionKind()
rls, err := disco.ServerResourcesForGroupVersion(gvk.GroupVersion().String())
if err != nil {
log.Debugf("Discovery failed for %s: %s, falling back to kind", gvk, err)
return strings.ToLower(gvk.Kind)
}
for _, rl := range rls.APIResources {
if rl.Kind == gvk.Kind {
return rl.Name
}
}
log.Debugf("Discovery failed to find %s, falling back to kind", gvk)
return strings.ToLower(gvk.Kind)
}
// FqName returns "namespace.name"
func FqName(o metav1.Object) string {
if o.GetNamespace() == "" {
return o.GetName()
}
return fmt.Sprintf("%s.%s", o.GetNamespace(), o.GetName())
}
...@@ -3,7 +3,12 @@ package utils ...@@ -3,7 +3,12 @@ package utils
import ( import (
"testing" "testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/version" "k8s.io/apimachinery/pkg/version"
fakediscovery "k8s.io/client-go/discovery/fake"
ktesting "k8s.io/client-go/testing"
) )
func TestParseVersion(t *testing.T) { func TestParseVersion(t *testing.T) {
...@@ -63,3 +68,66 @@ func TestVersionCompare(t *testing.T) { ...@@ -63,3 +68,66 @@ func TestVersionCompare(t *testing.T) {
} }
} }
} }
func TestResourceNameFor(t *testing.T) {
obj := &unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "tests/v1alpha1",
"kind": "Test",
"metadata": map[string]interface{}{
"name": "myname",
"namespace": "mynamespace",
},
},
}
fake := &ktesting.Fake{
Resources: []*metav1.APIResourceList{
{
GroupVersion: "tests/v1alpha1",
APIResources: []metav1.APIResource{
{
Name: "tests",
Kind: "Test",
},
},
},
},
}
disco := &fakediscovery.FakeDiscovery{Fake: fake}
if n := ResourceNameFor(disco, obj); n != "tests" {
t.Errorf("Got resource name %q for %v", n, obj)
}
obj.SetKind("Unknown")
if n := ResourceNameFor(disco, obj); n != "unknown" {
t.Errorf("Got resource name %q for %v", n, obj)
}
obj.SetGroupVersionKind(schema.GroupVersionKind{Group: "unknown", Version: "noversion", Kind: "SomeKind"})
if n := ResourceNameFor(disco, obj); n != "somekind" {
t.Errorf("Got resource name %q for %v", n, obj)
}
}
func TestFqName(t *testing.T) {
obj := &unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "tests/v1alpha1",
"kind": "Test",
"metadata": map[string]interface{}{
"name": "myname",
},
},
}
if n := FqName(obj); n != "myname" {
t.Errorf("Got %q for %v", n, obj)
}
obj.SetNamespace("mynamespace")
if n := FqName(obj); n != "mynamespace.myname" {
t.Errorf("Got %q for %v", n, obj)
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment