vac support ResourceDescriber
Co-authored-by: Arda Güçlü <aguclu@redhat.com>
This commit is contained in:
		@@ -52,6 +52,7 @@ import (
 | 
				
			|||||||
	rbacv1 "k8s.io/api/rbac/v1"
 | 
						rbacv1 "k8s.io/api/rbac/v1"
 | 
				
			||||||
	schedulingv1 "k8s.io/api/scheduling/v1"
 | 
						schedulingv1 "k8s.io/api/scheduling/v1"
 | 
				
			||||||
	storagev1 "k8s.io/api/storage/v1"
 | 
						storagev1 "k8s.io/api/storage/v1"
 | 
				
			||||||
 | 
						storagev1alpha1 "k8s.io/api/storage/v1alpha1"
 | 
				
			||||||
	apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
						apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
@@ -227,6 +228,7 @@ func describerMap(clientConfig *rest.Config) (map[schema.GroupKind]ResourceDescr
 | 
				
			|||||||
		{Group: certificatesv1beta1.GroupName, Kind: "CertificateSigningRequest"}: &CertificateSigningRequestDescriber{c},
 | 
							{Group: certificatesv1beta1.GroupName, Kind: "CertificateSigningRequest"}: &CertificateSigningRequestDescriber{c},
 | 
				
			||||||
		{Group: storagev1.GroupName, Kind: "StorageClass"}:                        &StorageClassDescriber{c},
 | 
							{Group: storagev1.GroupName, Kind: "StorageClass"}:                        &StorageClassDescriber{c},
 | 
				
			||||||
		{Group: storagev1.GroupName, Kind: "CSINode"}:                             &CSINodeDescriber{c},
 | 
							{Group: storagev1.GroupName, Kind: "CSINode"}:                             &CSINodeDescriber{c},
 | 
				
			||||||
 | 
							{Group: storagev1alpha1.GroupName, Kind: "VolumeAttributesClass"}:         &VolumeAttributesClassDescriber{c},
 | 
				
			||||||
		{Group: policyv1beta1.GroupName, Kind: "PodDisruptionBudget"}:             &PodDisruptionBudgetDescriber{c},
 | 
							{Group: policyv1beta1.GroupName, Kind: "PodDisruptionBudget"}:             &PodDisruptionBudgetDescriber{c},
 | 
				
			||||||
		{Group: policyv1.GroupName, Kind: "PodDisruptionBudget"}:                  &PodDisruptionBudgetDescriber{c},
 | 
							{Group: policyv1.GroupName, Kind: "PodDisruptionBudget"}:                  &PodDisruptionBudgetDescriber{c},
 | 
				
			||||||
		{Group: rbacv1.GroupName, Kind: "Role"}:                                   &RoleDescriber{c},
 | 
							{Group: rbacv1.GroupName, Kind: "Role"}:                                   &RoleDescriber{c},
 | 
				
			||||||
@@ -410,6 +412,7 @@ func init() {
 | 
				
			|||||||
		describeServiceAccount,
 | 
							describeServiceAccount,
 | 
				
			||||||
		describeStatefulSet,
 | 
							describeStatefulSet,
 | 
				
			||||||
		describeStorageClass,
 | 
							describeStorageClass,
 | 
				
			||||||
 | 
							describeVolumeAttributesClass,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		klog.Fatalf("Cannot register describers: %v", err)
 | 
							klog.Fatalf("Cannot register describers: %v", err)
 | 
				
			||||||
@@ -4686,6 +4689,40 @@ func describeStorageClass(sc *storagev1.StorageClass, events *corev1.EventList)
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type VolumeAttributesClassDescriber struct {
 | 
				
			||||||
 | 
						clientset.Interface
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d *VolumeAttributesClassDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
 | 
				
			||||||
 | 
						vac, err := d.StorageV1alpha1().VolumeAttributesClasses().Get(context.TODO(), name, metav1.GetOptions{})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var events *corev1.EventList
 | 
				
			||||||
 | 
						if describerSettings.ShowEvents {
 | 
				
			||||||
 | 
							events, _ = searchEvents(d.CoreV1(), vac, describerSettings.ChunkSize)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return describeVolumeAttributesClass(vac, events)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func describeVolumeAttributesClass(vac *storagev1alpha1.VolumeAttributesClass, events *corev1.EventList) (string, error) {
 | 
				
			||||||
 | 
						return tabbedString(func(out io.Writer) error {
 | 
				
			||||||
 | 
							w := NewPrefixWriter(out)
 | 
				
			||||||
 | 
							w.Write(LEVEL_0, "Name:\t%s\n", vac.Name)
 | 
				
			||||||
 | 
							w.Write(LEVEL_0, "Annotations:\t%s\n", labels.FormatLabels(vac.Annotations))
 | 
				
			||||||
 | 
							w.Write(LEVEL_0, "DriverName:\t%s\n", vac.DriverName)
 | 
				
			||||||
 | 
							w.Write(LEVEL_0, "Parameters:\t%s\n", labels.FormatLabels(vac.Parameters))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if events != nil {
 | 
				
			||||||
 | 
								DescribeEvents(events, w)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CSINodeDescriber struct {
 | 
					type CSINodeDescriber struct {
 | 
				
			||||||
	clientset.Interface
 | 
						clientset.Interface
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,7 @@ import (
 | 
				
			|||||||
	policyv1beta1 "k8s.io/api/policy/v1beta1"
 | 
						policyv1beta1 "k8s.io/api/policy/v1beta1"
 | 
				
			||||||
	schedulingv1 "k8s.io/api/scheduling/v1"
 | 
						schedulingv1 "k8s.io/api/scheduling/v1"
 | 
				
			||||||
	storagev1 "k8s.io/api/storage/v1"
 | 
						storagev1 "k8s.io/api/storage/v1"
 | 
				
			||||||
 | 
						storagev1alpha1 "k8s.io/api/storage/v1alpha1"
 | 
				
			||||||
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
@@ -3453,6 +3454,38 @@ func TestDescribeStorageClass(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDescribeVolumeAttributesClass(t *testing.T) {
 | 
				
			||||||
 | 
						expectedOut := `Name:         foo
 | 
				
			||||||
 | 
					Annotations:  name=bar
 | 
				
			||||||
 | 
					DriverName:   my-driver
 | 
				
			||||||
 | 
					Parameters:   param1=value1,param2=value2
 | 
				
			||||||
 | 
					Events:       <none>
 | 
				
			||||||
 | 
					`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						f := fake.NewSimpleClientset(&storagev1alpha1.VolumeAttributesClass{
 | 
				
			||||||
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
 | 
								Name:            "foo",
 | 
				
			||||||
 | 
								ResourceVersion: "4",
 | 
				
			||||||
 | 
								Annotations: map[string]string{
 | 
				
			||||||
 | 
									"name": "bar",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							DriverName: "my-driver",
 | 
				
			||||||
 | 
							Parameters: map[string]string{
 | 
				
			||||||
 | 
								"param1": "value1",
 | 
				
			||||||
 | 
								"param2": "value2",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						s := VolumeAttributesClassDescriber{f}
 | 
				
			||||||
 | 
						out, err := s.Describe("", "foo", DescriberSettings{ShowEvents: true})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if out != expectedOut {
 | 
				
			||||||
 | 
							t.Errorf("expected:\n %s\n but got output:\n %s diff:\n%s", expectedOut, out, cmp.Diff(out, expectedOut))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestDescribeCSINode(t *testing.T) {
 | 
					func TestDescribeCSINode(t *testing.T) {
 | 
				
			||||||
	limit := utilpointer.Int32Ptr(int32(2))
 | 
						limit := utilpointer.Int32Ptr(int32(2))
 | 
				
			||||||
	f := fake.NewSimpleClientset(&storagev1.CSINode{
 | 
						f := fake.NewSimpleClientset(&storagev1.CSINode{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,7 @@ import (
 | 
				
			|||||||
	rbacv1beta1 "k8s.io/api/rbac/v1beta1"
 | 
						rbacv1beta1 "k8s.io/api/rbac/v1beta1"
 | 
				
			||||||
	schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
 | 
						schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
 | 
				
			||||||
	storagev1 "k8s.io/api/storage/v1"
 | 
						storagev1 "k8s.io/api/storage/v1"
 | 
				
			||||||
 | 
						storagev1alpha1 "k8s.io/api/storage/v1alpha1"
 | 
				
			||||||
	storagev1beta1 "k8s.io/api/storage/v1beta1"
 | 
						storagev1beta1 "k8s.io/api/storage/v1beta1"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1"
 | 
						metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1"
 | 
				
			||||||
@@ -78,5 +79,5 @@ func init() {
 | 
				
			|||||||
	utilruntime.Must(Scheme.SetVersionPriority(policyv1beta1.SchemeGroupVersion, policyv1.SchemeGroupVersion))
 | 
						utilruntime.Must(Scheme.SetVersionPriority(policyv1beta1.SchemeGroupVersion, policyv1.SchemeGroupVersion))
 | 
				
			||||||
	utilruntime.Must(Scheme.SetVersionPriority(rbacv1.SchemeGroupVersion, rbacv1beta1.SchemeGroupVersion, rbacv1alpha1.SchemeGroupVersion))
 | 
						utilruntime.Must(Scheme.SetVersionPriority(rbacv1.SchemeGroupVersion, rbacv1beta1.SchemeGroupVersion, rbacv1alpha1.SchemeGroupVersion))
 | 
				
			||||||
	utilruntime.Must(Scheme.SetVersionPriority(schedulingv1alpha1.SchemeGroupVersion))
 | 
						utilruntime.Must(Scheme.SetVersionPriority(schedulingv1alpha1.SchemeGroupVersion))
 | 
				
			||||||
	utilruntime.Must(Scheme.SetVersionPriority(storagev1.SchemeGroupVersion, storagev1beta1.SchemeGroupVersion))
 | 
						utilruntime.Must(Scheme.SetVersionPriority(storagev1.SchemeGroupVersion, storagev1beta1.SchemeGroupVersion, storagev1alpha1.SchemeGroupVersion))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user