Merge pull request #119829 from cvvz/fix-volumemanager-logs

fix: implement MarshalLog for structures in volumemanager for structured-logging.
This commit is contained in:
Kubernetes Prow Robot 2023-09-13 07:46:12 -07:00 committed by GitHub
commit a08ee80807
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -23,6 +23,7 @@ import (
"path/filepath"
"time"
"github.com/go-logr/logr"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
@ -37,6 +38,12 @@ import (
utilstrings "k8s.io/utils/strings"
)
// these interfaces are necessary to keep the structures private
// and at the same time log them correctly in structured logs.
var _ logr.Marshaler = podVolume{}
var _ logr.Marshaler = reconstructedVolume{}
var _ logr.Marshaler = globalVolumeInfo{}
type podVolume struct {
podName volumetypes.UniquePodName
volumeSpecName string
@ -45,6 +52,22 @@ type podVolume struct {
volumeMode v1.PersistentVolumeMode
}
func (p podVolume) MarshalLog() interface{} {
return struct {
PodName string `json:"podName"`
VolumeSpecName string `json:"volumeSpecName"`
VolumePath string `json:"volumePath"`
PluginName string `json:"pluginName"`
VolumeMode string `json:"volumeMode"`
}{
PodName: string(p.podName),
VolumeSpecName: p.volumeSpecName,
VolumePath: p.volumePath,
PluginName: p.pluginName,
VolumeMode: string(p.volumeMode),
}
}
type reconstructedVolume struct {
volumeName v1.UniqueVolumeName
podName volumetypes.UniquePodName
@ -59,6 +82,28 @@ type reconstructedVolume struct {
seLinuxMountContext string
}
func (rv reconstructedVolume) MarshalLog() interface{} {
return struct {
VolumeName string `json:"volumeName"`
PodName string `json:"podName"`
VolumeSpecName string `json:"volumeSpecName"`
OuterVolumeSpecName string `json:"outerVolumeSpecName"`
PodUID string `json:"podUID"`
VolumeGIDValue string `json:"volumeGIDValue"`
DevicePath string `json:"devicePath"`
SeLinuxMountContext string `json:"seLinuxMountContext"`
}{
VolumeName: string(rv.volumeName),
PodName: string(rv.podName),
VolumeSpecName: rv.volumeSpec.Name(),
OuterVolumeSpecName: rv.outerVolumeSpecName,
PodUID: string(rv.pod.UID),
VolumeGIDValue: rv.volumeGidValue,
DevicePath: rv.devicePath,
SeLinuxMountContext: rv.seLinuxMountContext,
}
}
// globalVolumeInfo stores reconstructed volume information
// for each pod that was using that volume.
type globalVolumeInfo struct {
@ -71,6 +116,25 @@ type globalVolumeInfo struct {
podVolumes map[volumetypes.UniquePodName]*reconstructedVolume
}
func (gvi globalVolumeInfo) MarshalLog() interface{} {
podVolumes := make(map[volumetypes.UniquePodName]v1.UniqueVolumeName)
for podName, volume := range gvi.podVolumes {
podVolumes[podName] = volume.volumeName
}
return struct {
VolumeName string `json:"volumeName"`
VolumeSpecName string `json:"volumeSpecName"`
DevicePath string `json:"devicePath"`
PodVolumes map[volumetypes.UniquePodName]v1.UniqueVolumeName `json:"podVolumes"`
}{
VolumeName: string(gvi.volumeName),
VolumeSpecName: gvi.volumeSpec.Name(),
DevicePath: gvi.devicePath,
PodVolumes: podVolumes,
}
}
func (rc *reconciler) updateLastSyncTime() {
rc.timeOfLastSyncLock.Lock()
defer rc.timeOfLastSyncLock.Unlock()
@ -181,7 +245,9 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) {
}
}
}
klog.V(4).InfoS("Get volumes from pod directory", "path", podDir, "volumes", volumes)
for _, volume := range volumes {
klog.V(4).InfoS("Get volume from pod directory", "path", podDir, "volume", volume)
}
return volumes, nil
}