Skip to content

Commit f22a138

Browse files
authored
add support for choosing kind network in dev mode (#401)
1 parent 5d5c02a commit f22a138

4 files changed

Lines changed: 32 additions & 34 deletions

File tree

cli/pkg/kubectl/dev/cmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ func newDeleteCommand(streams genericclioptions.IOStreams) (*cobra.Command, erro
151151
return err
152152
}
153153

154-
return opts.RunDelete(cmd.Context())
154+
return opts.RunDelete()
155155
},
156156
}
157157
opts.AddCmdFlags(cmd)
@@ -182,7 +182,7 @@ func newExampleCommand(streams genericclioptions.IOStreams) (*cobra.Command, err
182182
return err
183183
}
184184

185-
return opts.RunPrintExample(cmd.Context())
185+
return opts.RunPrintExample()
186186
},
187187
}
188188
opts.AddCmdFlags(cmd)

cli/pkg/kubectl/dev/plugin/create.go

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ type DevOptions struct {
6464
WaitForReadyTimeout time.Duration
6565
ChartPath string
6666
ChartVersion string
67+
KindNetwork string
6768
}
6869

6970
// NewDevOptions creates a new DevOptions
@@ -86,13 +87,14 @@ func (o *DevOptions) AddCmdFlags(cmd *cobra.Command) {
8687
o.Options.BindFlags(cmd)
8788
logsv1.AddFlags(o.Logs, cmd.Flags())
8889

89-
cmd.Flags().StringVarP(&o.ProviderClusterName, "provider-cluster-name", "", "kind-provider", "Name of the provider cluster in dev mode")
90-
cmd.Flags().StringVarP(&o.ConsumerClusterName, "consumer-cluster-name", "", "kind-consumer", "Name of the consumer cluster in dev mode")
91-
cmd.Flags().DurationVarP(&o.WaitForReadyTimeout, "wait-for-ready-timeout", "", 2*time.Minute, "Timeout for waiting for the cluster to be ready")
92-
cmd.Flags().StringVarP(&o.ChartPath, "chart-path", "", o.ChartPath, "Helm chart path or OCI registry URL")
93-
cmd.Flags().StringVarP(&o.ChartVersion, "chart-version", "", o.ChartVersion, "Helm chart version")
94-
cmd.Flags().StringVarP(&o.Image, "image", "", "ghcr.io/kube-bind/backend", "kube-bind backend image to use in dev mode")
95-
cmd.Flags().StringVarP(&o.Tag, "tag", "", "main", "kube-bind backend image tag to use in dev mode")
90+
cmd.Flags().StringVar(&o.ProviderClusterName, "provider-cluster-name", "kind-provider", "Name of the provider cluster in dev mode")
91+
cmd.Flags().StringVar(&o.ConsumerClusterName, "consumer-cluster-name", "kind-consumer", "Name of the consumer cluster in dev mode")
92+
cmd.Flags().DurationVar(&o.WaitForReadyTimeout, "wait-for-ready-timeout", 2*time.Minute, "Timeout for waiting for the cluster to be ready")
93+
cmd.Flags().StringVar(&o.ChartPath, "chart-path", o.ChartPath, "Helm chart path or OCI registry URL")
94+
cmd.Flags().StringVar(&o.ChartVersion, "chart-version", o.ChartVersion, "Helm chart version")
95+
cmd.Flags().StringVar(&o.Image, "image", "ghcr.io/kube-bind/backend", "kube-bind backend image to use in dev mode")
96+
cmd.Flags().StringVar(&o.Tag, "tag", "main", "kube-bind backend image tag to use in dev mode")
97+
cmd.Flags().StringVar(&o.KindNetwork, "kind-network", "kube-bind-dev", "kind network to use in dev mode")
9698
}
9799

