From 303a1f7ea133c699c7feb81974e58447367fb657 Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Sun, 15 Mar 2015 18:40:34 -0700 Subject: [PATCH] Adding cAdvisor API to get image usage information. --- pkg/kubelet/cadvisor/cadvisor_fake.go | 5 +++++ pkg/kubelet/cadvisor/cadvisor_linux.go | 18 ++++++++++++++++++ pkg/kubelet/cadvisor/cadvisor_mock.go | 6 ++++++ pkg/kubelet/cadvisor/cadvisor_unsupported.go | 5 +++++ pkg/kubelet/cadvisor/types.go | 4 ++++ 5 files changed, 38 insertions(+) diff --git a/pkg/kubelet/cadvisor/cadvisor_fake.go b/pkg/kubelet/cadvisor/cadvisor_fake.go index f40bab7b03e..51836a9fdd8 100644 --- a/pkg/kubelet/cadvisor/cadvisor_fake.go +++ b/pkg/kubelet/cadvisor/cadvisor_fake.go @@ -18,6 +18,7 @@ package cadvisor import ( cadvisorApi "github.com/google/cadvisor/info/v1" + cadvisorApi2 "github.com/google/cadvisor/info/v2" ) // Fake cAdvisor implementation. @@ -37,3 +38,7 @@ func (c *Fake) DockerContainer(name string, req *cadvisorApi.ContainerInfoReques func (c *Fake) MachineInfo() (*cadvisorApi.MachineInfo, error) { return new(cadvisorApi.MachineInfo), nil } + +func (c *Fake) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) { + return cadvisorApi2.FsInfo{}, nil +} diff --git a/pkg/kubelet/cadvisor/cadvisor_linux.go b/pkg/kubelet/cadvisor/cadvisor_linux.go index 012ccda5182..8fdad376108 100644 --- a/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -25,8 +25,10 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/golang/glog" + cadvisorFs "github.com/google/cadvisor/fs" cadvisorHttp "github.com/google/cadvisor/http" cadvisorApi "github.com/google/cadvisor/info/v1" + cadvisorApi2 "github.com/google/cadvisor/info/v2" "github.com/google/cadvisor/manager" "github.com/google/cadvisor/storage/memory" "github.com/google/cadvisor/utils/sysfs" @@ -110,3 +112,19 @@ func (self *cadvisorClient) ContainerInfo(name string, req *cadvisorApi.Containe func (self *cadvisorClient) MachineInfo() (*cadvisorApi.MachineInfo, error) { return self.GetMachineInfo() } + +func (self *cadvisorClient) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) { + res, err := self.GetFsInfo(cadvisorFs.LabelDockerImages) + if err != nil { + return cadvisorApi2.FsInfo{}, err + } + if len(res) == 0 { + return cadvisorApi2.FsInfo{}, fmt.Errorf("failed to find information for the filesystem containing Docker images") + } + // TODO(vmarmol): Handle this better when Docker has more than one image filesystem. + if len(res) > 1 { + glog.Warningf("More than one Docker images filesystem: %#v. Only using the first one", res) + } + + return res[0], nil +} diff --git a/pkg/kubelet/cadvisor/cadvisor_mock.go b/pkg/kubelet/cadvisor/cadvisor_mock.go index 9e7d3fd692b..c4d1fb13a0d 100644 --- a/pkg/kubelet/cadvisor/cadvisor_mock.go +++ b/pkg/kubelet/cadvisor/cadvisor_mock.go @@ -18,6 +18,7 @@ package cadvisor import ( cadvisorApi "github.com/google/cadvisor/info/v1" + cadvisorApi2 "github.com/google/cadvisor/info/v2" "github.com/stretchr/testify/mock" ) @@ -44,3 +45,8 @@ func (c *Mock) MachineInfo() (*cadvisorApi.MachineInfo, error) { args := c.Called() return args.Get(0).(*cadvisorApi.MachineInfo), args.Error(1) } + +func (c *Mock) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) { + args := c.Called() + return args.Get(0).(cadvisorApi2.FsInfo), args.Error(1) +} diff --git a/pkg/kubelet/cadvisor/cadvisor_unsupported.go b/pkg/kubelet/cadvisor/cadvisor_unsupported.go index 3c931763c15..29e41e64288 100644 --- a/pkg/kubelet/cadvisor/cadvisor_unsupported.go +++ b/pkg/kubelet/cadvisor/cadvisor_unsupported.go @@ -22,6 +22,7 @@ import ( "errors" cadvisorApi "github.com/google/cadvisor/info/v1" + cadvisorApi2 "github.com/google/cadvisor/info/v2" ) type cadvisorUnsupported struct { @@ -46,3 +47,7 @@ func (self *cadvisorUnsupported) ContainerInfo(name string, req *cadvisorApi.Con func (self *cadvisorUnsupported) MachineInfo() (*cadvisorApi.MachineInfo, error) { return nil, unsupportedErr } + +func (self *cadvisorUnsupported) DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) { + return cadvisorApi2.FsInfo{}, unsupportedErr +} diff --git a/pkg/kubelet/cadvisor/types.go b/pkg/kubelet/cadvisor/types.go index 24b018c7d72..98a3ed8a093 100644 --- a/pkg/kubelet/cadvisor/types.go +++ b/pkg/kubelet/cadvisor/types.go @@ -18,6 +18,7 @@ package cadvisor import ( cadvisorApi "github.com/google/cadvisor/info/v1" + cadvisorApi2 "github.com/google/cadvisor/info/v2" ) // Interface is an abstract interface for testability. It abstracts the interface to cAdvisor. @@ -25,4 +26,7 @@ type Interface interface { DockerContainer(name string, req *cadvisorApi.ContainerInfoRequest) (cadvisorApi.ContainerInfo, error) ContainerInfo(name string, req *cadvisorApi.ContainerInfoRequest) (*cadvisorApi.ContainerInfo, error) MachineInfo() (*cadvisorApi.MachineInfo, error) + + // Returns usage information about the filesystem holding Docker images. + DockerImagesFsInfo() (cadvisorApi2.FsInfo, error) }