Merge pull request #62668 from zetaab/cindermetrics

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

add metrics to cinder volume

**What this PR does / why we need it**: We need cinder volume metrics to be exposed

**Which issue(s) this PR fixes**:
Fixes #62644

**Special notes for your reviewer**: This is not tested in running cluster. 

**Release note**:

```release-note
Make volume usage metrics available for Cinder
```

cc @gnufied @dims
This commit is contained in:
Kubernetes Submit Queue 2018-04-19 09:53:09 -07:00 committed by GitHub
commit 3856891198
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -79,6 +79,10 @@ const (
cinderVolumePluginName = "kubernetes.io/cinder" cinderVolumePluginName = "kubernetes.io/cinder"
) )
func getPath(uid types.UID, volName string, host volume.VolumeHost) string {
return host.GetPodVolumeDir(uid, kstrings.EscapeQualifiedNameForDisk(cinderVolumePluginName), volName)
}
func (plugin *cinderPlugin) Init(host volume.VolumeHost) error { func (plugin *cinderPlugin) Init(host volume.VolumeHost) error {
plugin.host = host plugin.host = host
plugin.volumeLocks = keymutex.NewKeyMutex() plugin.volumeLocks = keymutex.NewKeyMutex()
@ -135,12 +139,13 @@ func (plugin *cinderPlugin) newMounterInternal(spec *volume.Spec, podUID types.U
return &cinderVolumeMounter{ return &cinderVolumeMounter{
cinderVolume: &cinderVolume{ cinderVolume: &cinderVolume{
podUID: podUID, podUID: podUID,
volName: spec.Name(), volName: spec.Name(),
pdName: pdName, pdName: pdName,
mounter: mounter, mounter: mounter,
manager: manager, manager: manager,
plugin: plugin, plugin: plugin,
MetricsProvider: volume.NewMetricsStatFS(getPath(podUID, spec.Name(), plugin.host)),
}, },
fsType: fsType, fsType: fsType,
readOnly: readOnly, readOnly: readOnly,
@ -154,11 +159,12 @@ func (plugin *cinderPlugin) NewUnmounter(volName string, podUID types.UID) (volu
func (plugin *cinderPlugin) newUnmounterInternal(volName string, podUID types.UID, manager cdManager, mounter mount.Interface) (volume.Unmounter, error) { func (plugin *cinderPlugin) newUnmounterInternal(volName string, podUID types.UID, manager cdManager, mounter mount.Interface) (volume.Unmounter, error) {
return &cinderVolumeUnmounter{ return &cinderVolumeUnmounter{
&cinderVolume{ &cinderVolume{
podUID: podUID, podUID: podUID,
volName: volName, volName: volName,
manager: manager, manager: manager,
mounter: mounter, mounter: mounter,
plugin: plugin, plugin: plugin,
MetricsProvider: volume.NewMetricsStatFS(getPath(podUID, volName, plugin.host)),
}}, nil }}, nil
} }
@ -303,7 +309,7 @@ type cinderVolume struct {
// diskMounter provides the interface that is used to mount the actual block device. // diskMounter provides the interface that is used to mount the actual block device.
blockDeviceMounter mount.Interface blockDeviceMounter mount.Interface
plugin *cinderPlugin plugin *cinderPlugin
volume.MetricsNil volume.MetricsProvider
} }
func (b *cinderVolumeMounter) GetAttributes() volume.Attributes { func (b *cinderVolumeMounter) GetAttributes() volume.Attributes {
@ -397,8 +403,7 @@ func makeGlobalPDName(host volume.VolumeHost, devName string) string {
} }
func (cd *cinderVolume) GetPath() string { func (cd *cinderVolume) GetPath() string {
name := cinderVolumePluginName return getPath(cd.podUID, cd.volName, cd.plugin.host)
return cd.plugin.host.GetPodVolumeDir(cd.podUID, kstrings.EscapeQualifiedNameForDisk(name), cd.volName)
} }
type cinderVolumeUnmounter struct { type cinderVolumeUnmounter struct {
@ -484,8 +489,7 @@ type cinderVolumeDeleter struct {
var _ volume.Deleter = &cinderVolumeDeleter{} var _ volume.Deleter = &cinderVolumeDeleter{}
func (r *cinderVolumeDeleter) GetPath() string { func (r *cinderVolumeDeleter) GetPath() string {
name := cinderVolumePluginName return getPath(r.podUID, r.volName, r.plugin.host)
return r.plugin.host.GetPodVolumeDir(r.podUID, kstrings.EscapeQualifiedNameForDisk(name), r.volName)
} }
func (r *cinderVolumeDeleter) Delete() error { func (r *cinderVolumeDeleter) Delete() error {