@@ -3,10 +3,15 @@ package plural
33import (
44 "context"
55 "fmt"
6+ "os"
7+ "path"
68 "strings"
79 "time"
810
9- "github.com/pkg/errors"
11+ "github.com/pluralsh/plural-cli/pkg/kubernetes"
12+ "github.com/pluralsh/plural-cli/pkg/manifest"
13+ "github.com/pluralsh/plural-cli/pkg/provider"
14+ "github.com/pluralsh/plural-cli/pkg/utils"
1015 "github.com/urfave/cli"
1116 corev1 "k8s.io/api/core/v1"
1217 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
@@ -21,13 +26,6 @@ import (
2126 clusterapi "sigs.k8s.io/cluster-api/api/v1beta1"
2227 apiclient "sigs.k8s.io/cluster-api/cmd/clusterctl/client"
2328 ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
24- "sigs.k8s.io/kind/pkg/cluster"
25-
26- "github.com/pluralsh/plural-cli/pkg/manifest"
27-
28- "github.com/pluralsh/plural-cli/pkg/kubernetes"
29- "github.com/pluralsh/plural-cli/pkg/provider"
30- "github.com/pluralsh/plural-cli/pkg/utils"
3129)
3230
3331var runtimescheme = runtime .NewScheme ()
@@ -39,6 +37,18 @@ func init() {
3937 utilruntime .Must (clusterapioperator .AddToScheme (runtimescheme ))
4038}
4139
40+ const (
41+ kindConfig = `kind: Cluster
42+ apiVersion: kind.x-k8s.io/v1alpha4
43+ networking:
44+ ipFamily: dual
45+ nodes:
46+ - role: control-plane
47+ extraMounts:
48+ - hostPath: /var/run/docker.sock
49+ containerPath: /var/run/docker.sock`
50+ )
51+
4252func (p * Plural ) bootstrapCommands () []cli.Command {
4353 return []cli.Command {
4454 {
@@ -87,13 +97,13 @@ func (p *Plural) bootstrapClusterCommands() []cli.Command {
8797 Usage : "skip creating when cluster exists" ,
8898 },
8999 },
90- Action : latestVersion (requireArgs (handleCreateCluster , []string {"NAME" })),
100+ Action : latestVersion (requireKind ( requireArgs (handleCreateCluster , []string {"NAME" }) )),
91101 },
92102 {
93103 Name : "delete" ,
94104 ArgsUsage : "NAME" ,
95105 Usage : "Deletes bootstrap cluster" ,
96- Action : latestVersion (requireArgs (handleDeleteCluster , []string {"NAME" })),
106+ Action : latestVersion (requireKind ( requireArgs (handleDeleteCluster , []string {"NAME" }) )),
97107 },
98108 {
99109 Name : "move" ,
@@ -254,62 +264,53 @@ func (p *Plural) handleCreateNamespace(c *cli.Context) error {
254264
255265func handleDeleteCluster (c * cli.Context ) error {
256266 name := c .Args ().Get (0 )
257- provider := cluster .NewProvider ()
258- utils .Highlight ("Deleting cluster %s ...\n " , name )
259- return provider .Delete (name , "" )
267+ return utils .Exec ("kind" , "delete" , "cluster" , "--name" , name )
260268}
261269
262270func handleCreateCluster (c * cli.Context ) error {
263271 name := c .Args ().Get (0 )
264272 imageFlag := c .String ("image" )
265273 skipCreation := c .Bool ("skip-if-exists" )
266- provider := cluster .NewProvider ()
267- utils .Highlight ("Creating cluster %s ...\n " , name )
268- n , err := provider .ListNodes (name )
274+ if utils .IsKindClusterAlreadyExists (name ) && skipCreation {
275+ utils .Highlight ("Cluster %s already exists \n " , name )
276+ return nil
277+ }
278+
279+ dir , err := os .MkdirTemp ("" , "kind" )
269280 if err != nil {
270281 return err
271282 }
272- if len (n ) != 0 && skipCreation {
273- utils .Highlight ("Cluster %s already exists \n " , name )
274- return nil
283+ defer os .RemoveAll (dir )
284+ config := path .Join (dir , "config.yaml" )
285+ if err := os .WriteFile (config , []byte (kindConfig ), 0644 ); err != nil {
286+ return err
275287 }
276- if err := provider .Create (
277- name ,
278- cluster .CreateWithNodeImage (imageFlag ),
279- cluster .CreateWithRetain (false ),
280- cluster .CreateWithDisplayUsage (true ),
281- cluster .CreateWithDisplaySalutation (true ),
282- cluster .CreateWithRawConfig ([]byte (`kind: Cluster
283- apiVersion: kind.x-k8s.io/v1alpha4
284- networking:
285- ipFamily: dual
286- nodes:
287- - role: control-plane
288- extraMounts:
289- - hostPath: /var/run/docker.sock
290- containerPath: /var/run/docker.sock
291- ` )),
292- ); err != nil {
293- return errors .Wrap (err , "failed to create cluster" )
288+ args := []string {"create" , "cluster" , "--name" , name , "--config" , config }
289+ if imageFlag != "" {
290+ args = append (args , "--image" , imageFlag )
291+ }
292+
293+ if err := utils .Exec ("kind" , args ... ); err != nil {
294+ return err
294295 }
295- kubeconfig , err := provider .KubeConfig (name , false )
296+
297+ kubeconfig , err := utils .GetKindClusterKubeconfig (name , false )
296298 if err != nil {
297299 return err
298300 }
301+
299302 client , err := getClient (kubeconfig )
300303 if err != nil {
301304 return err
302305 }
303-
304306 if err := client .Create (context .Background (), & corev1.Namespace {
305307 ObjectMeta : metav1.ObjectMeta {
306308 Name : "bootstrap" ,
307309 },
308310 }); err != nil {
309311 return err
310312 }
311-
312- internalKubeconfig , err := provider .KubeConfig (name , true )
313+ internalKubeconfig , err := utils .GetKindClusterKubeconfig (name , true )
313314 if err != nil {
314315 return err
315316 }
0 commit comments