Skip to content
This repository has been archived by the owner on Mar 2, 2024. It is now read-only.

🐛 Fix externaldns type override #414

Merged
merged 2 commits into from
Mar 23, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions pkg/api/core/run/kube_run.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
package run

import (
stdlibErrors "errors"
"fmt"
"time"

"k8s.io/apimachinery/pkg/util/wait"

v1 "github.com/oslokommune/okctl/pkg/kube/externalsecret/api/types/v1"

"github.com/mishudark/errors"
"github.com/oslokommune/okctl/pkg/kube/manifests/scale"

"github.com/oslokommune/okctl/pkg/kube/manifests/configmap"
Expand Down Expand Up @@ -310,13 +306,7 @@ func (k *kubeRun) CreateExternalDNSKubeDeployment(opts api.CreateExternalDNSKube

err = client.Watch(resources, 2*time.Minute) // nolint: gomnd
if err != nil {
wrappedErr := fmt.Errorf("failed while waiting for resources to be created: %w", err)

if stdlibErrors.Is(wrappedErr, wait.ErrWaitTimeout) {
return nil, errors.E(err, errors.Timeout)
}

return nil, wrappedErr
return nil, fmt.Errorf("failed while waiting for resources to be created: %w", err)
}

deployment, err := yaml.Marshal(ext.DeploymentManifest())
Expand Down
18 changes: 17 additions & 1 deletion pkg/api/core/service_kube.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package core

import (
"context"
stderrors "errors"
"fmt"

"k8s.io/apimachinery/pkg/util/wait"

"github.com/mishudark/errors"
"github.com/oslokommune/okctl/pkg/api"
Expand Down Expand Up @@ -131,7 +135,19 @@ func (k *kubeService) CreateExternalDNSKubeDeployment(_ context.Context, opts ap

kube, err := k.run.CreateExternalDNSKubeDeployment(opts)
if err != nil {
return nil, errors.E(err, "creating external dns", errors.Internal)
var (
wrappedErr = fmt.Errorf("creating external dns: %w", err)
kind errors.Kind
)

switch {
case stderrors.Is(err, wait.ErrWaitTimeout):
kind = errors.Timeout
default:
kind = errors.Internal
}

return nil, errors.E(wrappedErr, kind)
}

return kube, nil
Expand Down
65 changes: 65 additions & 0 deletions pkg/api/core/service_kube_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package core

import (
"context"
"testing"

"github.com/mishudark/errors"
"github.com/oslokommune/okctl/pkg/api"
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/util/wait"
)

func TestEnsureTimeoutType(t *testing.T) {
// Had a case where the error kind got overridden. The service layer is supposed to convert what ever the lower
// levels return into meaningful errors for okctl
ks := NewKubeService(mockKubeRun{})

_, err := ks.CreateExternalDNSKubeDeployment(context.Background(), api.CreateExternalDNSKubeDeploymentOpts{
ID: createValidID(),
HostedZoneID: "someid",
DomainFilter: "somefilter",
})

assert.True(t, errors.IsKind(err, errors.Timeout))
}

func createValidID() api.ID {
return api.ID{
Region: "eu-west-1",
AWSAccountID: "123456789012",
Environment: "test",
Repository: "bugged",
ClusterName: "bugged-test",
}
}

type mockKubeRun struct{}

func (m mockKubeRun) CreateExternalDNSKubeDeployment(_ api.CreateExternalDNSKubeDeploymentOpts) (*api.ExternalDNSKube, error) {
return nil, wait.ErrWaitTimeout
}

func (m mockKubeRun) CreateStorageClass(_ api.CreateStorageClassOpts) (*api.StorageClassKube, error) {
panic("implement me")
}

func (m mockKubeRun) CreateExternalSecrets(_ api.CreateExternalSecretsOpts) (*api.ExternalSecretsKube, error) {
panic("implement me")
}

func (m mockKubeRun) DeleteExternalSecrets(_ api.DeleteExternalSecretsOpts) error {
panic("implement me")
}

func (m mockKubeRun) CreateConfigMap(_ api.CreateConfigMapOpts) (*api.ConfigMap, error) {
panic("implement me")
}

func (m mockKubeRun) CreateNamespace(_ api.CreateNamespaceOpts) (*api.Namespace, error) {
panic("implement me")
}

func (m mockKubeRun) DeleteNamespace(_ api.DeleteNamespaceOpts) error { panic("implement me") }
func (m mockKubeRun) DeleteConfigMap(_ api.DeleteConfigMapOpts) error { panic("implement me") }
func (m mockKubeRun) ScaleDeployment(_ api.ScaleDeploymentOpts) error { panic("implement me") }