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"
|
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))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue