Skip to content
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
5 changes: 5 additions & 0 deletions pkg/environment/magic.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ func (mr *MagicEnvironment) Finish() {
var result milestone.Result = unknownResult{}
if mr.managedT != nil {
result = mr.managedT
if !result.Failed() {
if err := feature.DeleteResources(mr.c, mr.managedT, mr.References()); err != nil {
mr.managedT.Fatal(err)
}
}
}
if mr.milestones != nil {
mr.milestones.Finished(result)
Expand Down
31 changes: 14 additions & 17 deletions pkg/feature/feature.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,16 +195,21 @@ func (f *Feature) References() []corev1.ObjectReference {
// DeleteResources delete all known resources to the Feature registered
// via `Reference`.
//
// Use References to get the undeleted resources.
//
// Expected to be used as a StepFn.
func (f *Feature) DeleteResources(ctx context.Context, t T) {
if err := DeleteResources(ctx, t, f.References()); err != nil {
t.Fatal(err)
}
}

func DeleteResources(ctx context.Context, t T, refs []corev1.ObjectReference) error {
dc := dynamicclient.Get(ctx)
for _, ref := range f.References() {

for _, ref := range refs {

gv, err := schema.ParseGroupVersion(ref.APIVersion)
if err != nil {
t.Fatalf("Could not parse GroupVersion for %+v", ref.APIVersion)
return fmt.Errorf("could not parse GroupVersion for %+v", ref.APIVersion)
}

resource := apis.KindToResource(gv.WithKind(ref.Kind))
Expand All @@ -222,15 +227,11 @@ func (f *Feature) DeleteResources(ctx context.Context, t T) {
}
}

// refFailedDeletion keeps the failed to delete resources.
var refFailedDeletion []corev1.ObjectReference

err := wait.Poll(time.Second, 4*time.Minute, func() (bool, error) {
refFailedDeletion = nil // Reset failed deletion.
for _, ref := range f.References() {
for _, ref := range refs {
gv, err := schema.ParseGroupVersion(ref.APIVersion)
if err != nil {
t.Fatalf("Could not parse GroupVersion for %+v", ref.APIVersion)
return false, fmt.Errorf("could not parse GroupVersion for %+v", ref.APIVersion)
}

resource := apis.KindToResource(gv.WithKind(ref.Kind))
Expand All @@ -243,7 +244,7 @@ func (f *Feature) DeleteResources(ctx context.Context, t T) {
continue
}
if err != nil {
refFailedDeletion = append(refFailedDeletion, ref)
LogReferences(ref)(ctx, t)
return false, fmt.Errorf("failed to get resource %+v %s/%s: %w", resource, ref.Namespace, ref.Name, err)
}

Expand All @@ -254,14 +255,10 @@ func (f *Feature) DeleteResources(ctx context.Context, t T) {
return true, nil
})
if err != nil {
LogReferences(refFailedDeletion...)(ctx, t)
t.Fatalf("failed to wait for resources to be deleted: %v", err)
return fmt.Errorf("failed to wait for resources to be deleted: %v", err)
}

f.refsMu.Lock()
defer f.refsMu.Unlock()

f.refs = refFailedDeletion
return nil
}

var (
Expand Down