diff --git a/pkg/controller/persistentvolume/persistentvolume_provisioner_controller.go b/pkg/controller/persistentvolume/persistentvolume_provisioner_controller.go index 846bc090ee9..8fc8e3fce8e 100644 --- a/pkg/controller/persistentvolume/persistentvolume_provisioner_controller.go +++ b/pkg/controller/persistentvolume/persistentvolume_provisioner_controller.go @@ -172,7 +172,7 @@ func (controller *PersistentVolumeProvisionerController) reconcileClaim(claim *a } glog.V(5).Infof("PersistentVolumeClaim[%s] provisioning", claim.Name) - provisioner, err := newProvisioner(controller.provisioner, claim) + provisioner, err := newProvisioner(controller.provisioner, claim, nil) if err != nil { return fmt.Errorf("Unexpected error getting new provisioner for claim %s: %v\n", claim.Name, err) } @@ -274,7 +274,7 @@ func provisionVolume(pv *api.PersistentVolume, controller *PersistentVolumeProvi } claim := obj.(*api.PersistentVolumeClaim) - provisioner, _ := newProvisioner(controller.provisioner, claim) + provisioner, _ := newProvisioner(controller.provisioner, claim, pv) err := provisioner.Provision(pv) if err != nil { glog.Errorf("Could not provision %s", pv.Name) @@ -330,15 +330,21 @@ func (controller *PersistentVolumeProvisionerController) Stop() { } } -func newProvisioner(plugin volume.ProvisionableVolumePlugin, claim *api.PersistentVolumeClaim) (volume.Provisioner, error) { +func newProvisioner(plugin volume.ProvisionableVolumePlugin, claim *api.PersistentVolumeClaim, pv *api.PersistentVolume) (volume.Provisioner, error) { + tags := make(map[string]string) + tags[cloudVolumeCreatedForClaimNamespaceTag] = claim.Namespace + tags[cloudVolumeCreatedForClaimNameTag] = claim.Name + + // pv can be nil when the provisioner has not created the PV yet + if pv != nil { + tags[cloudVolumeCreatedForVolumeNameTag] = pv.Name + } + volumeOptions := volume.VolumeOptions{ Capacity: claim.Spec.Resources.Requests[api.ResourceName(api.ResourceStorage)], AccessModes: claim.Spec.AccessModes, PersistentVolumeReclaimPolicy: api.PersistentVolumeReclaimDelete, - CloudTags: &map[string]string{ - cloudVolumeCreatedForNamespaceTag: claim.Namespace, - cloudVolumeCreatedForNameTag: claim.Name, - }, + CloudTags: &tags, } provisioner, err := plugin.NewProvisioner(volumeOptions) diff --git a/pkg/controller/persistentvolume/types.go b/pkg/controller/persistentvolume/types.go index 58cfade69b0..df9a0bb011f 100644 --- a/pkg/controller/persistentvolume/types.go +++ b/pkg/controller/persistentvolume/types.go @@ -32,10 +32,13 @@ const ( qosProvisioningKey = "volume.alpha.kubernetes.io/storage-class" // Name of a tag attached to a real volume in cloud (e.g. AWS EBS or GCE PD) // with namespace of a persistent volume claim used to create this volume. - cloudVolumeCreatedForNamespaceTag = "kubernetes.io/created-for/pvc/namespace" + cloudVolumeCreatedForClaimNamespaceTag = "kubernetes.io/created-for/pvc/namespace" // Name of a tag attached to a real volume in cloud (e.g. AWS EBS or GCE PD) // with name of a persistent volume claim used to create this volume. - cloudVolumeCreatedForNameTag = "kubernetes.io/created-for/pvc/name" + cloudVolumeCreatedForClaimNameTag = "kubernetes.io/created-for/pvc/name" + // Name of a tag attached to a real volume in cloud (e.g. AWS EBS or GCE PD) + // with name of appropriate Kubernetes persistent volume . + cloudVolumeCreatedForVolumeNameTag = "kubernetes.io/created-for/pv/name" ) // persistentVolumeOrderedIndex is a cache.Store that keeps persistent volumes indexed by AccessModes and ordered by storage capacity.