Skip to content
This repository has been archived by the owner on Oct 21, 2020. It is now read-only.

Add pvc namer interface #612

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions aws/efs/cmd/efs-provisioner/efs-provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ func main() {
provisionerName,
efsProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
1 change: 1 addition & 0 deletions ceph/cephfs/cephfs-provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ func main() {
prName,
cephFSProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
1 change: 1 addition & 0 deletions ceph/rbd/cmd/rbd-provisioner/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ func main() {
prName,
rbdProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
1 change: 1 addition & 0 deletions digitalocean/cmd/digitalocean-provisioner/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ func main() {
*provisioner,
digitaloceanProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
2 changes: 1 addition & 1 deletion docs/demo/hostpath-provisioner/hostpath-provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,6 @@ func main() {

// Start the provision controller which will dynamically provision hostPath
// PVs
pc := controller.NewProvisionController(clientset, provisionerName, hostPathProvisioner, serverVersion.GitVersion)
pc := controller.NewProvisionController(clientset, provisionerName, hostPathProvisioner, serverVersion.GitVersion, controller.NewDefaultNamer())
pc.Run(wait.NeverStop)
}
1 change: 1 addition & 0 deletions flex/cmd/flex-provisioner/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ func main() {
*provisioner,
flexProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,7 @@ func main() {
prName,
glusterBlockProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
1 change: 1 addition & 0 deletions gluster/glusterfs/cmd/glusterfs-simple-provisioner/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ func main() {
*provisioner,
glusterfsProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
2 changes: 1 addition & 1 deletion iscsi/targetd/cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ var startcontrollerCmd = &cobra.Command{
iscsiProvisioner := provisioner.NewiscsiProvisioner(url)
log.Debugln("iscsi provisioner created")

pc := controller.NewProvisionController(kubernetesClientSet, viper.GetString("provisioner-name"), iscsiProvisioner, serverVersion.GitVersion)
pc := controller.NewProvisionController(kubernetesClientSet, viper.GetString("provisioner-name"), iscsiProvisioner, serverVersion.GitVersion, controller.NewDefaultNamer())
controller.ResyncPeriod(viper.GetDuration("resync-period"))
controller.ExponentialBackOffOnError(viper.GetBool("exponential-backoff-on-error"))
controller.FailedProvisionThreshold(viper.GetInt("fail-retry-threshold"))
Expand Down
11 changes: 4 additions & 7 deletions lib/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ type ProvisionController struct {

hasRun bool
hasRunLock *sync.Mutex
namer Namer
}

const (
Expand Down Expand Up @@ -323,6 +324,7 @@ func NewProvisionController(
provisionerName string,
provisioner Provisioner,
kubeVersion string,
namer Namer,
options ...func(*ProvisionController) error,
) *ProvisionController {
identity := uuid.NewUUID()
Expand Down Expand Up @@ -364,6 +366,7 @@ func NewProvisionController(
leaderElectorsMutex: &sync.Mutex{},
hasRun: false,
hasRunLock: &sync.Mutex{},
namer: namer,
}

for _, option := range options {
Expand Down Expand Up @@ -838,7 +841,7 @@ func (ctrl *ProvisionController) provisionClaimOperation(claim *v1.PersistentVol
// A previous doProvisionClaim may just have finished while we were waiting for
// the locks. Check that PV (with deterministic name) hasn't been provisioned
// yet.
pvName := ctrl.getProvisionedVolumeNameForClaim(claim)
pvName := ctrl.namer.GetProvisionedVolumeNameForClaim(claim)
volume, err := ctrl.client.CoreV1().PersistentVolumes().Get(pvName, metav1.GetOptions{})
if err == nil && volume != nil {
// Volume has been already provisioned, nothing to do.
Expand Down Expand Up @@ -1155,12 +1158,6 @@ func (ctrl *ProvisionController) deleteVolumeOperation(volume *v1.PersistentVolu
return nil
}

// getProvisionedVolumeNameForClaim returns PV.Name for the provisioned volume.
// The name must be unique.
func (ctrl *ProvisionController) getProvisionedVolumeNameForClaim(claim *v1.PersistentVolumeClaim) string {
return "pvc-" + string(claim.UID)
}

// scheduleOperation starts given asynchronous operation on given volume. It
// makes sure the operation is already not running.
func (ctrl *ProvisionController) scheduleOperation(operationName string, operation func() error) {
Expand Down
26 changes: 25 additions & 1 deletion lib/controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ func TestMultipleControllers(t *testing.T) {
ctrls := make([]*ProvisionController, test.numControllers)
stopChs := make([]chan struct{}, test.numControllers)
for i := 0; i < test.numControllers; i++ {
ctrls[i] = NewProvisionController(client, test.provisionerName, provisioner, defaultServerVersion, CreateProvisionedPVInterval(10*time.Millisecond))
ctrls[i] = NewProvisionController(client, test.provisionerName, provisioner, defaultServerVersion, NewDefaultNamer(), CreateProvisionedPVInterval(10*time.Millisecond))
ctrls[i].claimSource = claimSource
ctrls[i].claims.Add(newClaim("claim-1", "uid-1-1", "class-1", test.provisionerName, "", nil))
ctrls[i].classes.Add(newStorageClass("class-1", test.provisionerName))
Expand Down Expand Up @@ -618,6 +618,7 @@ func newTestProvisionController(
provisionerName,
provisioner,
serverGitVersion,
NewDefaultNamer(),
ResyncPeriod(resyncPeriod),
ExponentialBackOffOnError(false),
CreateProvisionedPVInterval(10*time.Millisecond),
Expand Down Expand Up @@ -651,6 +652,7 @@ func newTestProvisionControllerSharedInformers(
provisionerName,
provisioner,
serverGitVersion,
NewDefaultNamer(),
ResyncPeriod(resyncPeriod),
ExponentialBackOffOnError(false),
CreateProvisionedPVInterval(10*time.Millisecond),
Expand Down Expand Up @@ -946,3 +948,25 @@ func (r *claimReactor) React(action testclient.Action) (handled bool, ret runtim

return false, nil, nil
}

type MNamer struct{}

var _ Namer = &MNamer{}

func newMNamer() Namer {
return &MNamer{}
}
func (n *MNamer) GetProvisionedVolumeNameForClaim(claim *v1.PersistentVolumeClaim) string {
return "this is not default namer"

}

func TestNamer(t *testing.T) {
namer := NewDefaultNamer()
claim := &v1.PersistentVolumeClaim{}
claim.UID = "default"
fmt.Println(namer.GetProvisionedVolumeNameForClaim(claim))

mnamer := newMNamer()
fmt.Println(mnamer.GetProvisionedVolumeNameForClaim(claim))
}
40 changes: 40 additions & 0 deletions lib/controller/namer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
Copyright 2016 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 controller

import "k8s.io/api/core/v1"

// Namer interface should implement to get provisioned volume name for claim
type Namer interface {
GetProvisionedVolumeNameForClaim(claim *v1.PersistentVolumeClaim) string
}

// DefaultNamer for all provider
type DefaultNamer struct{}

var _ Namer = &DefaultNamer{}

// NewDefaultNamer function for generating default claim name
func NewDefaultNamer() Namer {
return &DefaultNamer{}
}

// GetProvisionedVolumeNameForClaim returns PV.Name for the provisioned volume.
// The name must be unique.
func (n *DefaultNamer) GetProvisionedVolumeNameForClaim(claim *v1.PersistentVolumeClaim) string {
return "pvc-" + string(claim.UID)
}
2 changes: 1 addition & 1 deletion nfs-client/cmd/nfs-client-provisioner/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,6 @@ func main() {
}
// Start the provision controller which will dynamically provision efs NFS
// PVs
pc := controller.NewProvisionController(clientset, provisionerName, clientNFSProvisioner, serverVersion.GitVersion)
pc := controller.NewProvisionController(clientset, provisionerName, clientNFSProvisioner, serverVersion.GitVersion, controller.NewDefaultNamer())
pc.Run(wait.NeverStop)
}
1 change: 1 addition & 0 deletions nfs/cmd/nfs-provisioner/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ func main() {
*provisioner,
nfsProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
3 changes: 2 additions & 1 deletion openebs/openebs-provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,8 @@ func main() {
clientset,
provisionerName,
openEBSProvisioner,
serverVersion.GitVersion)
serverVersion.GitVersion,
controller.NewDefaultNamer())

pc.Run(wait.NeverStop)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ func main() {
provisioner.ProvisionerName,
cinderProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)

pc.Run(wait.NeverStop)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ func main() {
provisionerName,
snapshotProvisioner,
serverVersion.GitVersion,
controller.NewDefaultNamer(),
)
glog.Infof("starting PV provisioner %s", provisionerName)
pc.Run(wait.NeverStop)
Expand Down