vac support ResourceDescriber
Co-authored-by: Arda Güçlü <aguclu@redhat.com> Kubernetes-commit: d2b16b2a21c0669f9a7b60efbd632da25aef8f19
This commit is contained in:
parent
136d701b1b
commit
654e5eb2dc
|
@ -52,6 +52,7 @@ import (
|
|||
rbacv1 "k8s.io/api/rbac/v1"
|
||||
schedulingv1 "k8s.io/api/scheduling/v1"
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
"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: storagev1.GroupName, Kind: "StorageClass"}: &StorageClassDescriber{c},
|
||||
{Group: storagev1.GroupName, Kind: "CSINode"}: &CSINodeDescriber{c},
|
||||
{Group: storagev1alpha1.GroupName, Kind: "VolumeAttributesClass"}: &VolumeAttributesClassDescriber{c},
|
||||
{Group: policyv1beta1.GroupName, Kind: "PodDisruptionBudget"}: &PodDisruptionBudgetDescriber{c},
|
||||
{Group: policyv1.GroupName, Kind: "PodDisruptionBudget"}: &PodDisruptionBudgetDescriber{c},
|
||||
{Group: rbacv1.GroupName, Kind: "Role"}: &RoleDescriber{c},
|
||||
|
@ -410,6 +412,7 @@ func init() {
|
|||
describeServiceAccount,
|
||||
describeStatefulSet,
|
||||
describeStorageClass,
|
||||
describeVolumeAttributesClass,
|
||||
)
|
||||
if err != nil {
|
||||
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 {
|
||||
clientset.Interface
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ import (
|
|||
policyv1beta1 "k8s.io/api/policy/v1beta1"
|
||||
schedulingv1 "k8s.io/api/scheduling/v1"
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
|
||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
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) {
|
||||
limit := utilpointer.Int32Ptr(int32(2))
|
||||
f := fake.NewSimpleClientset(&storagev1.CSINode{
|
||||
|
|
|
@ -45,6 +45,7 @@ import (
|
|||
rbacv1beta1 "k8s.io/api/rbac/v1beta1"
|
||||
schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1"
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
|
||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
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(rbacv1.SchemeGroupVersion, rbacv1beta1.SchemeGroupVersion, rbacv1alpha1.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))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue