mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #46490 from NickrenREN/controller-volume-event
Automatic merge from submit-queue Extract volume relevant events reason Extract volume relevant events reason and make them const **Release note**: ```release-note NONE ```
This commit is contained in:
		@@ -125,6 +125,7 @@ filegroup(
 | 
			
		||||
        "//pkg/controller/statefulset:all-srcs",
 | 
			
		||||
        "//pkg/controller/ttl:all-srcs",
 | 
			
		||||
        "//pkg/controller/volume/attachdetach:all-srcs",
 | 
			
		||||
        "//pkg/controller/volume/events:all-srcs",
 | 
			
		||||
        "//pkg/controller/volume/persistentvolume:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								pkg/controller/volume/events/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								pkg/controller/volume/events/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
package(default_visibility = ["//visibility:public"])
 | 
			
		||||
 | 
			
		||||
licenses(["notice"])
 | 
			
		||||
 | 
			
		||||
load(
 | 
			
		||||
    "@io_bazel_rules_go//go:def.bzl",
 | 
			
		||||
    "go_library",
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["event.go"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										32
									
								
								pkg/controller/volume/events/event.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								pkg/controller/volume/events/event.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package events
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// volume relevant event reasons
 | 
			
		||||
	FailedBinding             = "FailedBinding"
 | 
			
		||||
	VolumeMismatch            = "VolumeMismatch"
 | 
			
		||||
	VolumeFailedRecycle       = "VolumeFailedRecycle"
 | 
			
		||||
	VolumeRecycled            = "VolumeRecycled"
 | 
			
		||||
	RecyclerPod               = "RecyclerPod"
 | 
			
		||||
	VolumeDelete              = "VolumeDelete"
 | 
			
		||||
	VolumeFailedDelete        = "VolumeFailedDelete"
 | 
			
		||||
	ExternalProvisioning      = "ExternalProvisioning"
 | 
			
		||||
	ProvisioningFailed        = "ProvisioningFailed"
 | 
			
		||||
	ProvisioningCleanupFailed = "ProvisioningCleanupFailed"
 | 
			
		||||
	ProvisioningSucceeded     = "ProvisioningSucceeded"
 | 
			
		||||
)
 | 
			
		||||
@@ -30,6 +30,7 @@ go_library(
 | 
			
		||||
        "//pkg/client/listers/storage/v1:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider:go_default_library",
 | 
			
		||||
        "//pkg/controller:go_default_library",
 | 
			
		||||
        "//pkg/controller/volume/events:go_default_library",
 | 
			
		||||
        "//pkg/util/goroutinemap:go_default_library",
 | 
			
		||||
        "//pkg/util/goroutinemap/exponentialbackoff:go_default_library",
 | 
			
		||||
        "//pkg/util/io:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@ import (
 | 
			
		||||
	corelisters "k8s.io/kubernetes/pkg/client/listers/core/v1"
 | 
			
		||||
	storagelisters "k8s.io/kubernetes/pkg/client/listers/storage/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/controller/volume/events"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/goroutinemap"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff"
 | 
			
		||||
	vol "k8s.io/kubernetes/pkg/volume"
 | 
			
		||||
@@ -268,7 +269,7 @@ func (ctrl *PersistentVolumeController) syncUnboundClaim(claim *v1.PersistentVol
 | 
			
		||||
			}
 | 
			
		||||
			// Mark the claim as Pending and try to find a match in the next
 | 
			
		||||
			// periodic syncClaim
 | 
			
		||||
			ctrl.eventRecorder.Event(claim, v1.EventTypeNormal, "FailedBinding", "no persistent volumes available for this claim and no storage class is set")
 | 
			
		||||
			ctrl.eventRecorder.Event(claim, v1.EventTypeNormal, events.FailedBinding, "no persistent volumes available for this claim and no storage class is set")
 | 
			
		||||
			if _, err = ctrl.updateClaimStatus(claim, v1.ClaimPending, nil); err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
@@ -315,7 +316,7 @@ func (ctrl *PersistentVolumeController) syncUnboundClaim(claim *v1.PersistentVol
 | 
			
		||||
				if err = checkVolumeSatisfyClaim(volume, claim); err != nil {
 | 
			
		||||
					glog.V(4).Infof("Can't bind the claim to volume %q: %v", volume.Name, err)
 | 
			
		||||
					//send a event
 | 
			
		||||
					ctrl.eventRecorder.Event(volume, v1.EventTypeWarning, "VolumeMismatch", "Volume's size is smaller than requested or volume's class does not match with claim")
 | 
			
		||||
					ctrl.eventRecorder.Event(volume, v1.EventTypeWarning, events.VolumeMismatch, "Volume's size is smaller than requested or volume's class does not match with claim")
 | 
			
		||||
					//volume does not satisfy the requirements of the claim
 | 
			
		||||
					if _, err = ctrl.updateClaimStatus(claim, v1.ClaimPending, nil); err != nil {
 | 
			
		||||
						return err
 | 
			
		||||
@@ -1029,7 +1030,7 @@ func (ctrl *PersistentVolumeController) recycleVolumeOperation(arg interface{})
 | 
			
		||||
	plugin, err := ctrl.volumePluginMgr.FindRecyclablePluginBySpec(spec)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// No recycler found. Emit an event and mark the volume Failed.
 | 
			
		||||
		if _, err = ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, "VolumeFailedRecycle", "No recycler plugin found for the volume!"); err != nil {
 | 
			
		||||
		if _, err = ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, events.VolumeFailedRecycle, "No recycler plugin found for the volume!"); err != nil {
 | 
			
		||||
			glog.V(4).Infof("recycleVolumeOperation [%s]: failed to mark volume as failed: %v", volume.Name, err)
 | 
			
		||||
			// Save failed, retry on the next deletion attempt
 | 
			
		||||
			return
 | 
			
		||||
@@ -1045,7 +1046,7 @@ func (ctrl *PersistentVolumeController) recycleVolumeOperation(arg interface{})
 | 
			
		||||
	if err = plugin.Recycle(volume.Name, spec, recorder); err != nil {
 | 
			
		||||
		// Recycler failed
 | 
			
		||||
		strerr := fmt.Sprintf("Recycle failed: %s", err)
 | 
			
		||||
		if _, err = ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, "VolumeFailedRecycle", strerr); err != nil {
 | 
			
		||||
		if _, err = ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, events.VolumeFailedRecycle, strerr); err != nil {
 | 
			
		||||
			glog.V(4).Infof("recycleVolumeOperation [%s]: failed to mark volume as failed: %v", volume.Name, err)
 | 
			
		||||
			// Save failed, retry on the next deletion attempt
 | 
			
		||||
			return
 | 
			
		||||
@@ -1057,7 +1058,7 @@ func (ctrl *PersistentVolumeController) recycleVolumeOperation(arg interface{})
 | 
			
		||||
 | 
			
		||||
	glog.V(2).Infof("volume %q recycled", volume.Name)
 | 
			
		||||
	// Send an event
 | 
			
		||||
	ctrl.eventRecorder.Event(volume, v1.EventTypeNormal, "VolumeRecycled", "Volume recycled")
 | 
			
		||||
	ctrl.eventRecorder.Event(volume, v1.EventTypeNormal, events.VolumeRecycled, "Volume recycled")
 | 
			
		||||
	// Make the volume available again
 | 
			
		||||
	if err = ctrl.unbindVolume(volume); err != nil {
 | 
			
		||||
		// Oops, could not save the volume and therefore the controller will
 | 
			
		||||
@@ -1106,11 +1107,11 @@ func (ctrl *PersistentVolumeController) deleteVolumeOperation(arg interface{}) e
 | 
			
		||||
		if vol.IsDeletedVolumeInUse(err) {
 | 
			
		||||
			// The plugin needs more time, don't mark the volume as Failed
 | 
			
		||||
			// and send Normal event only
 | 
			
		||||
			ctrl.eventRecorder.Event(volume, v1.EventTypeNormal, "VolumeDelete", err.Error())
 | 
			
		||||
			ctrl.eventRecorder.Event(volume, v1.EventTypeNormal, events.VolumeDelete, err.Error())
 | 
			
		||||
		} else {
 | 
			
		||||
			// The plugin failed, mark the volume as Failed and send Warning
 | 
			
		||||
			// event
 | 
			
		||||
			if _, err := ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, "VolumeFailedDelete", err.Error()); err != nil {
 | 
			
		||||
			if _, err := ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, events.VolumeFailedDelete, err.Error()); err != nil {
 | 
			
		||||
				glog.V(4).Infof("deleteVolumeOperation [%s]: failed to mark volume as failed: %v", volume.Name, err)
 | 
			
		||||
				// Save failed, retry on the next deletion attempt
 | 
			
		||||
				return err
 | 
			
		||||
@@ -1252,7 +1253,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
 | 
			
		||||
 | 
			
		||||
	plugin, storageClass, err := ctrl.findProvisionablePlugin(claim)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, "ProvisioningFailed", err.Error())
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningFailed, err.Error())
 | 
			
		||||
		glog.V(2).Infof("error finding provisioning plugin for claim %s: %v", claimToClaimKey(claim), err)
 | 
			
		||||
		// The controller will retry provisioning the volume in every
 | 
			
		||||
		// syncVolume() call.
 | 
			
		||||
@@ -1273,7 +1274,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
 | 
			
		||||
		// This means that an unknown provisioner is requested. Report an event
 | 
			
		||||
		// and wait for the external provisioner
 | 
			
		||||
		msg := fmt.Sprintf("waiting for a volume to be created, either by external provisioner %q or manually created by system administrator", storageClass.Provisioner)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeNormal, "ExternalProvisioning", msg)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeNormal, events.ExternalProvisioning, msg)
 | 
			
		||||
		glog.V(3).Infof("provisioning claim %q: %s", claimToClaimKey(claim), msg)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
@@ -1320,7 +1321,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		strerr := fmt.Sprintf("Failed to create provisioner: %v", err)
 | 
			
		||||
		glog.V(2).Infof("failed to create provisioner for claim %q with StorageClass %q: %v", claimToClaimKey(claim), storageClass.Name, err)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, "ProvisioningFailed", strerr)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningFailed, strerr)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1328,7 +1329,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		strerr := fmt.Sprintf("Failed to provision volume with StorageClass %q: %v", storageClass.Name, err)
 | 
			
		||||
		glog.V(2).Infof("failed to provision volume for claim %q with StorageClass %q: %v", claimToClaimKey(claim), storageClass.Name, err)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, "ProvisioningFailed", strerr)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningFailed, strerr)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1374,7 +1375,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
 | 
			
		||||
		// times.
 | 
			
		||||
		strerr := fmt.Sprintf("Error creating provisioned PV object for claim %s: %v. Deleting the volume.", claimToClaimKey(claim), err)
 | 
			
		||||
		glog.V(3).Info(strerr)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, "ProvisioningFailed", strerr)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningFailed, strerr)
 | 
			
		||||
 | 
			
		||||
		var deleteErr error
 | 
			
		||||
		var deleted bool
 | 
			
		||||
