Skip to content

Commit 8c6cd97

Browse files
authored
detect kind provider correctly (#436)
Signed-off-by: Manabu McCloskey <[email protected]>
1 parent 5ecab77 commit 8c6cd97

File tree

9 files changed

+31
-322
lines changed

9 files changed

+31
-322
lines changed

pkg/cmd/delete/root.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"fmt"
55

66
"github.com/cnoe-io/idpbuilder/pkg/cmd/helpers"
7+
"github.com/cnoe-io/idpbuilder/pkg/kind"
8+
"github.com/cnoe-io/idpbuilder/pkg/util"
79
"github.com/spf13/cobra"
810
"sigs.k8s.io/kind/pkg/cluster"
911
)
@@ -32,11 +34,12 @@ func preDeleteE(cmd *cobra.Command, args []string) error {
3234
func deleteE(cmd *cobra.Command, args []string) error {
3335
logger := helpers.CmdLogger
3436
logger.Info("deleting cluster", "clusterName", name)
35-
detectOpt, err := cluster.DetectNodeProvider()
37+
detectOpt, err := util.DetectKindNodeProvider()
3638
if err != nil {
3739
return err
3840
}
39-
provider := cluster.NewProvider(detectOpt)
41+
42+
provider := cluster.NewProvider(cluster.ProviderWithLogger(kind.KindLoggerFromLogr(&logger)), detectOpt)
4043
if err := provider.Delete(name, ""); err != nil {
4144
return fmt.Errorf("failed to delete cluster %s: %w", name, err)
4245
}

pkg/kind/cluster.go

Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@ import (
1111
"strings"
1212

1313
"github.com/cnoe-io/idpbuilder/api/v1alpha1"
14-
"github.com/cnoe-io/idpbuilder/pkg/runtime"
1514
"github.com/cnoe-io/idpbuilder/pkg/util"
1615
"github.com/go-logr/logr"
1716
"sigs.k8s.io/controller-runtime/pkg/log"
1817
kindv1alpha4 "sigs.k8s.io/kind/pkg/apis/config/v1alpha4"
1918
"sigs.k8s.io/kind/pkg/cluster"
2019
"sigs.k8s.io/kind/pkg/cluster/nodes"
21-
"sigs.k8s.io/kind/pkg/cluster/nodeutils"
2220
kindexec "sigs.k8s.io/kind/pkg/exec"
2321
"sigs.k8s.io/yaml"
2422
)
@@ -34,7 +32,6 @@ var (
3432

3533
type Cluster struct {
3634
provider IProvider
37-
runtime runtime.IRuntime
3835
name string
3936
kubeVersion string
4037
kubeConfigPath string
@@ -122,22 +119,15 @@ func (c *Cluster) getConfig() ([]byte, error) {
122119
}
123120

124121
func NewCluster(name, kubeVersion, kubeConfigPath, kindConfigPath, extraPortsMapping string, cfg v1alpha1.BuildCustomizationSpec, cliLogger logr.Logger) (*Cluster, error) {
125-
detectOpt, err := cluster.DetectNodeProvider()
122+
detectOpt, err := util.DetectKindNodeProvider()
126123
if err != nil {
127124
return nil, err
128125
}
129126

130-
provider := cluster.NewProvider(detectOpt, cluster.ProviderWithLogger(kindLoggerFromLogr(&cliLogger)))
131-
132-
rt, err := runtime.DetectRuntime()
133-
if err != nil {
134-
return nil, err
135-
}
136-
setupLog.Info("Runtime detected", "provider", rt.Name())
127+
provider := cluster.NewProvider(cluster.ProviderWithLogger(KindLoggerFromLogr(&cliLogger)), detectOpt)
137128

138129
return &Cluster{
139130
provider: provider,
140-
runtime: rt,
141131
name: name,
142132
kindConfigPath: kindConfigPath,
143133
kubeVersion: kubeVersion,
@@ -161,31 +151,6 @@ func (c *Cluster) Exists() (bool, error) {
161151
return false, nil
162152
}
163153

164-
func (c *Cluster) RunsOnRightPort(ctx context.Context) (bool, error) {
165-
allNodes, err := c.provider.ListNodes(c.name)
166-
if err != nil {
167-
return false, err
168-
}
169-
170-
cpNodes, err := nodeutils.ControlPlaneNodes(allNodes)
171-
if err != nil {
172-
return false, err
173-
}
174-
175-
var cpNodeName string
176-
for _, cpNode := range cpNodes {
177-
if strings.Contains(cpNode.String(), c.name) {
178-
cpNodeName = cpNode.String()
179-
}
180-
}
181-
if cpNodeName == "" {
182-
return false, nil
183-
}
184-
185-
return c.runtime.ContainerWithPort(ctx, cpNodeName, c.cfg.Port)
186-
187-
}
188-
189154
func (c *Cluster) Reconcile(ctx context.Context, recreate bool) error {
190155
clusterExitsts, err := c.Exists()
191156
if err != nil {
@@ -195,18 +160,11 @@ func (c *Cluster) Reconcile(ctx context.Context, recreate bool) error {
195160
if clusterExitsts {
196161
if recreate {
197162
setupLog.Info("Existing cluster found. Deleting.", "cluster", c.name)
198-
c.provider.Delete(c.name, "")
199-
} else {
200-
rightPort, err := c.RunsOnRightPort(ctx)
163+
err := c.provider.Delete(c.name, "")
201164
if err != nil {
202-
return err
203-
}
204-
205-
if !rightPort {
206-
return fmt.Errorf("can't serve port %s. cluster %s is already running on a different port", c.cfg.Port, c.name)
165+
return fmt.Errorf("deleting cluster %w", err)
207166
}
208-
209-
// reuse if there is no port conflict
167+
} else {
210168
setupLog.Info("Cluster already exists", "cluster", c.name)
211169
return nil
212170
}

pkg/kind/cluster_test.go

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import (
77
"testing"
88

99
"github.com/cnoe-io/idpbuilder/api/v1alpha1"
10-
runtime "github.com/cnoe-io/idpbuilder/pkg/runtime"
1110
"github.com/docker/docker/api/types"
1211
"github.com/docker/docker/client"
1312
"github.com/go-logr/logr"
1413
"github.com/stretchr/testify/assert"
1514
"github.com/stretchr/testify/mock"
16-
"sigs.k8s.io/kind/pkg/cluster/constants"
1715
"sigs.k8s.io/kind/pkg/cluster/nodes"
1816
"sigs.k8s.io/kind/pkg/exec"
1917
)
@@ -204,7 +202,6 @@ func (m *mockProvider) ListNodes(name string) ([]nodes.Node, error) {
204202

205203
type mockRuntime struct {
206204
mock.Mock
207-
runtime.IRuntime
208205
}
209206

210207
func (m *mockRuntime) ContainerWithPort(ctx context.Context, name string, port string) (bool, error) {
@@ -257,44 +254,3 @@ func (n *NodeMock) CommandContext(ctx context.Context, cmd string, args ...strin
257254
mockArgs := n.Called(nil)
258255
return mockArgs.Get(0).(exec.Cmd)
259256
}
260-
261-
func TestRunsOnWrongPort(t *testing.T) {
262-
// Mock node
263-
mockNode := &NodeMock{}
264-
mockNode.On("Role").Return(constants.ControlPlaneNodeRoleValue, nil)
265-
mockNode.On("String").Return("test-cluster")
266-
267-
mockNodes := []nodes.Node{
268-
mockNode,
269-
}
270-
271-
// Mock provider
272-
mockProvider := &mockProvider{}
273-
mockProvider.On("ListNodes", "test-cluster").Return(mockNodes, nil)
274-
275-
cluster := &Cluster{
276-
name: "test-cluster",
277-
provider: mockProvider,
278-
cfg: v1alpha1.BuildCustomizationSpec{
279-
Port: "8080",
280-
},
281-
}
282-
283-
// Mock runtime
284-
mockRuntime1 := &mockRuntime{}
285-
mockRuntime1.On("ContainerWithPort", context.Background(), "test-cluster", "8080").Return(true, nil)
286-
cluster.runtime = mockRuntime1
287-
288-
result, err := cluster.RunsOnRightPort(context.Background())
289-
assert.NoError(t, err)
290-
assert.True(t, result)
291-
292-
// Mock Docker client
293-
mockRuntime2 := &mockRuntime{}
294-
mockRuntime2.On("ContainerWithPort", context.Background(), "test-cluster", "8080").Return(false, nil)
295-
cluster.runtime = mockRuntime2
296-
result, err = cluster.RunsOnRightPort(context.Background())
297-
298-
assert.NoError(t, err)
299-
assert.False(t, result)
300-
}

pkg/kind/kindlogger.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ func (l *kindLogger) V(level kindlog.Level) kindlog.InfoLogger {
3535
return newKindInfoLogger(l.cliLogger, int(level))
3636
}
3737

38-
// this is a wrapper of logr.Logger made specifically for kind's InfoLogger.
38+
// KindLoggerFromLogr is a wrapper of logr.Logger made specifically for kind's InfoLogger.
3939
// https://github.com/kubernetes-sigs/kind/blob/1a8f0473a0785e0975e26739524513e8ee696be3/pkg/log/types.go
40-
func kindLoggerFromLogr(logrLogger *logr.Logger) *kindLogger {
40+
func KindLoggerFromLogr(logrLogger *logr.Logger) *kindLogger {
4141
return &kindLogger{
4242
cliLogger: logrLogger,
4343
}

pkg/runtime/docker.go

Lines changed: 0 additions & 86 deletions
This file was deleted.

pkg/runtime/finch.go

Lines changed: 0 additions & 89 deletions
This file was deleted.

pkg/runtime/provider.go

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)