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

Commit

Permalink
🐛 Fix externaldns type override (#414)
Browse files Browse the repository at this point in the history
  • Loading branch information
Julius Pedersen committed Mar 23, 2021
1 parent 271479d commit 31fcf3a
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 12 deletions.
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") }

0 comments on commit 31fcf3a

Please sign in to comment.