Simplify kubectl describe code

This commit is contained in:
Daniel Smith 2014-11-13 17:42:50 -08:00
parent d004939b74
commit d153b98544
2 changed files with 18 additions and 80 deletions

View File

@ -38,29 +38,13 @@ type Describer interface {
func DescriberFor(kind string, c *client.Client) (Describer, bool) { func DescriberFor(kind string, c *client.Client) (Describer, bool) {
switch kind { switch kind {
case "Pod": case "Pod":
return &PodDescriber{ return &PodDescriber{c}, true
PodClient: func(namespace string) (client.PodInterface, error) {
return c.Pods(namespace), nil
},
ReplicationControllerClient: func(namespace string) (client.ReplicationControllerInterface, error) {
return c.ReplicationControllers(namespace), nil
},
}, true
case "ReplicationController": case "ReplicationController":
return &ReplicationControllerDescriber{ return &ReplicationControllerDescriber{c}, true
PodClient: func(namespace string) (client.PodInterface, error) {
return c.Pods(namespace), nil
},
ReplicationControllerClient: func(namespace string) (client.ReplicationControllerInterface, error) {
return c.ReplicationControllers(namespace), nil
},
}, true
case "Service": case "Service":
return &ServiceDescriber{ return &ServiceDescriber{c}, true
ServiceClient: func(namespace string) (client.ServiceInterface, error) { case "Minion", "Node":
return c.Services(namespace), nil return &MinionDescriber{c}, true
},
}, true
} }
return nil, false return nil, false
} }
@ -68,19 +52,12 @@ func DescriberFor(kind string, c *client.Client) (Describer, bool) {
// PodDescriber generates information about a pod and the replication controllers that // PodDescriber generates information about a pod and the replication controllers that
// create it. // create it.
type PodDescriber struct { type PodDescriber struct {
PodClient func(namespace string) (client.PodInterface, error) client.Interface
ReplicationControllerClient func(namespace string) (client.ReplicationControllerInterface, error)
} }
func (d *PodDescriber) Describe(namespace, name string) (string, error) { func (d *PodDescriber) Describe(namespace, name string) (string, error) {
rc, err := d.ReplicationControllerClient(namespace) rc := d.ReplicationControllers(namespace)
if err != nil { pc := d.Pods(namespace)
return "", err
}
pc, err := d.PodClient(namespace)
if err != nil {
return "", err
}
pod, err := pc.Get(name) pod, err := pc.Get(name)
if err != nil { if err != nil {
@ -107,19 +84,12 @@ func (d *PodDescriber) Describe(namespace, name string) (string, error) {
// ReplicationControllerDescriber generates information about a replication controller // ReplicationControllerDescriber generates information about a replication controller
// and the pods it has created. // and the pods it has created.
type ReplicationControllerDescriber struct { type ReplicationControllerDescriber struct {
ReplicationControllerClient func(namespace string) (client.ReplicationControllerInterface, error) client.Interface
PodClient func(namespace string) (client.PodInterface, error)
} }
func (d *ReplicationControllerDescriber) Describe(namespace, name string) (string, error) { func (d *ReplicationControllerDescriber) Describe(namespace, name string) (string, error) {
rc, err := d.ReplicationControllerClient(namespace) rc := d.ReplicationControllers(namespace)
if err != nil { pc := d.Pods(namespace)
return "", err
}
pc, err := d.PodClient(namespace)
if err != nil {
return "", err
}
controller, err := rc.Get(name) controller, err := rc.Get(name)
if err != nil { if err != nil {
@ -144,14 +114,11 @@ func (d *ReplicationControllerDescriber) Describe(namespace, name string) (strin
// ServiceDescriber generates information about a service. // ServiceDescriber generates information about a service.
type ServiceDescriber struct { type ServiceDescriber struct {
ServiceClient func(namespace string) (client.ServiceInterface, error) client.Interface
} }
func (d *ServiceDescriber) Describe(namespace, name string) (string, error) { func (d *ServiceDescriber) Describe(namespace, name string) (string, error) {
c, err := d.ServiceClient(namespace) c := d.Services(namespace)
if err != nil {
return "", err
}
service, err := c.Get(name) service, err := c.Get(name)
if err != nil { if err != nil {
@ -169,14 +136,11 @@ func (d *ServiceDescriber) Describe(namespace, name string) (string, error) {
// MinionDescriber generates information about a minion. // MinionDescriber generates information about a minion.
type MinionDescriber struct { type MinionDescriber struct {
MinionClient func() (client.MinionInterface, error) client.Interface
} }
func (d *MinionDescriber) Describe(namespace, name string) (string, error) { func (d *MinionDescriber) Describe(namespace, name string) (string, error) {
mc, err := d.MinionClient() mc := d.Minions()
if err != nil {
return "", err
}
minion, err := mc.Get(name) minion, err := mc.Get(name)
if err != nil { if err != nil {
return "", err return "", err

View File

@ -27,37 +27,13 @@ type describeClient struct {
T *testing.T T *testing.T
Namespace string Namespace string
Err error Err error
Fake *client.Fake *client.Fake
}
func (c *describeClient) Pod(namespace string) (client.PodInterface, error) {
if namespace != c.Namespace {
c.T.Errorf("unexpected namespace arg: %s", namespace)
}
return c.Fake.Pods(namespace), c.Err
}
func (c *describeClient) ReplicationController(namespace string) (client.ReplicationControllerInterface, error) {
if namespace != c.Namespace {
c.T.Errorf("unexpected namespace arg: %s", namespace)
}
return c.Fake.ReplicationControllers(namespace), c.Err
}
func (c *describeClient) Service(namespace string) (client.ServiceInterface, error) {
if namespace != c.Namespace {
c.T.Errorf("unexpected namespace arg: %s", namespace)
}
return c.Fake.Services(namespace), c.Err
} }
func TestDescribePod(t *testing.T) { func TestDescribePod(t *testing.T) {
fake := &client.Fake{} fake := &client.Fake{}
c := &describeClient{T: t, Namespace: "foo", Fake: fake} c := &describeClient{T: t, Namespace: "foo", Fake: fake}
d := PodDescriber{ d := PodDescriber{c}
PodClient: c.Pod,
ReplicationControllerClient: c.ReplicationController,
}
out, err := d.Describe("foo", "bar") out, err := d.Describe("foo", "bar")
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
@ -70,9 +46,7 @@ func TestDescribePod(t *testing.T) {
func TestDescribeService(t *testing.T) { func TestDescribeService(t *testing.T) {
fake := &client.Fake{} fake := &client.Fake{}
c := &describeClient{T: t, Namespace: "foo", Fake: fake} c := &describeClient{T: t, Namespace: "foo", Fake: fake}
d := ServiceDescriber{ d := ServiceDescriber{c}
ServiceClient: c.Service,
}
out, err := d.Describe("foo", "bar") out, err := d.Describe("foo", "bar")
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)