@@ -1402,12 +1403,12 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa
 | 
			
		||||
			// is nothing we can do about it.
 | 
			
		||||
			strerr := fmt.Sprintf("Error cleaning provisioned volume for claim %s: %v. Please delete manually.", claimToClaimKey(claim), deleteErr)
 | 
			
		||||
			glog.V(2).Info(strerr)
 | 
			
		||||
			ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, "ProvisioningCleanupFailed", strerr)
 | 
			
		||||
			ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningCleanupFailed, strerr)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		glog.V(2).Infof("volume %q provisioned for claim %q", volume.Name, claimToClaimKey(claim))
 | 
			
		||||
		msg := fmt.Sprintf("Successfully provisioned volume %s using %s", volume.Name, plugin.GetPluginName())
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeNormal, "ProvisioningSucceeded", msg)
 | 
			
		||||
		ctrl.eventRecorder.Event(claim, v1.EventTypeNormal, events.ProvisioningSucceeded, msg)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1444,7 +1445,7 @@ func (ctrl *PersistentVolumeController) scheduleOperation(operationName string,
 | 
			
		||||
// to given volume.
 | 
			
		||||
func (ctrl *PersistentVolumeController) newRecyclerEventRecorder(volume *v1.PersistentVolume) vol.RecycleEventRecorder {
 | 
			
		||||
	return func(eventtype, message string) {
 | 
			
		||||
		ctrl.eventRecorder.Eventf(volume, eventtype, "RecyclerPod", "Recycler pod: %s", message)
 | 
			
		||||
		ctrl.eventRecorder.Eventf(volume, eventtype, events.RecyclerPod, "Recycler pod: %s", message)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user