diff --git a/pkg/kubelet/rkt/image.go b/pkg/kubelet/rkt/image.go index ae4d1554074..aad4eb2f489 100644 --- a/pkg/kubelet/rkt/image.go +++ b/pkg/kubelet/rkt/image.go @@ -227,3 +227,17 @@ func (r *Runtime) writeDockerAuthConfig(image string, credsSlice []credentialpro } return nil } + +// ImageStats returns the image stat (total storage bytes). +func (r *Runtime) ImageStats() (*kubecontainer.ImageStats, error) { + var imageStat kubecontainer.ImageStats + listResp, err := r.apisvc.ListImages(context.Background(), &rktapi.ListImagesRequest{}) + if err != nil { + return nil, fmt.Errorf("couldn't list images: %v", err) + } + + for _, image := range listResp.Images { + imageStat.TotalStorageBytes = imageStat.TotalStorageBytes + uint64(image.Size) + } + return &imageStat, nil +} diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index 06d3f0d7893..940b7d0c18a 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -1771,8 +1771,3 @@ func (r *Runtime) GetPodStatus(uid types.UID, name, namespace string) (*kubecont return podStatus, nil } - -// FIXME: I need to be implemented. -func (r *Runtime) ImageStats() (*kubecontainer.ImageStats, error) { - return &kubecontainer.ImageStats{}, nil -} diff --git a/pkg/kubelet/rkt/rkt_test.go b/pkg/kubelet/rkt/rkt_test.go index 38d4cac40ba..1438dae8d94 100644 --- a/pkg/kubelet/rkt/rkt_test.go +++ b/pkg/kubelet/rkt/rkt_test.go @@ -1382,3 +1382,18 @@ func TestLifeCycleHooks(t *testing.T) { runner.Reset() } } + +func TestImageStats(t *testing.T) { + fr := newFakeRktInterface() + rkt := &Runtime{apisvc: fr} + + fr.images = []*rktapi.Image{ + {Size: 100}, + {Size: 200}, + {Size: 300}, + } + + result, err := rkt.ImageStats() + assert.NoError(t, err) + assert.Equal(t, result, &kubecontainer.ImageStats{TotalStorageBytes: 600}) +}