Skip to content
This repository was archived by the owner on Mar 22, 2018. It is now read-only.

Commit fe21319

Browse files
authored
Merge pull request #45 from dims/integrate-external-provisioner
Integrate external provisioner
2 parents 329b176 + 8e8febb commit fe21319

25 files changed

Lines changed: 2459 additions & 58 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,5 @@ zz_generated.openapi.go
137137

138138
# binaries
139139
/openstack-cloud-controller-manager
140-
/cinder-flex-volume-driver
140+
/cinder-flex-volume-driver
141+
/cinder-provisioner

Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ build: depend
3333
-ldflags "-X 'main.version=${VERSION}'" \
3434
-o openstack-cloud-controller-manager \
3535
cmd/openstack-cloud-controller-manager/main.go
36+
cd $(DEST) && CGO_ENABLED=0 GOOS=$(GOOS) go build \
37+
-ldflags "-X 'main.version=${VERSION}'" \
38+
-o cinder-provisioner \
39+
cmd/cinder-provisioner/main.go
3640
cd $(DEST) && CGO_ENABLED=0 GOOS=$(GOOS) go build \
3741
-ldflags "-X 'main.version=${VERSION}'" \
3842
-o cinder-flex-volume-driver \
@@ -104,7 +108,7 @@ install-distro-packages:
104108
tools/install-distro-packages.sh
105109

106110
clean:
107-
rm -rf .bindep openstack-cloud-controller-manager cinder-flex-volume-driver
111+
rm -rf .bindep openstack-cloud-controller-manager cinder-flex-volume-driver cinder-provisioner
108112

109113
realclean: clean
110114
rm -rf vendor

cmd/cinder-provisioner/main.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
Copyright 2017 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package main
18+
19+
import (
20+
"flag"
21+
22+
"git.openstack.org/openstack/openstack-cloud-controller-manager/pkg/volume/cinder/provisioner"
23+
"github.com/golang/glog"
24+
"github.com/kubernetes-incubator/external-storage/lib/controller"
25+
26+
"k8s.io/apimachinery/pkg/util/wait"
27+
"k8s.io/client-go/kubernetes"
28+
"k8s.io/client-go/rest"
29+
"k8s.io/client-go/tools/clientcmd"
30+
)
31+
32+
var (
33+
master = flag.String("master", "", "Master URL")
34+
kubeconfig = flag.String("kubeconfig", "", "Absolute path to the kubeconfig")
35+
id = flag.String("id", "", "Unique provisioner identity")
36+
cloudconfig = flag.String("cloudconfig", "", "Path to OpenStack config file")
37+
)
38+
39+
func main() {
40+
flag.Parse()
41+
flag.Set("logtostderr", "true")
42+
43+
var config *rest.Config
44+
var err error
45+
if *master != "" || *kubeconfig != "" {
46+
config, err = clientcmd.BuildConfigFromFlags(*master, *kubeconfig)
47+
} else {
48+
config, err = rest.InClusterConfig()
49+
}
50+
prID := provisioner.ProvisionerName
51+
if *id != "" {
52+
prID = *id
53+
}
54+
if err != nil {
55+
glog.Fatalf("Failed to create config: %v", err)
56+
}
57+
clientset, err := kubernetes.NewForConfig(config)
58+
if err != nil {
59+
glog.Fatalf("Failed to create client: %v", err)
60+
}
61+
62+
// The controller needs to know what the server version is because out-of-tree
63+
// provisioners aren't officially supported until 1.5
64+
serverVersion, err := clientset.Discovery().ServerVersion()
65+
if err != nil {
66+
glog.Fatalf("Error getting server version: %v", err)
67+
}
68+
69+
// Create the provisioner: it implements the Provisioner interface expected by
70+
// the controller
71+
cinderProvisioner, err := provisioner.NewCinderProvisioner(clientset, prID, *cloudconfig)
72+
if err != nil {
73+
glog.Fatalf("Error creating Cinder provisioner: %v", err)
74+
}
75+
76+
// Start the provision controller which will dynamically provision cinder
77+
// PVs
78+
pc := controller.NewProvisionController(
79+
clientset,
80+
provisioner.ProvisionerName,
81+
cinderProvisioner,
82+
serverVersion.GitVersion,
83+
)
84+
85+
pc.Run(wait.NeverStop)
86+
}

0 commit comments

Comments
 (0)