@@ -18,13 +18,18 @@ package main
18
18
19
19
import (
20
20
"encoding/json"
21
+ "errors"
21
22
"flag"
22
23
"fmt"
23
24
"io/ioutil"
24
25
"os"
26
+ "sigs.k8s.io/cluster-api-provider-docker/kind/actions"
27
+ "sigs.k8s.io/kind/pkg/cluster/nodes"
28
+ "sigs.k8s.io/kind/pkg/container/cri"
29
+ "sigs.k8s.io/kind/pkg/exec"
30
+ "time"
25
31
26
32
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
- "sigs.k8s.io/cluster-api-provider-docker/execer"
28
33
"sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1"
29
34
)
30
35
@@ -62,7 +67,7 @@ func (mo *machineDeyploymentOptions) initFlags(fs *flag.FlagSet) {
62
67
63
68
func main () {
64
69
setup := flag .NewFlagSet ("setup" , flag .ExitOnError )
65
- managementClusterName := setup .String ("cluster-name" , "kind " , "The name of the management cluster" )
70
+ managementClusterName := setup .String ("cluster-name" , "management " , "The name of the management cluster" )
66
71
67
72
// crds takes no args
68
73
@@ -91,6 +96,7 @@ func main() {
91
96
if len (os .Args ) < 2 {
92
97
fmt .Println ("At least one subcommand is requied." )
93
98
fmt .Println (usage ())
99
+ os .Exit (1 )
94
100
}
95
101
96
102
switch os .Args [1 ] {
@@ -242,37 +248,43 @@ func machineYAML(opts *machineOptions) string {
242
248
}
243
249
244
250
func makeManagementCluster (clusterName string ) {
245
- kind := execer .NewClient ("kind" )
246
- // start kind with docker mount
247
- kindConfig , err := kindConfigFile ()
251
+ fmt .Println ("Creating a brand new cluster" )
252
+ elb , err := actions .SetUpLoadBalancer (clusterName )
248
253
if err != nil {
249
254
panic (err )
250
255
}
251
- if err := kind .RunCommand ("create" , "cluster" , "--name" , clusterName , "--config" , kindConfig ); err != nil {
256
+ lbipv4 , _ , err := elb .IP ()
257
+ if err != nil {
252
258
panic (err )
253
259
}
254
- }
255
-
256
- // TODO if possible, use the kind library instead of the command line tool
257
- func kindConfigFile () (string , error ) {
258
- kfg := `kind: Cluster
259
- apiVersion: kind.sigs.k8s.io/v1alpha3
260
- nodes:
261
- - role: control-plane
262
- extraMounts:
263
- - containerPath: /var/run/docker.sock
264
- hostPath: /var/run/docker.sock
265
- `
266
-
267
- f , err := ioutil .TempFile ("" , "*-kind-config.yaml" )
260
+ cpMounts := []cri.Mount {
261
+ {
262
+ ContainerPath : "/var/run/docker.sock" ,
263
+ HostPath : "/var/run/docker.sock" ,
264
+ },
265
+ }
266
+ cp , err := actions .CreateControlPlane (clusterName , "management-control-plane" , lbipv4 , "v1.14.2" , cpMounts )
268
267
if err != nil {
269
- return "" , err
268
+ panic (err )
269
+ }
270
+ if ! nodes .WaitForReady (cp , time .Now ().Add (5 * time .Minute )) {
271
+ panic (errors .New ("control plane was not ready in 5 minutes" ))
270
272
}
271
- defer f .Close ()
272
- if _ , err := f .WriteString (kfg ); err != nil {
273
- return "" , err
273
+ f , err := ioutil .TempFile ("" , "crds" )
274
+ if err != nil {
275
+ panic (err )
276
+ }
277
+ defer os .Remove (f .Name ())
278
+ fmt .Fprintln (f , crds )
279
+ fmt .Fprintln (f , "---" )
280
+ fmt .Fprintln (f , getCAPDPlane ("gcr.io/kubernetes1-226021/capd-manager:latest" , "gcr.io/k8s-cluster-api/cluster-api-controller:0.1.3" ))
281
+ cmd := exec .Command ("kubectl" , "apply" , "-f" , f .Name ())
282
+ cmd .SetEnv (fmt .Sprintf ("KUBECONFIG=%s/.kube/kind-config-%s" , os .Getenv ("HOME" ), clusterName ))
283
+ cmd .SetStdout (os .Stdout )
284
+ cmd .SetStderr (os .Stderr )
285
+ if err := cmd .Run (); err != nil {
286
+ panic (err )
274
287
}
275
- return f .Name (), nil
276
288
}
277
289
278
290
func printCRDs () {
@@ -376,6 +388,17 @@ spec:
376
388
- /manager
377
389
image: %s
378
390
name: manager
391
+ tolerations:
392
+ - effect: NoSchedule
393
+ key: node-role.kubernetes.io/master
394
+ - key: CriticalAddonsOnly
395
+ operator: Exists
396
+ - effect: NoExecute
397
+ key: node.alpha.kubernetes.io/notReady
398
+ operator: Exists
399
+ - effect: NoExecute
400
+ key: node.alpha.kubernetes.io/unreachable
401
+ operator: Exists
379
402
`
380
403
381
404
// TODO generate the CRDs
0 commit comments