98100
// Complete completes the options
@@ -125,8 +127,6 @@ nodes:
125127
- role: control-plane
126128
`
127129

128-
const dockerNetwork = "kube-bind-dev"
129-
130130
// Color helper functions
131131
func blueCommand(text string) string {
132132
return "\033[38;5;67m" + text + "\033[0m"
@@ -144,7 +144,7 @@ func (o *DevOptions) runWithColors(ctx context.Context) error {
144144
fmt.Fprintf(o.Streams.ErrOut, "%s kube-bind dev command is in preview\n", redText("EXPERIMENTAL:"))
145145
fmt.Fprintf(o.Streams.ErrOut, "Requirements: Docker must be installed and running\n\n")
146146

147-
hostEntryExists := o.setupHostEntries(ctx)
147+
hostEntryExists := o.setupHostEntries()
148148

149149
if err := o.checkFileLimits(); err != nil {
150150
fmt.Fprintf(o.Streams.ErrOut, "⚠️ File limit check warning: %v\n", err)
@@ -154,7 +154,7 @@ func (o *DevOptions) runWithColors(ctx context.Context) error {
154154
return err
155155
}
156156

157-
providerIP, err := o.getClusterIPAddress(ctx, o.ProviderClusterName, dockerNetwork)
157+
providerIP, err := o.getClusterIPAddress(ctx, o.ProviderClusterName, o.KindNetwork)
158158
if err != nil {
159159
fmt.Fprintf(o.Streams.ErrOut, "⚠️ Failed to get provider cluster IP address: %v\n", err)
160160
providerIP = ""
@@ -193,7 +193,7 @@ func (o *DevOptions) runWithColors(ctx context.Context) error {
193193
if providerIP != "" {
194194
fmt.Fprintf(o.Streams.ErrOut, "%s\n", blueCommand(fmt.Sprintf("KUBECONFIG=%s.kubeconfig kubectl bind --konnector-host-alias %s:kube-bind.dev.local", o.ConsumerClusterName, providerIP)))
195195
} else {
196-
fmt.Fprintf(o.Streams.ErrOut, "%s\n", blueCommand(fmt.Sprintf("PROVIDER_IP=$(docker inspect %s-control-plane | jq -r '.[0].NetworkSettings.Networks[\"%s\"].IPAddress') && KUBECONFIG=%s.kubeconfig kubectl bind --konnector-host-alias ${PROVIDER_IP}:kube-bind.dev.local", dockerNetwork, o.ProviderClusterName, o.ConsumerClusterName)))
196+
fmt.Fprintf(o.Streams.ErrOut, "%s\n", blueCommand(fmt.Sprintf("PROVIDER_IP=$(docker inspect %s-control-plane | jq -r '.[0].NetworkSettings.Networks[\"%s\"].IPAddress') && KUBECONFIG=%s.kubeconfig kubectl bind --konnector-host-alias ${PROVIDER_IP}:kube-bind.dev.local", o.KindNetwork, o.ProviderClusterName, o.ConsumerClusterName)))
197197
}
198198

199199
return nil
@@ -204,7 +204,7 @@ func (o *DevOptions) Run(ctx context.Context) error {
204204
return o.runWithColors(ctx)
205205
}
206206

207-
func (o *DevOptions) setupHostEntries(ctx context.Context) bool {
207+
func (o *DevOptions) setupHostEntries() bool {
208208
if err := addHostEntry("kube-bind.dev.local"); err != nil {
209209
fmt.Fprintf(o.Streams.ErrOut, "Warning: Could not automatically add host entry. Please run:\n")
210210
if runtime.GOOS == "windows" {
@@ -222,7 +222,7 @@ func (o *DevOptions) setupHostEntries(ctx context.Context) bool {
222222

223223
func (o *DevOptions) createCluster(ctx context.Context, clusterName, clusterConfig string, installKubeBind bool) error {
224224
// Set experimental Docker network for kind clusters to communicate
225-
os.Setenv("KIND_EXPERIMENTAL_DOCKER_NETWORK", dockerNetwork)
225+
os.Setenv("KIND_EXPERIMENTAL_DOCKER_NETWORK", o.KindNetwork)
226226

227227
provider := cluster.NewProvider()
228228

@@ -236,7 +236,7 @@ func (o *DevOptions) createCluster(ctx context.Context, clusterName, clusterConf
236236
if slices.Contains(clusters, clusterName) {
237237
fmt.Fprint(o.Streams.ErrOut, "Kind cluster "+clusterName+" already exists, skipping creation\n")
238238
} else {
239-
fmt.Fprintf(o.Streams.ErrOut, "Creating kind cluster %s with network %s\n", clusterName, dockerNetwork)
239+
fmt.Fprintf(o.Streams.ErrOut, "Creating kind cluster %s with network %s\n", clusterName, o.KindNetwork)
240240
err := provider.Create(clusterName,
241241
cluster.CreateWithRawConfig([]byte(clusterConfig)),
242242
cluster.CreateWithWaitForReady(o.WaitForReadyTimeout),
@@ -304,7 +304,7 @@ func (o *DevOptions) getClusterIPAddress(ctx context.Context, clusterName, netwo
304304
func (o *DevOptions) installHelmChart(_ context.Context, restConfig *rest.Config) error {
305305
actionConfig := new(action.Configuration)
306306

307-
if err := actionConfig.Init(&restConfigGetter{config: restConfig}, "kube-bind", "secret", func(format string, v ...interface{}) {}); err != nil {
307+
if err := actionConfig.Init(&restConfigGetter{config: restConfig}, "kube-bind", "secret", func(format string, v ...any) {}); err != nil {
308308
return fmt.Errorf("failed to initialize helm action config: %w", err)
309309
}
310310

@@ -315,32 +315,32 @@ func (o *DevOptions) installHelmChart(_ context.Context, restConfig *rest.Config
315315
}
316316
actionConfig.RegistryClient = registryClient
317317

318-
values := map[string]interface{}{
319-
"image": map[string]interface{}{
318+
values := map[string]any{
319+
"image": map[string]any{
320320
"repository": o.Image,
321321
"tag": o.Tag,
322322
},
323-
"examples": map[string]interface{}{
323+
"examples": map[string]any{
324324
"enabled": true,
325325
},
326-
"backend": map[string]interface{}{
326+
"backend": map[string]any{
327327
"listenAddress": "0.0.0.0:8080",
328328
"namespacePrefix": "kube-bind-",
329329
"externalAddress": "https://kube-bind.dev.local:6443",
330330
"externalServerName": "kind-provider-control-plane",
331331
"consumerScope": "cluster",
332-
"oidc": map[string]interface{}{
332+
"oidc": map[string]any{
333333
"callbackUrl": "http://kube-bind.dev.local:8080/api/callback",
334334
"issuerUrl": "http://kube-bind.dev.local:8080/oidc",
335335
"type": "embedded",
336336
},
337337
},
338-
"service": map[string]interface{}{
338+
"service": map[string]any{
339339
"type": "NodePort",
340340
"port": 8080,
341341
"nodePort": 31000,
342342
},
343-
"hostAliases": []map[string]interface{}{
343+
"hostAliases": []map[string]any{
344344
{
345345
"ip": "0.0.0.0",
346346
"hostnames": []string{"kube-bind.dev.local"},

cli/pkg/kubectl/dev/plugin/delete.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,26 @@ limitations under the License.
1717
package plugin
1818

1919
import (
20-
"context"
2120
"fmt"
2221
"os"
2322
"runtime"
2423

2524
"sigs.k8s.io/kind/pkg/cluster"
2625
)
2726

28-
func (o *DevOptions) RunDelete(ctx context.Context) error {
29-
if err := o.deleteCluster(ctx, o.ProviderClusterName); err != nil {
27+
func (o *DevOptions) RunDelete() error {
28+
if err := o.deleteCluster(o.ProviderClusterName); err != nil {
3029
return err
3130
}
3231

33-
if err := o.deleteCluster(ctx, o.ConsumerClusterName); err != nil {
32+
if err := o.deleteCluster(o.ConsumerClusterName); err != nil {
3433
return err
3534
}
3635

37-
return o.cleanupHostEntries(ctx)
36+
return o.cleanupHostEntries()
3837
}
3938

40-
func (o *DevOptions) deleteCluster(ctx context.Context, clusterName string) error {
39+
func (o *DevOptions) deleteCluster(clusterName string) error {
4140
fmt.Fprintf(o.Streams.ErrOut, "Deleting kind cluster %s\n", clusterName)
4241
provider := cluster.NewProvider()
4342

@@ -56,7 +55,7 @@ func (o *DevOptions) deleteCluster(ctx context.Context, clusterName string) erro
5655
return nil
5756
}
5857

59-
func (o *DevOptions) cleanupHostEntries(ctx context.Context) error {
58+
func (o *DevOptions) cleanupHostEntries() error {
6059
if err := removeHostEntry("kube-bind.dev.local"); err != nil {
6160
fmt.Fprintf(o.Streams.ErrOut, "Failed to remove host entry: %v\n", err)
6261
fmt.Fprintf(o.Streams.ErrOut, "Warning: Could not automatically remove host entry. Please run:\n")

cli/pkg/kubectl/dev/plugin/example.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ limitations under the License.
1717
package plugin
1818

1919
import (
20-
"context"
2120
"fmt"
2221
)
2322

@@ -29,7 +28,7 @@ metadata:
2928
spec:
3029
tier: Dedicated`
3130

32-
func (o *DevOptions) RunPrintExample(ctx context.Context) error {
31+
func (o *DevOptions) RunPrintExample() error {
3332
fmt.Fprintf(o.Streams.Out, "%s", example)
3433
return nil
3534
}

0 commit comments

Comments
 (0)