mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #46022 from xilabao/add-rolebinding-to-describe-command
Automatic merge from submit-queue add rolebinding/clusterrolebinding to describe.go **What this PR does / why we need it**: ``` ./cluster/kubectl.sh describe clusterrolebinding system:kube-dns Name: system:kube-dns Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate=true Role: Kind: ClusterRole Name: system:kube-dns Subjects: Kind Name Namespace ---- ---- --------- ServiceAccount kube-dns kube-system ``` **Which issue this PR fixes**: **Special notes for your reviewer**: **Release note**: ```release-note NONE ```
This commit is contained in:
commit
e823e60bbf
@ -59,6 +59,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
versionedextension "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||
"k8s.io/kubernetes/pkg/apis/policy"
|
||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||
"k8s.io/kubernetes/pkg/apis/storage"
|
||||
storageutil "k8s.io/kubernetes/pkg/apis/storage/util"
|
||||
versionedclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||
@ -143,6 +144,8 @@ func describerMap(c clientset.Interface) map[schema.GroupKind]printers.Describer
|
||||
certificates.Kind("CertificateSigningRequest"): &CertificateSigningRequestDescriber{c},
|
||||
storage.Kind("StorageClass"): &StorageClassDescriber{c},
|
||||
policy.Kind("PodDisruptionBudget"): &PodDisruptionBudgetDescriber{c},
|
||||
rbac.Kind("RoleBinding"): &RoleBindingDescriber{c},
|
||||
rbac.Kind("ClusterRoleBinding"): &ClusterRoleBindingDescriber{c},
|
||||
}
|
||||
|
||||
return m
|
||||
@ -2110,6 +2113,70 @@ func describeServiceAccount(serviceAccount *api.ServiceAccount, tokens []api.Sec
|
||||
})
|
||||
}
|
||||
|
||||
// RoleBindingDescriber generates information about a node.
|
||||
type RoleBindingDescriber struct {
|
||||
clientset.Interface
|
||||
}
|
||||
|
||||
func (d *RoleBindingDescriber) Describe(namespace, name string, describerSettings printers.DescriberSettings) (string, error) {
|
||||
binding, err := d.Rbac().RoleBindings(namespace).Get(name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return tabbedString(func(out io.Writer) error {
|
||||
w := NewPrefixWriter(out)
|
||||
w.Write(LEVEL_0, "Name:\t%s\n", binding.Name)
|
||||
printLabelsMultiline(w, "Labels", binding.Labels)
|
||||
printAnnotationsMultiline(w, "Annotations", binding.Annotations)
|
||||
|
||||
w.Write(LEVEL_0, "Role:\n")
|
||||
w.Write(LEVEL_1, "Kind:\t%s\n", binding.RoleRef.Kind)
|
||||
w.Write(LEVEL_1, "Name:\t%s\n", binding.RoleRef.Name)
|
||||
|
||||
w.Write(LEVEL_0, "Subjects:\n")
|
||||
w.Write(LEVEL_1, "Kind\tName\tNamespace\n")
|
||||
w.Write(LEVEL_1, "----\t----\t---------\n")
|
||||
for _, s := range binding.Subjects {
|
||||
w.Write(LEVEL_1, "%s\t%s\t%s\n", s.Kind, s.Name, s.Namespace)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// ClusterRoleBindingDescriber generates information about a node.
|
||||
type ClusterRoleBindingDescriber struct {
|
||||
clientset.Interface
|
||||
}
|
||||
|
||||
func (d *ClusterRoleBindingDescriber) Describe(namespace, name string, describerSettings printers.DescriberSettings) (string, error) {
|
||||
binding, err := d.Rbac().ClusterRoleBindings().Get(name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return tabbedString(func(out io.Writer) error {
|
||||
w := NewPrefixWriter(out)
|
||||
w.Write(LEVEL_0, "Name:\t%s\n", binding.Name)
|
||||
printLabelsMultiline(w, "Labels", binding.Labels)
|
||||
printAnnotationsMultiline(w, "Annotations", binding.Annotations)
|
||||
|
||||
w.Write(LEVEL_0, "Role:\n")
|
||||
w.Write(LEVEL_1, "Kind:\t%s\n", binding.RoleRef.Kind)
|
||||
w.Write(LEVEL_1, "Name:\t%s\n", binding.RoleRef.Name)
|
||||
|
||||
w.Write(LEVEL_0, "Subjects:\n")
|
||||
w.Write(LEVEL_1, "Kind\tName\tNamespace\n")
|
||||
w.Write(LEVEL_1, "----\t----\t---------\n")
|
||||
for _, s := range binding.Subjects {
|
||||
w.Write(LEVEL_1, "%s\t%s\t%s\n", s.Kind, s.Name, s.Namespace)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// NodeDescriber generates information about a node.
|
||||
type NodeDescriber struct {
|
||||
clientset.Interface
|
||||
|
Loading…
Reference in New Issue
Block a user